学園祭アドベントカレンダー8日目を担当します、@sirogane1013です!
私は東京工業大学の学園祭『工大祭』の実行委員会で、Webサイト周りのいろいろをやる仕事に3年間従事してきました。
書こうと思ったネタはいろいろあったのですが、フレームワークLaravelを導入した話を書こうと思います!
結論としては世にあふれるLaravel布教記事になります。ですが、学園祭の実行委員という「小規模」「初心者多」な環境におけるLaravelの利用という点で見てもらえればいいかと思います。
はっきり言って自分自身、1年ちょっとLaravelを触った程度の初心者なので、間違い等あればご指摘お願いします。
導入に至るまで
Laravelを導入するまで、当委員会ではFuelPHPというフレームワークを使っていました。
FuelPHP自体はいいところもいろいろあります。しかし、メジャーリリースがなかなか行われなかったり、単純に流行りではないので情報が少なかったりで運用が難しくなってきました。
そこで移行先を考えて、(多分)今一番熱いPHPフレームワークなLaravelが選ばれました。
Laravelを導入してよかったこと
実装がしやすい
Laravelといえばサービスコンテナというイメージがありますが、このサービスコンテナをしっかり利用していくことで、自然に保守性の高いアプリケーションを構築していけます。
サービスコンテナとは何かを説明すると長くなってしまうので、サービスコンテナによって得られる利点の例を挙げようと思います。
例えばあるWebアプリケーションで、リクエストの内容をもとにいろいろな処理をしたいとします。この時、Laravelでは次のような記述でリクエストの内容を取得できます。
/*引数に指定したインスタンスがサービスコンテナにより注入される*/
public function index(Request $request)
{
/*ここに処理を書く*/
}
このように、リクエストの内容が入ったRequest
インスタンスが欲しいなら、Request
インスタンスを利用したいメソッドで引数にRequest
を指定します。
この際のインスタンス生成の手続きは隠蔽されているため、よくわからなくても利用できるのが素晴らしいです。
ほかにも、自分で実装したクラスをサービスコンテナで管理することにより、クラス同士の疎結合が保たれ、保守性が上がります。
セキュリティ周りがしっかりしている
Webサイトの構築にあたってフレームワークを利用するメリットの1つは、セキュリティ面のサポートを得ることではないでしょうか。
Laravelはセキュリティ周りの対策がしっかりしているので、そこまで知識がなくても自然と安全なサイトが構築できます。
たとえば、Laravelはデフォルトでcsrfトークンチェックが必須となっています。一方で、たった1行追記するだけでcsrf保護を有効にできるという手軽さも持ち合わせています。
<form method="POST" action="/profile">
@csrf
...
</form>
↑の記述だけでcsrfへの対策になります!
ほかにも、データベースへのクエリの発行などで様々な対策が施されています。しかし、利用する上で、それらの実装は隠蔽されているので初心者にも大変扱いやすいです!
ググれば大体わかる
正直これが一番の利点、大正義です。ググれば大体のことが書いてあります。
FuelPHPを使っていた時は全然探したい情報を見つけられず、苦労した覚えがあります...
Laravelは非常にコミュニティや情報交換が盛んで、その点で困ることはほとんどなかったです。
Laravelの導入でつまずいたこと
Laravel導入の利点の話はほかにもごまんとあると思うので、こっちが本題になります。
Laravelを知っている人がほとんどいない中で困った点の話です。
体系的に学びづらい
これがだいぶしんどかったです...
1から学ぼうと思うと、Laravelは初心者には結構厳しめだと思います。
比較対象としてわかりやすいのはRuby on Railsだと思います。
Railsは公式のチュートリアルがすごくしっかりしていて、初めてWebサイトを構築するような場合でも手厚くサポートしてくれるところがあります。
一方Laravelは、公式ドキュメントにデザインパターンとかWebとかの用語が説明なしにバンバン出てくるので、初めての時にはすごく読みづらいです。(最終的には何度もお世話になるのですが...)
最低限、MVCパターンの知識とWebの基本知識は別で仕入れるのがいいと思います。
まとめ
やはり学園祭の実行委員のような小規模な集団には学習コストの高さがネックかなと思います。
しかし、それを補ってなお得られる利点が大きいので、PHPを使った開発でフレームワークを導入するならLaravelがいいのではないかなと思います。
ここには書いていませんが、フロントエンドフレームワークとの連携とかもできるので、Vueみたいなのをやってみたいという際にもお勧めできます。