DEV Community

dala00
dala00

Posted on • Edited on • Originally published at crieit.net

CakePHPとLaravelの比較2018

経緯

2016年にこんなCakePHPとLaravelの比較記事を書いた。

CakePHPとLaravelの使い道

また、こちらの記事もCakePHPのみの記事だが完全にLaravelとの比較を意識していた。

CakePHP3の優位性を色々

この頃は正直CakePHPびいきだったが、時も流れ色々と状況や考え方も変わってきたので改めて考察してみた。(人によってはなんで今さらCakeとLaravelの比較なんてやってんだ、と思うかもしれないが)

情報量

検索にしても日本語の情報が非常に少ない気がするので本当に人気があるのかと思ってしまう。

当時Laravelについては上記のように書いていた。

今はどちらも十分。CakePHP3とか、Laravel5とかで検索すれば紛らわしい情報も減るし、困ったらドキュメント見れば大体分かったりする。

ヘルパー

LaravelのHtml, Formヘルパーはなんとなく不足している点が多いような気がする。 実際使ってない人もいるようだ。 radioボタン群すらメソッド一つで作れないとは。

当時上記のように書いていたとおり、FormヘルパーはやっぱCakeの方が楽な気がする。とはいえそんな細かく気にするところでもないかなという気はする。

設定

Laravelは設定量が多い。 パーツを追加する度にCakeだったらこんな設定しなくてもすぐ動かせるのに…。 と思いながら設定をしなければならない。 自由度が高いといえばそうなのかもしれないが、そんな自由度を得てまで時間をかけて開発したいのか、という疑問が湧いてくる。

これ多分Facadeの事を言ってたような気がする。Facadeを自分で作るのは確かに面倒だが、これはテストのやりやすさにも繋がるように便利に作られてるものだし、今となってはそんな気にするようなものじゃないと思う。

でもまあCakeはヘルパーやコンポーネント追加していくだけだからほんとに楽ではある。

あとは

ルーティングなんて設定しない

というのも書かれているが、正直ルーティングを設定するのはどのフレームワークでもあたりまえの事なのでこれも気にするようなことじゃないと思う。

とはいえ設定しなくても動くCakeはほんとに楽なのは楽。ただ、ルーティングを設定することでresourcesの恩恵を受けられコードもシンプルになるし、メリットも大きい。

CakePHPがまずいのは、bakeの自動生成がresources形式になっていないことだ。これがデフォルトでできたらかなり良い。

DebugKit

これはCakeの圧勝に変わりはない。

モデル

Cakeのモデルはほんとに便利。Laravelでも特に不満はないが、Queryがモデルに属しておらずメソッド追加などが出来ないのがちょっと不満。(一応設定すればできるみたいだが)

ただCakeのバリデーションはコードが非常に長い。これはなんとかならないかな。

モデルは一長一短な気がする。

マイグレーション

これも自動生成してくれるCakePHPを褒めちぎってたが、マイグレーションを書くのも今や当たり前の事なので普通に自分で書いている。気にするほどのことでもない。

先進性

JavaScriptについてはCakePHPは遅れている。LaravelはデフォルトでVueとかBootstrapとか使えるのでそれだけでもだいぶ優位。CakePHPはまだjQueryでいいんじゃない? みたいな空気を醸し出していて先進的じゃない。将来どうなるのか心配になる。

他にもLaravelは色々なものと連携できるようにオフィシャルパッケージも続々追加されている。HomesteadやLaradockなど、周辺の開発環境なども色々と考慮されてきている。Laravel本家と周辺共に、みんなが開発しやすい環境を作り上げていこうという活発な姿勢が見られ非常に好感が持て、将来性が期待できる。ここは完全にCakeが敗北しているところ。

というか、ここだけでも今後はLaravelだけでいいかな、という感じすらしてきてしまう。

今年の結論

趣味だったらLaravelを使うと知識や技術も広まりやすいのでおすすめ。

仕事だったら色んなフレームワーク使えた方が扱える案件や考え方の幅が広がる。ただし他言語も含め、composerのようなパッケージ管理は当たり前の様に使われている時代なので、composerを使っていないようなフレームワークはもう覚える意味はないように思う。(全て個人的な見解)

Top comments (0)