こんにちはーむちょこです。
新規プロダクトを開発するとき、どのフレームワークで作ろうか迷いますよね。
今回はトレンドを軸にフレームワークを選ぶ方が多い理由と、トレンド以外の視点についてもお伝えできたらと思います。
よかったらお付き合いください:)
トレンド
フレームワークの話になると、よく挙がるのが「今のトレンドは~」という話題ですが、これにはいくつか理由があります。
学習コストが低い
まずそもそもの話として、ある程度ドキュメントが充実していて学習コストが低いことが流行りの大きな要因の1つになっています。更に、参入者が増えると発信者も増えるので、学習コストがより低くなっていきます。
このような循環が起こるので、トレンドの技術は総じて学習コストが低い傾向にあります。
特に熟練者が少ないチームではダイレクトに開発スピードに関わってくるので、学習コストの低さは大事です!
仕事に困らない
技術者目線では、トレンドの技術を学んでおくと今~数年後まで仕事に困らないという利点があります。
絶頂期に新規開発案件が大量にあるのはもちろん、 数年先まで絶頂期に作られた大量のプロダクトの保守や改修の需要が見込めます。
事実、10年以上前に大流行したCakePHPの保守・改修案件は未だに存在しています。
人手に困らない
逆に経営者目線でも、トレンドの技術は技術者が集まりやすく、数年経ってもその技術を扱える人が見つかりやすいという利点があります。
あまりにマイナーな技術や独自路線に走りすぎると、人手が見つからず費用が高騰する可能性があるので避けたいところです。
現在のトレンド
以上がトレンドが重要視される大きな理由です。
はずれを引きにくいので、迷ったらとりあえずトレンドのフレームワークを採用するのもアリだと思います。
トレンドで選ぶなら、今はLaravel一択です。
Laravelのドキュメントは、Hirohisa Kawaseさんという方が非常に読みやすい日本語ドキュメントを用意してくださっています( https://readouble.com/laravel/ )。
国内の人気の高さはこの通り。一強状態ですね。
規約の厳しさ
選択するときの他の要素として、規約の厳しさも気になります。
プロダクトや開発チームの事情に合わせて適切な自由度のフレームワークを選択することで、可読性・メンテナンス性あるいはカスタマイズのしやすさを上げることができます。
規約が厳しいフレームワーク
例えば、テックリードが不足しているチームでは、代わりに規約の厳しいフレームワークを選択することで一定以上の可読性や品質を保つことができます。
あるいは開発後、別の人物に保守業務を引き継ぐ場合も、元々規約が厳しいフレームワークを使っていれば敢えて規約について詳しいドキュメントを残す必要はありません。
規約の厳しいフレームワークの代表例としては、CakePHPが挙げられます。
私たちは「設定より規約」(convention over configuration) という考え方に賛成です。
https://book.cakephp.org/3.0/ja/intro/conventions.html
と言っているように、規約をとても大切にしているフレームワークです。
カスタマイズ性が高いフレームワーク
逆に規約の緩いフレームワークはその分カスタマイズ性が高いので、 独自性が強いプロダクトやチームにむいています。
カスタマイズ性の高さを売りにしていて人気のフレームワークには、CodeIgniterとZend Frameworkがあります。
CodeIgniterは軽量で小規模開発に向いているフレームワークで、Zend Frameworkは大規模開発に向いています。
Laravelもカスタマイズ性が高めなので、トレンドのメリットも取るならLaravelも良いでしょう。
機能・対応プラグイン
作りたい機能が特殊なものでなければ、既に他の人が似たような機能を用意してくれている可能性があります。
工数をグッと削減できて、その分他に時間をかけることも可能なので、既にあるものを活用できるフレームワークを選ぶのも手です。
ごく一般的なものであればフレームワーク自体に付随している場合もありますし(ex. Laravelの認証機能)、そうでなくてもフレームワークに対応しているプラグインやパッケージが公開されていることがあるので、GitHubやpakagistで検索してみるのも良いと思います(ライセンスにはご注意ください)。
学習コスト
トレンドのところでも触れましたが、学習コストが低いのは何もトレンドの技術だけではありません。
ドキュメントが充実しているフレームワークは他にもありますし、教えてくれる先輩がいる場合もあるかもしれません。
なにより、既に学習済みのフレームワークであればバージョンの差分を確認する程度の最低限のコストで済ませることができます。
納期が短くすぐに取り掛からなくてはいけない、当然ある程度の品質は必要、という場合は可能な限り学習コストを抑えるための判断を下すことも必要です。
…
と、いうわけで、私が主に気にしているのはこんなところです!
「自分はこういうことも考慮しているよ!」というご意見などは、ぜひTwitterで@muchoco_devにメンションを付けて教えてください✨