コネヒト開発者ブログ

コネヒト開発者ブログ

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

こんにちは、最近になって幽☆遊☆白書を読了した金城 (o0h_)です。
やはり 危機感 は大事だなと思いました。。それがある人から見ると、それのない人については「分かる」ってことですよね。しっかりと視座を上げて生きていかなければなりません。抜かりのない人間になりたい。

前回のアップデートから少し間が空いてしまいましたが・・>< またまたCakePHPのアップデートを行いました。 https://cdn-ak.f.st-hatena.com/images/fotolife/i/itosho525/20170430/20170430222524.jpg

bakery.cakephp.org

今回は、この間にあったupdatesについて、bakery上で言及されているモノから一部を取り上げて振り返ってみたいと思います。
少し期間が空いてしまったというのもあるので、全てには言及しません。
ぜひ、公式のリリースノートを御覧ください。

to 3.4.9

links

contents

  • RedisEngine、キー削除時の挙動を修正
    • Redisクラスタでの挙動に問題があったらしく、バグフィックスが当てられています
    • 42d4388
  • HasMany利用時のcontainを発行した際にfinderオプションの取扱について修正
  • IntegrationTestCase内でシミュレーションされるリクエストURLの組み立て方が不適切だったのを修正
  • Debugger::excerpt()で行数の取扱が不適切だったのを修正

to 3.4.10

links

contents

  • xdebug環境下で lastInsertId() が正しく動かないのを修正
    • マージログを見ても何を指すかわからなかったのですが、こういう挙動があったらしいです・・自分が最初に踏んだら掘り下げるの難儀しそうだな、と思うので恐ろしいですね・・😥
    • 1362f78
  • Formで適切に値をとれていなかったのを修正
  • Cosnsole::overwriteで渡す値の長さによって不適切な挙動が生じるのを修正
  • cleanCopy() を行った時に、association先に対するbeforeFindの設定に不適切なものがあったのを修正
  • Http\Client利用時の、リダイレクトのハンドリングに関する修正

to 3.4.11

links

contents

  • Formで指定されたがEntity上で扱えなかった値は、指定されたdefault値を返すように修正
  • 日時のmarshallingを行う際に数値文字列のチェックを厳格に
    • 「floatっぽいやつを、timestampと誤読するのを回避」といった内容
    • 21e5359

to 3.4.12

links

contents

  • Shell::out()でArrayを受け付けられるように
    • これはPRに入っているテストケースが分かりやすかったです。 $this->Shell->err(['Just', 'a', 'test']); に対して ['<error>Just</error>', '<error>a</error>', '<error>test</error>'] を出力するような
    • 3f2db4a
  • Cake\Http\Clientがtimeout時に504を返すように

個人的には、3.4.12で入ってきた「タイムアウトが発生した時に、Clientが分かりやすい例外を吐くように」というのが興奮しました!
これまでは、

try {
    $res = $this->post(self::ENDPOINT_AUTHENTICATE, $options);
} catch (Exception $e) {
    // timeoutを含め細かい判別ができないので、messageから判別する
    $isTimeout = strpos($e->getMessage(), 'Connection timed out ') === 0;
    if ($isTimeout) {
        throw new HttpException($e->getMessage(), 504, $e);
    }

     // 未知のエラーはre-throw
    throw $e;
}

などどしなければならず、ちょっとしんどかったなぁ〜と・・。
今回の改善で、明確にHttpExceptionを拾えるようになります(し、getMessage()で判定するよりgetCode()で判定した方が自然に感じるので)。弊社のプロダクト上でも実際に該当するコードがあるので、隙を見て「より良いコード」に改修していきたいな、と思っています。

update時にやったこと

例によって、リリースノートから自プロダクトに関連しそうな変更内容を注視しつつ、今回においてもとりわけ致命的と思われる内容がなかったので エイッ!と更新をしてみています。
特に重要そうな機能については実際に自分の手でも動作確認をとりつつ、最終的にはテストが全て通っている状態をもって安心材料とする運用です。

まとめ

今回マージされてきたPRに、チラチラと 「3.5」のマイルストーンが付いてきていました。1
先に触れた内容にはなりますが、「この夏リリース予定!」と言っていたことを思い出して、「あぁもう夏だ〜〜」と謎の感慨に耽るなどしています・・・ 流石に普段行っているようなアップデートよりは大変そうだと思いますが、今から楽しみですね!

それではまた、危機感をもって開発をしていきましょう!


  1. マイグレーションガイドもご覧ください。deprecatedの多さも去ることながら(これは4.xも視野に入れてのことでしょう)、 Scoped Middleware といった大きな変更や RouteBuilderの改善といった今すぐ使いたくなるようなものや、 ConsoleIntegrationTestCase については「いよいよか!待ってた!」と膝を打ちます。