はじめに
この記事について
Techpit にて表題のテキストをリリースしたのでお知らせです。
タイトルに「教材(?)」と書いたのは、Techpit で出すのでいちおう教材ではあるんですが、胸を張って教材と呼ぶにはちょっと内容が薄いかなという含意があります。正直にいえば、お話をいただいたときも、書いているときも、こうやってリリースしたあとも、本当に価値があるものが (書ける|書けてる|書けた) んだろうか、という迷いがありました(いまもあります)。
そういう意味で、この記事では、最後のあがきとして自分を納得させられるような言い訳半分、本教材の紹介半分になるような感じになりました。
Techpit とは
「サービスを作りながらプログラミングが学べるプログラミング学習教材のマーケットプレイス」で、これまで2冊の教材を出させていただいています(いずれも Laravel 関連)。
自分の理解としては、ドットインストールのような初学者向けのサービスを利用したのちに次のステップに移るための少し高度な内容を扱う教材が多い印象で、実際、基本的な文法は身につけたものの、自力でアプリケーションを作れるまでには習熟できていないレベルの学習者に向けて「サービスを作りながら」というコンセプトをを大事にしているプラットフォームです。
経緯と目的
Techpit から依頼を受けて書きました。個人的にはいまさら概論?という気もしなくもなかったんですが、新しく PHP や Laravel を学び始める人がひとりでも増え、また、迷わず学習できることを願い、引き受けました。
Laravel が PHP のデファクトスタンダードなフレームワークになったことはいまや異論を挟む余地はないかと思いますが、私が使い始めた頃(7年前くらい?)は話題にはなっていたものの CakePHP や Symfony の案件がまだまだ多く、新規のプロジェクトの中ですら数えるほどしかなかったので、この5年くらいの間でだいぶん浸透したなぁと感慨深く感じています。
そういう意味では、長らくデファクトスタンダードと呼べるような存在がなかった群雄割拠な PHP フレームワーク界にさっそうと現れ、瞬く間にその地位を固め、GitHub のスター数で Ruby on Rails や Django を凌ぐポイントを叩き出した Laravel が、当たり前に存在し、当たり前に使えるいま、バックエンドのプログラミング言語に PHP を選ぶ理由としては「Laravel があるから」で十分なのかな、という思いもあります。
こんな動画が出るくらいには現在の PHP は進化しています。
個人的には、Laravel の登場がなければ PHP ユーザーはいまよりもっと少なくなっていただろうと思うので、Nikita Popov 氏と並んで作者の Taylor Otwell 氏には感謝しています、Laravel と出会わなければ私もとっくに PHP とお別れしていたでしょう。
ちなみに、Nikita Popov 氏は PHP 7 から 8 にかけてのアグレッシブかつドラスティックな進化を牽引した立役者のひとりです。
Thank you, Nikita! • PHP.Watch
本教材の内容
詳しくは冒頭に貼ったリンクから教材の紹介ページを読んでもらえばわかりますが、簡単に紹介すると、
- Laravel はどんなフレームワークか
- Laravel の歴史
- Laravel の主な機能(の一部)
- Laravel を選ぶ理由と適さないケース
- Laravel 学習ロードマップ
といったものになっています。
公式ドキュメントはもちろんのこと、インターネット上のリソースをいろいろ読めば、本教材に書かれていることの大部分は知識として得ることができるものです。しかしながら、いちおう自身で7年使ってきた経験で得たものもいくぶんか入れ込んでいますし、上に挙げた内容を一気に知れるコンテンツは他にないと思うので、これから Laravel 使ってみようかなと思っている方にとって、簡潔に全体像を把握できる内容になっているはずです。
書かなかったことのうち少し補足
言語選定について
自分はキャリアを C/C++ でスタートしたっていうこともありますが、静的型付け言語への信頼感はいまだに強くあります。一方で、コンパイルにかかる時間が惜しくて動的型付け言語に移ったという経緯もあるので、両者を単純に比較することは難しく感じています。実際、Rust(最近のお気に入りです)プログラムのコンパイルにはそれほどストレスを感じません(大きいアプリケーションは未経験というのはありそうですが)。
けれども、現状ではまだインタプリタ型のほうが、ウェブアプリケーションにおいては第一の選択肢であると思っていて、ハイパフォーマンスを求められる場合はその限りではありませんが、多くのウェブアプリケーションでは実行時パフォーマンスよりも開発時パフォーマンスを優先したほうがいいと思っているので、その点で PHP を推しています。
書けばすぐ動く、というのは塵も積もれば山となりますし、タイプヒンティングはないよりもあったほうがいいですし、Laravel の開発効率は非常に高いです。
正直にいえば、いまからプログラミングを始めるのであれば Python も有力な第一候補だと思います、機械学習や AI の領域において圧倒的な存在であり、それらと連動したアプリケーションであれば使用する言語を統一できるからです。ただ、自分も機械学習と連携したプロダクトに関わったことがありますが、たいていの場合、分担が別になると思うので、機械学習(や AI)も UI もひとりでやるのでない限り、言語は別になっても構わないと思います。
フレームワーク選定について
いちおう教材内では「明らかにオーバースペックであると判断した場合はマイクロフレームワークの採用を検討するといいでしょう」と書いたんですが、プロジェクト発足当初ではマイクロフレームワークで十分という判断がなされても、サービスの成長や方針の転換などによって多機能化が求められるケースもあるので、もし自分が選定する立場であれば、迷わず Laravel を選びます。もちろん、機能面だけでなく速度面の要求もあれば一概にはいえないですが、ただ単に「オーバースペックだから」という理由だけでマイクロフレームワークを選ぶことはしないです。
一方で、「アプリケーションの大部分を自分たちでコントロールしたい場合」はもう少し判断が難しくなるかなと思います。20年前まだ SI の仕事をしていたとき、プロダクトに OSS を組み込むなんてもってのほかで、自作するかカスタマーサポート付きの有償ライブラリしか使わせてもらえないプロジェクトは多々ありました。ライブラリに不具合があった場合リスクになるから、ですね。2023年現在そういったプロジェクトが存在するかはわかりませんが、少なくとも PHP が選択可能であれば OSS ライブラリも選択可能になるはずなので、言語は PHP だがフレームワークは不可、という状況にはなりにくいかなとは思います。が、いまだにオレオレフレームワークにこだわる管理職(経営層なのかな?)がいるという話もまれに聞くことがあるので、そういうケースでは、やむを得ないでしょうね。
マイクロフレームワークに関しては以前は Slim 推しだったんですが、バージョン4になってちょっとややこしい作りになってしまったので、いまは特に推しフレームワークはない状態です。
学習ロードマップについて
教材内にも書いたとおり大事なのは「公式ドキュメント」と「古い知識を新しい知識でアップデートし続ける必要」の2点なんですが、特に後者に関して軽く考えていると痛い目をみるというか、もうちょっと強調して書いておくべきだったかな、と思う点は、Laravel は開発サイクルが速く古いバージョンはどんどん切り捨てられていくので、継続的なアップデートが欠かせないということです(ライブラリ本体と知識両方)。
リリース計画は公開されていますし、多くの場合そのスケジュールに従ってリリースされているので、事前に自分たちの計画に盛り込んでおくことは容易なはずなのに、それを疎かにしてしまうチームは多いです。それがなぜなのかは謎なんですが、現実にそういったプロダクトは多々ありました。個人的には LTS(長期間のサポートがある特定のバージョン)は考えずにメジャーアップデートにはできるだけ速やかに追従していくことを勧めていますが、それは、LTS の期限が切れる直前に慌ててアップグレードするとその分変更量も増え、不具合の出るリスクがあがってしまうからです。
Laravel 以外のフレームワークでもそういったことは起こり得ますが、フレームワーク自体の更新速度によるため、やはり Laravel と付き合うためには継続的な更新が不可欠だと考えています。なので、ここまでやったら学習は終わり、ではなく、GitHub などで変更点を追う習慣や破壊的変更があった際にどのように対処するかの訓練などを含めて、学習が永久的に続くことを念頭に置いてほしいです。
おわりに
値段は980円と技術書のカテゴリでは安い部類ではありますが、冒頭に書いたとおり本当にそれだけの価値があるものが書けたのかどうかは自信がありません。その辺は売上とレビューの結果でわかるとは思いますが、しばらくはもうちょっと価値のある情報を提供できないか思案することになりそうです。ウェブ上のコンテンツなので改訂も比較的簡単にできるのがいいですね。