蛇使いの日常

コーンスネークを飼っているPythonエンジニアの日常や技術のことなど

DjangerがCakePHP3を使ってみて思ったこと

シコシコPHPで仕事をしている蛇使いです。

PythonでのフレームワークDjango一択!フルスタックではないPyramidには振り向きもしません。自分プロジェクトではDjangoとTornadoを合わせて使っています。

 

DjangoとCakePHP3

PHPで仕事をしていた時は、CakePHP1系を使っていました。久しぶりにPHPに戻って仕事をすると、CakePHPは3になっていました。

CakePHP3を使うと、1とはだいぶ変わっていました。そして思ったことが、Django開発している人間がCakePHP3の開発に携わったのか?ということ。

それぐらいCakePHP3はDjangoを使っている人間からすると、似ているな思うことがあります。

 

例えばO/Rマッパーのgetメソッド。データがなければExceptionを返す。Djangoのものと同じですね。他にもrequestオブジェクト、responseオブジェクト、時間もUTCで保存するようになっていました。他にも色々「似てるな~」っと思うところがあります。

Django1.0の時には、既にDjangoはこの様なつくりでした。

 

他にも一部のプロパティは、スネークケースで取得しないといけないという規約があったりします。これの矛盾についても後で書きます。

 

 

CakePHP3の残念なところ

CakePHP3の残念なところはなかなかあります!

まずマイグレーションDjangoのようにmakemigrationsでモデルからマイグレーションファイルを作成してくれません。マイグレーションファイルを手動で書きます。これはPhinxの問題なのか、Cakeがモデルにフィールド定義をしていないからかは調べていません。

 マッパー関数では、Djangoのselect_related的なものがありません。 関連テーブルも一緒に取得するか別で取得するかは指定できたいものです。

 ルーティングがNestedな場合は、コントローラー名が必ず入ります。冗長になってしまうことがあります。

 他にも使っていて色々思ったことがありました。 

 

迷走するPHPCakePHP

CakePHPは迷走しているように思います。CakePHP3でコーディングルールをZendよりにしたようですが、実はそれはPHPの標準とは反対方向に進んでいるようです。

private,protecedのプロパティ、メソッドは最初にアンダースコアから始めるのがZendのコーディングルールでした。Pythonでもprivateはアンダースコア1つつけて始めるようにして、暗黙で明示的にprivateだと表現していました。

しかし、PSR-2からはprivate,protectedをアンダースコアで始めてはいけないようになりました。CakePHP3のソースを見てみるとわかりますが、アンダースコア始まりのプロパティとメソッドがたくさん書かれていたり、用意されています。

PHPJavaのコーディングルールに寄せてしまったため、CakePHPのコーディングルールはもはやボロボロです。

 

CakePHP4へ

CakePHPは3になって良くなったといえば良くなっています。しかしまだまだDjangerからすると物足りません。CakePHP4では更なる進化を期待しています。