ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

CakePHP3.5->CakePHP3.6にアップデートしたときの注意点 #cakephp

f:id:yourmystar_engineer:20181210165414j:plain


この記事は CakePHP Advent Calendar 2018 10日目の記事です。


こんにちは。ユアマイスター 星(@inase17000)です。

先日CakePHPのバージョンアップを行ったのですが、いくつか問題が起きたので備忘代わりにブログを書きます。

バージョンアップの経緯は下記の記事をごらんください。

yourmystar-engineer.hatenablog.jp

さて、いつもどおり composer install を行い、最新版にした上でphpunitで自動テストを走らせ〜と粛々と行ったのですが、一部意図しない挙動をする部分があったため、バージョンアップ後に追加の改修とリリースが必要になった点を紹介します。

バージョンアップ前:CakePHP 3.5.13

バージョンアップ後:CakePHP 3.6.13

Router::url()の仕様が変更されていた

影響

cakephp/src/Routing/Router.php

url($url = null, $full = false)
  • url()メソッドの第二引数 $full のtrue/falseにかかわらず、返却されるURLがクエリパラメータを含むものに変更されました。

対応策

クエリパラメータがないURLを期待しているコード箇所に対して、 url() メソッドの返り値から一度クエリパラメータを取り除くという共通処理を書き、暫定的な対応を行いました。

なんとなく、パラメータ有無もメソッドとして指定できても良い気がするので、ちょっと動きを見て後日プルリクを出して見ようかなと思います。

参考: https://qiita.com/itosho/items/cef99407fc9c8c21d4b6

DebugKitの表示条件判定が変更されていた

影響

3.6.13にバージョンアップしてから、開発環境で表示していたDebugKitが表示されないという事象が起きました。とくに開発中のエンジニアが使うツールなので顧客影響はないのですが、これまでのバージョンアップ時の確認観点に含まれていなかったため若干焦りました。

対応策

config/bootstrap.phpConfigure::write('DebugKit.forceEnable', true); を書き足しました。

if (Configure::read('debug')) {
    Configure::write('DebugKit.forceEnable', true);
    Plugin::load('DebugKit', ['bootstrap' => true]);
}

if文の条件のところで、環境ごとのdebugがtrue/falseを見ているため、検証環境や本番環境で表示されることはありません。開発環境のみでtrueになっていることをしっかり確認して、対応完了です。

参考: https://qiita.com/iika0220/items/25f83f06bd1ed1f3ae52

https://kojirooooocks.hatenablog.com/entry/2018/04/19/021442

教訓

いずれも即座に修正を完了し、問題なく今までどおりの開発環境に戻りました。

当たり前のことですが、オフィシャルのドキュメントはしっかり目を通すというのと、一気にやって影響範囲を大きくするのではなく小さくできるようなバージョンアップ方針を策定するのがミソだと思います。

以上です。さー、もうすぐPHPカンファレンス。準備しないとまずいとめちゃくちゃ焦ってます!がんばりましょう!