Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

使っているプログラムで cakephp 3.x から cakephp 4.x への載せ変え作業をしてみた

php framework である cakephp 3.x を使ってシステム開発をしています.

4.0.0-beta3 もリリースされたし,だんだん cakephp 4.x のリリースが近づいてきたのかな?

ということで,様子を見るために cakephp3 で動かしている手元のプログラムを cakephp4 に載せてみました.

...

最初にざっと cakephp 4.0 の migration guide に目を通しておきます.

https://book.cakephp.org/4.0/en/appendices/4-0-migration-guide.html

3.8 で廃止するよって warinig が出ていてた method, properties, function などはすべて削除されるみたいだね.

あとはディレクトリ構成に変更があるのと,template の拡張子が .ctp から .php に変わった辺りが大きな変更点かな?

そのほかの細かい変更個所もありますが,とりあえずは後々調整する感じかな.

...

とりあえず,composer を使って cakephp 4.0.0-beta3 をインストール.

その後,cakephp 3.8.x で使っていた controller, model, template などのファイル一式をそれぞれ cakephp4 の方にコピー.

templates/{Element, Email, Layout} などはディレクトリ名が小文字に変更になっているのでちょっと注意が必要.

templates 以下のファイルは拡張子が変更になっているので一気に変更.

% find template -name "*.ctp" -exec rename .ctp .php {} \;

な感じかな?

あとは config/app.php の db 回りの設定を適当に修正してとりあえずデフォルトの Pages/display 画面を表示させてみました.

ふむふむ,問題なく表示できてるみたいだな.

次は cakephp 3.8.x から持ってきた方のファイルを表示させてみた...ら案の定,大量なエラー.

まぁ,わかってたことだけど.

migration guide を見ながらとりあえず Auth 回りを修正.

acl plugin まわりは無くなるみたいなので,とりあえずコメントアウトしてあとで修正する感じかな.Coockie 回りも修正は後回しかなということで,とりあえずコメントアウト.

で,予想外に修正が面倒だったのが,関数の戻値を書かないとエラーになってしまう件.php7 以降で関数の戻値宣言が導入されましたがそれが要因でエラーが多発します.

普通の関数などでは問題ないんだけど,Controller 中の

public function initialize()

や,Model/Table 中の

public function initialize(array $config)
public function validationDefault(Validator $validator)
public function buildRules(RulesChecker $rules)

なんかが軒並エラー.継承しているせいですね.

ということで

public function initialize(): void
public function initialize(array $config): void
public function validationDefault(Validator $validator): Validator
public function buildRules(RulesChecker $rules): RulesChecker

などに書き換える必要があります.

あとは適当に routes.php を書き換えて,まだ cakephp4 をサポートしていないであろう plugin を off.

その状態で cakephp 4.x ベースで画面表示ができるようになりました.所々,エラーになるところはあるけど,まぁ半分くらいの画面は動作.

その間,作業時間は2時間程度.

cakephp 2,x から 3.x に移行したときに比べれば雲泥の差で乗り換えはラクチンそうですね.

2.x から 3.x に移行したときには半年くらいかかったけど,3.x から 4.x へは1ヶ月くらいあれば余裕で載せ変えできそうな感じかな.

本格的に移行するのはおそらくまだ先だろうけど,4.x になってから削除されてしまう関数などを 3.x で運用している方でも徐々に修正しておいた方が良さそうですね.

あ,バージョン移行に関して plugin 関連は相変わらず悩ましい感じかなと思っています.

2.x から 3.x になったときに,3.x に移行されずにそのままメンテ放置されてしまった plugin をいくつか使っていたんですよね.で,いくつかは仕方なく自前で書き換えて使っていて,いくつかは plugin を使わない形に記述変更しました.同じようなことが 3.x から 4.x の移行時にもおこりそうかなと思っています.3.x にしたときにその危険性を避けるために,使う plguin を大幅に減らしはしたんですけど,それでもいくつかはまだ使っているんですよね.で,これらの plugin はまだ cakephp 4.x 系への対応がなされていない雰囲気.うーむ.

4.x への移行をきっかけに,外部 plugin は完全に使わない形にした方が良さそうかなぁと思っていたりもします.外部 plugin を使うと実装は楽なんだけどね....

と,とりあえず作業はそこまででストップ.

まぁ,今後は cakephp 4.x の様子をみつつ,移行時期などを含めて考えるって感じかなと思います.はい.

CakePHP 超入門

CakePHP 超入門

 
初めてのPHP

初めてのPHP