Laravelを使うべきか、2017

タグ: Laravel5.5LTS  

5.1LTSリリース時に書いた「Laravelを使うべきか」は、当サイトで現在一番アクセスがある記事です。

既に2年前の記事ですし、環境も変化してきました。それに合わせ多少意見も変わりました。

結論

  • LTSでは2年、通常のリリースでは半年しかメンテされない。Laravelを使用するなら、リリースごとのアップデートが必要。
  • 動作環境を満たし、フレームワーク使用や開発経験があり、Laravelが提供する機能が工数を減らしてくれるのであれば、Laravelをすすめる。
  • チームによる開発で、フレームワークによる「規約」を求めるのであれば、Laravelは適さない。
  • フレームワーク初心者であれば、使わないほうが良い。
  • フレームワーク経験者で、動作に必要な要件をそろえられ、今から始めるのであれば、5.5LTSをすすめる。
  • 動作環境が合わない、新し目の動作環境を用意するのが無理なら、古いLaravelバージョンを使用するのではなく、別のフレームワークを使うことをおすすめする。古いバージョンは既に保守期間が切れている。

便利だが、複雑なフレームワーク

Laravel3のころは、とてもシンプルなフレームワークでした。簡単であると言う理由で、人気に火がつきました。バージョンが進むにつれ、人気のポイントは利便性へ移っていきました。

そのその代償として、フレームワーク全体は高機能になり、複雑になりました。Laravelの各機能はさほど難しくはありません。しかし、それぞれの機能を活用するには、様々な知識を土台として理解しておく必要があります。

たとえば、キューを活用するには、機能の分離、Linuxのプロセス、プロセスの監視、外部サービスを利用するならそのキューシステムなどの知識が必要です。

Webシステムとしてベースとなる部分、たとえばコントローラ、ビュー、ルーティング、認証などのみを利用するのであれば、なにもLaravelである必要はありません。認証を持っていないフレームワークであっても、認証機能を用意しているライブラリは存在していますので、それらを利用すれば済みます。

たとえ基本的な機能だけを利用する場合であっても、LaravelはWebフレームワークです。開発環境や動作環境を構築するための知識が必要です。動作させるOSの知識、使用するWebサーバーの知識、デプロイ手法に関する知識などが必要です。最近のブラウザはフォームなどでHTTP通信をすると、危険なサイト扱いされます。認証を行うのであれば(そして、速度的にも)、WebサーバーのHTTPS設定の知識が必要です。そのためには、サーバー証明の知識も必要です。

開発環境であれば、Vagrant BoxでHomesteadが公式に用意されています。公式ではなくコミュニティによりDocker環境も用意されています。しかし、VagrantやDockerの知識が当然必要です。環境により上手く動作しないこともあり、そうしたトラブルシューティングは自分で行う必要があります。つまり、ここでも知識が必要です。

Laravelが現代的なPHPフレームワークである点でいえば、Composerの知識も必要です。

つまり、フレームワーク初心者やWeb開発初心者が使うには、知識量の面から難しいでしょう。サポートなしに学習するのは、困難です。

では、こうした土台となる知識を全部Laravelがドキュメントで教えるべきでしょうか?答えは「いいえ」です。

基本となる技術的な知識をLaravelが全部ドキュメントやチュートリアルで用意する必要があるとすると、膨大過ぎてメンテナンスできません。読む方だって大変です。

Laravelのドキュメントの方針は、「基本的な使用方法を教える」程度の内容で書かれています。それ以上の情報は検索したり、コミュニティの助けを得たりして解決することが求められます。Laravelはコードが比較的読みやすいフレームワークで、コメントが英文ですが入っているので、コードを直接読んだり、APIを調べることも必要になるでしょう。(そのほうがやたらQ&Aサイトで質問するより、早いことが多いでしょう。そして、勉強になります。)

逆に言えば、様々な技術の知識を薄くても広く知っているのであれば、Laravelは便利なフレームワークです。

教育

各種の学校で、Laravelを取り入れるかどうかは一長一短です。

前記の通り、複雑なフレームワークのため、機能全体を一週間に数時間、座学と実習を行うペースでLaravel全体をプログラミング初心者が一から学ぶなら、数年かかるでしょう。その間にアップデートされ、いくらか学習内容も変更することになるでしょう。

さらに、言語としてのPHPも同時に学ばせる状況であるなら、Laravel学習のペースは落ちるでしょう。そうなると、Laravelを採用しても「手順」だけをなぞる学習になり、応用力が身につくほどの学習は難しいでしょう。せいぜい、Webフレームワークの基本的な部分の理解が良いところです。それならば、単純なフレームワークを学習に利用するほうが分かり良いと思います。複数のフレームワークのルーティングやコントローラなどを学ばせ、基礎的な部分を中心に、柔軟に概念を掴ませるほうがベターです。

ただし、LaravelはPHPのフレームワークとして、最近人気です。つまり、その方面での就職を狙っている学生には有利になります。

学校でも、会社の中で仕事で行うにせよ、技術的なものの習得には本人のやる気と理解力が必要です。特に学校のカリキュラムに取り入れるのであれば、「学校で学ぶだけでは使いこなせない。自分の時間も使う覚悟が必要」であると念押しする必要があるでしょう。

まあ、好きこそものの上手あれで、伸びる生徒は自主的に勉強し、勝手に身に着けてくれるでしょう。しかし、大抵の生徒は落ちこぼれるでしょう。

Laravelの方針

Laravelは比較的新しい技術を利用します。PHPのバージョンも例外ではありません。5.5LTSではPHPバージョン7.0が最低ラインとなります。

Laravelは便利です。更に「先取」のフレームワークです。新し目の周辺技術を取り入れる方針です。そして、古いものを切り捨てます。

つまり、バージョンにより差異が発生します。

基本的には、バージョンアップに合わせ、既存のコードも「アップグレードガイド」にかかれている内容で、(そして、書かれていない部分でも影響起きる部分を)更新する必要があります。(こうした影響による不具合を見つけ対処するため、テストが必要です。)

アップグレードを行わず、古いバージョンのLaravelを使っているシステムを残して保守するのであれば、バージョンごとの差異に気をつける必要が起きます。

新しいバージョンのLaravelは便利になっています。それに慣れると古いバージョンの保守はストレスを感じるかもしれません。動作要件に合わせPHPやその他依存パッケージのバージョンを上げ、Laravel本体のバージョンアップごとに「アップグレード」作業を行うことをおすすめします。

フレームワーク初心者

Laravelに限りませんが、初心者は知識がありません。もし、英語が聞き取れるのであれば、Laracastsと言う、Laravelに関する有料チュートリアルサイトがあります。これで勉強すれば、多くの知識がまとめて学習できます。このサービスはJeffrey Way氏により運営されています。もともと、チュートリアルサイトの有名チューター(教える立場の人、つまり先生)でしたが、Laravelに出会った後に独立しました。このサービスで、Laravelを活用する知識のほとんどが補充できます。

Webサーバーの設定や、使用するフレームワークとライブラリで必要な拡張やプログラムをインストールする知識がなければ、本番環境は利用できません。Laravel Homesteadは2つの目的で作られました。一つは、開発環境を素早く構築できること、もう一つはバグ報告を同一環境で検証するためです。2つ目の使われ方は、今では無くなりました。面倒なため、利用が少なかったためです。

Vagrantの知識があれば、Homesteadで開発環境は用意できますが、本番環境を構築する際には知識が結局必要になります。

そうしたサーバーサイドの知識が薄い開発者でもサービスをリリースできるように、Homesteadと同等の動作環境をAWSやDigitalOceanなどのPVS上に構築してくれるのが、Laravel Forgeです。Laravel開発者であるTaylor Otwell氏による有料サービスです。

本番環境構築に関する知識不足は、お金で解決できます。

フレームワークはグッドプラクティスや知識の塊です。ですから、それが何を意味しているかがわかっているなら、便利です。

逆にわからないなら、勉強する必要があります。プロの開発者とて、その点は同じです。ただし、プロはあらかじめ「わかっている」部分が多いため、比較的少量の学習で使い始めることができます。

フレームワーク、Web開発の初心者であれば、ベースとなる知識を同時に学ぶ必要があります。既に書いた通り、利便性のためLaravelは様々な技術を含んでいます。それを理解し、使いこなすには幅広い知識が必要です。

「Webでサービスを公開する」目的でフレームワークを学ぶのであれば、よりシンプルなフレームワークを選びましょう。たとえ、Laravelの習得を最終目的にしている場合であっても、その前にシンプルなフレームワークでWebシステムの基本的な部分を学んでおくのは助けになります。(そして、初心者が考えつく程度のサービスでは、それで十分だと分かるでしょう。)

簡単には行かないよという警句として「LaravelはWordpressではありません」は常套句です。付け加えるなら、「Wordpressより5倍複雑で、5倍勉強が必要だけど、3倍便利だよ」。(数字は適当に変更してください)

フレームワークの選定

プロフェッショナルな開発者がフレームワークに求めるのは、それぞれ異なるでしょう。

Laravelは開発効率と多機能なことによる利便性が特徴です。

チーム開発により、大規模なシステムを構築する。規約が大切であると言うのであれば、Laravelではありません。Laravelは規約の緩いフレームワークです。開発者の好みに合わせられる部分が大きくなっています。それでもLaravelというのであれば、自主的にコーディングルールを作る必要が起きます。

保守の手間を少なくしたいのであれば、通常リリースのLaravelではありません。動作要件が合えば、2年間保守されるLTS版が利用できます。現在のLTSは5.5です。実際、LTSのリリースがなければ、日本でこれほど利用されたかは疑問です。

ライブラリとしての使用

最近のLaravel開発者のTaylor Otwellさんは、「関心の分離」にさほど関心がありません。その旨をツイートしています。パッケージを独立して使えると言うこともなくなりました。

それを反映してが、Laravelを構成するパッケージは、依存が強く、個別のライブラリとして使いづらくなりました。

Laravelは全体として、利便性重視のフレームワークです。それを考えれば、「そのまま使える」のが便利なわけです。Laravelのファンは、便利で開発効率のよい「オールインワン」フレームワークのLaravelが好きなわけです。

私は現状で問題ないと思っています。なぜなら、便利だからLaravelを使う人が多い現状、わざわざその部品を利用して別なことに使いたいという開発者は、他のフレームワークより少ないでしょう。

そもそも、Laravelがそうしているように、部品としてのライブラリィであれば、既にSymfonyやZendがあるわけです。Laravelが提供する必要はありません。

速度が…

もう繰り返されている、厄介ごとです。

「他のPHPフレームワークよりも遅い」

他の(PHP以外の者も含めた)フレームワークの高速化手法が使えます。そもそも、速度重視であれば言語の選定としてPHPがよいのかというところから検討が必要です。

これをわざわざ喧伝しているのは、実際ばりばりの技術屋さんではないようです。一番多いのが、「速度は検索に有利だ」とか「ショッピングサイトには速度が必要だ」という知識だけを持っている初心者が、早いフレームワークを求め比較サイトや比較記事を読み、人気のあるLaravelのスコアが悪いのを見て、たいそう大事のようにSNSに乗っけるというパターンです。

実際に使ってみれば…

実はこれほど長く書く必要はありません。実際に使ってもらえれば、わかります。

フレームワーク初心者が使えば、突っかかることが多くて挫折しやすいでしょう。基礎的な知識がないため、「自分が何がわかっていないのかも、わからない」状態になります。

他のフレームワーク経験者が使えば、多くの人が利点としてあげる「開発しやすい」が体験できます。それと同時に欠点も見えてくるはずです。

特にクリティカルなスピードが求められる世界でなければ、Laravelは十分実用的な速度を出してくれるでしょう。たぶん遅いとつぶやく人は、最適化された実働環境で実行していません。比較的速度が落ちる仮想環境でファイル共有にスピードの問題を抱えたまま利用し、しかも開発環境モードで実行してる可能性が大きのです。

Laravel自体を本番環境向けにデプロイし、Webサーバーや特にDB周りをチューニングし、アレヤコレヤの高速化をきちんと行って実行し、「それでも遅い」と言っている人は見かけません。実際に思っているハイスペック技術者はいると思いますが、そうした人たちは大抵、SNSでつぶやくほど暇じゃありません。

最後にリリースの復習

現状、5.5LTSがリリースされたばかりです。これにより、現在メンテされているバージョンは5.5LTSのみです。次の5.6が出れば、5.5LTSと5.6です。5.7が出れば5.5LTSと5.7です。次のLTSがリリースされるまで、5.5LTSと最新版のみがバグフィックスが適用される保守対象です。バグは修正されません。

セキュリティに関するパッチは、通常リリース版でもリリース後1年です。記憶が定かでないですが、メンテ機関の切れたバージョンにセキュリティパッチが出されたのは、過去1~2回程度しかありません。