m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

PHPに限らず、web系プログラミング言語の習得で、簡易掲示板を題材に使うのは、相当ダサい件

teratailのPHP界隈をウォッチしていると、しょっちゅう簡易掲示板のトラブルが持ち込まれていて、辟易しています。

「簡易掲示板」って何? 「掲示板」じゃなくて「簡易」がつく理由は?

「簡易」とつけることによって、仕様や機能要求を縮小して、作りやすさ優先で仕様を小さくしています。
それって、たいてい世の中のニーズの細かな部分を捨てているんですよね。
そのために、簡易掲示板を作って「わたしはプログラミングができる」と思い込むのは自由ですが、「こういう機能で作って欲しい」とハードルが上がったときの解決方法を知らない人に仕事は降りてこないと思います。
コーディングの文法を知ることがゴールではありません。
若干の関数の使い方を覚えることがゴールではありません。
ニーズをまっとうするコードを書いて、やっと仕事になるのです。

掲示板データの管理が、テキストファイルによるゆるい管理

初学者にデータベース(RDBMS、MySQL/mariaDBとかPostgreSQLとか)も教え込もうとすると受け取りきれないから、かんたんにテキストファイルによるデータ管理の仕方を教えることで、教える側が楽をしようという意図が見えます。
データベースの扱い方も知らない人に、仕事は降りてこないと思います。

それだけでなく、テキストファイルの読み書きをする上で、ファイルの排他ロックを考慮していないケースもあったりします。
複数の人が同時に投稿や編集や削除のアクションを取った場合、結果を保証できないわけです。

テキストファイルでのデータの区切りが、たいてい「<>」なんだけど、投稿時に含まれていたらどうするの?

たいていの簡易掲示板は、入力データの検証がない。
テキストファイルに投稿データを保持するのに、1行に詰め込むデータの区切りがたいてい「<>」なので、名前とかコメントに「<>」をつけるととたんに破綻する。
でも、簡易掲示板なんだからと理由をつけて対策しない。
インターネット上に公開したwebサービスなんて、いたずらされるのはしょっちゅうなのだから、どういう入力があっても破綻しないよう対策するすべを身に付けさせるべきだし、まずどういうことをすると「壊れる」のかを学ぶいい機会だと思うけども。

まぁ、対策と言っても、「<>」が含まれていたら「&lt;&gt;」に置き換えるくらいだったりするし。
それこそ、RDBMSにデータを保持するなら、データの区切りはデータベースに任せておけるため、そんな加工も不要だったりしますが。
(もちろん、RDBMSにデータを保持するときは投稿データの検証が必要ない、ということではなくて、常に外部から受け取るデータは問題が生じないか検証してからでないと使えないよ、ということを学んでほしい。)

そもそも、今どき掲示板を手作りするメリットってないよね?

インターネット黎明の頃は、アクセスカウンターを設置してあなたは何番目の訪問者ですとか、やたら文字が横に流れたりしていた、そんな時代にコミュニケーションをとるために掲示板を設置するなんてのはありましたけども。

メールよりもSNSが普及して掲示板を使うなんてケースもなくなりつつあり。
昔の名残で簡易掲示板を手作りして、どこに活かすんでしょうね。

つまり簡易掲示板づくりはダサい

実用に耐えないプロダクトを作り、
実用レベルから程遠い安全な入力のみ想定し、
同時アクセスや大量アクセスなど措定していないもので、
コーディングの文法や一部の関数の使い方だけ習得しても、
たいした学びにつながらないよ、と言いたい。

プログラミングに大事なことって

本番環境とテスト環境を分けて確立すること。
テスト環境ではエラーメッセージの表示を殊更強化して、エラーログ出力も強化して、些細なエラーも見逃さないこと。
エラー表示を強制的に潰すような書き方をしないこと。
テスト前にエディタ内で文法チェックくらいやれる、プログラミング向けの優秀なエディタを導入すること。

例えば、Techpitさんはどうよ

www.techpit.jp
オンライン学習サービスの中でも、敢えて無料にせず、一定の品質のプロダクトを作るのを教材執筆者との掛け合いで進めていけるのは、プログラミングの本質に触れやすい気がします。(回し者じゃないよ)