コネヒト開発者ブログ

コネヒト開発者ブログ

CakePHP3.5.1にアップデートしました!

こんにちは〜。先の投稿では幽☆遊☆白書を読んだと書きました、あれから少し日が空いたのですがその間にONE OUTSを読んだ次第です金城 (o0h_)です。
主人公がエゲツない天才で大活躍〜!って、やっぱり良いもんですね!!

さて、気づいたらCakePHPは3.5時代に突入!!しておりまして、
コネヒトでは3.4.12→3.5.0 →3.5.1へとアップデートを完了させております。
※ to 3.5.0は @itosho がやってくれました 💯

今回のエントリーでは、

  1. 個人的に3.5.0で入った気になるトピック
  2. 3.5.1のアップデート差分のおさらい

をしてみようと思います。!

https://cdn-ak.f.st-hatena.com/images/fotolife/i/itosho525/20170430/20170430222524.jpg

3.5.xへの移行と、個人的に気になったこと。

移行方法や主たる差分については、マイグレーションガイドを御覧ください

3.5 Migration Guide - 3.x

  • CsrfComponent がMiddlewareに
    • リクエスト自体に対する作用とでもいうべきか、少なくともController::actionをinvokeしてその中身(beforeFilterとか)で制御すべき内容じゃないよな〜、Routingより前にある方が自然だよなーと感じられる箇所かと
    • bookに記述があるのでご参照を! CSRF Middleware
  • Deprecated Combined Get/Set Methods
    • ひぃ、と声が出るほど大量にメソッドのリネームが走っています。。より分かりやすくなりそう!ですね
    • (余談) 現状、コネヒト(の私の関わっている範囲では)deprecated対応は「新規実装箇所は新ルールで」「既存箇所はボーイスカウトルール的に、視界に入ったところを随時」と対処しているところです。
      ただ、今回のアップデートのような大幅更新がある場合は、集中的に対応しても良いかもしれません(多分やる)
  • Connecting Scoped Middleware
    • 例えば「 /admin 以下でのみ適用する!」とかがやりやすくなるので、より「コントローラー と それ以外の分化」が進む事となりそうです。油断するとコントローラーがどんどんfatになっていきがちなので、嬉しい!
  • Console Integration Testing
    • 待っていました・・!
    • main() (など)のメソッドの単体テスト、っぽく書いていた部分はこちらにリプレイスしていくことになりそうです
  • Cake\Core\Configure::read()で、(該当キーが存在しなかった場合の)デフォルト値を設定できるように
    • 便利そう!! 🎉
    • 余談ですが、今のプロジェクトではConfigure::readOrFail()に良くお世話になっています!

改めて読み直してみると、多くの魅力的な変更が盛り込まれていると感じました。
この場で言及しているのは本当にごくごく一部ですが、細かい修正から「フレームワークの設計の見直しに関わるなぁ」といったレイヤーの変更まで、その粒度も多岐にわたります。
そのため、「特に直近ではアップデートを考えていないかな」という現場に関わる方でも、サラっと目を通してみることで「CakePHP自体がどうなろうとしているのか?」を感じられる部分があるかと思います。
ぜひ、チェックしてみる事をおすすめします!

3.5.1への変更

お次は、マイナーアップデート分である .0 → .1 の差分です。

bakery.cakephp.org

updates

  • アクティブなトランザクションがあるのにDB接続が切れた場合、warningを記録するように
  • Hash::remove()0 を指定したときに正しく動くように
  • Query::notMatching()が、BelongsToManyで複合キーを正しく扱えるように
  • SqlLocalDBでのDSN指定時の修正
  • Collection と Traversable の互換性の修正
  • template中でセットされたresponse headerが適切に送出されるように
  • Request::clientIp() (trustProxyを有効にしている場合)利用時に、最後に記されているIPを採用するように
  • Xml::build()parseHuge オプションを、デフォルトfalseに。元々ドキュメントは「false」として載っていたが、それに合わせた形。メモリの大食いの回避。
  • タイミング攻撃への対策強化
  • “クラシック”(PSR-7準拠でない) なディスパッチャでcookieが適切に扱われるように
  • AssetDispatcherが隠しファイル(.から始まるファイル)へのリクエストを許容しないように
  • バンドルされている cacert.pem の最新化(これにより、一部の認証局がリストから外れています)
  • Form::setErrors() メソッドの追加
  • ConsoleIntegrationTestCaseに、出力(stdout/stderr)に関するアサーションメソッドの追加
  • HtmlHelperがcss/javascript/imagesのURLをエスケープするように(XSS対策)

やったこと(to 3.5.1)

例によって!!という感じになってきましたが、今回の変更も特に要対応箇所らしき点は見受けられず、実際にリリース後にも問題は発生しておりません。

  1. リリースノートやgithubで。事前に変更箇所を確認
  2. composer update cakephp/cakephp
  3. 主要機能や直接的・間接的に変更内容が関係しそうな部分を中心に、ローカルで動作の確認
  4. CIの完走を確認
  5. リリース!

適宜、チーム内で他のエンジニアとコミュニケーションを取りながら上記の手順で進めております。
こういう時に肌感の共有がしやすくなるのが、アップデートをローテーションで回していることの利点かなぁと感じる日々です。

おわりに

すっかり涼しくなってきて、もう秋ですか〜秋は旅行に行きたくなりますね〜どうなんでしょう。
次回の更新は弊社Superエンジニア@super_mannerがお届けします!

それでは、よいCakeを〜