CakePHP4のエラーハンドリングの流れを追う

前置き

いい加減コイツを前に進めねば・・・・・・・・というアレね。

github.com

で、有り難いことにPRに要点をまとめてくださっており、フムフムなるほど〜って言いながら読んでみたのですが、マージするに当たってはちゃんと自分の目でも確かめてみないと何とも言えんっていう。
ポイントを掴めた状態で読んでいけるのは有り難い!!

Updates for CakePHP 4 by BGehrels · Pull Request #34 · Connehito/cake-sentry · GitHub

内容をちゃんとまとめたらcake縛りブログに移そうかと思っているけど、とりあえず雑にでも良いからメモを残したい意図でコチラのブログに書きます。


cake3でエラーロガー作った時も同様の調査をしており、「どういう風に流れるか」を掴んでおくと「どういう風に干渉すれば良いのか」が見えるので、やろうと思いました。↓はその時に書いたやつ。
まだcake3歴が浅いタイミング*1だったので探り探りで書いてるやつだなーって印象があるけれども。ErrorとExceptionの差とかもそこまでよく分かってなかった時だぁ〜

qiita.com

で、これと同じようなことを、これと似た動機*2でやっておこーぜというわけです 。ワクワク


なので最重要なのは「エラー処理の流れを追うこと」だ、と。

本題

まずはwebのException、弱いエラーをそれぞれ見ていきます

Exception

今回は PagesController::display() の中から \RuntimeException を投げてみる

f:id:o0h:20200509135856p:plain

f:id:o0h:20200509173731p:plain

とても良かったのは、cake3の時期に比べてMiddlewareがLoggerに直接依存していたところが解消されていて、ErrorHandlerの(名前の通りの)存在感が増した所です。
(↓のPRの参照)

github.com

と同時に、「ErrorHandlerMiddlewareでキャッチされた例外にリクエストコンテキストを扱ってLogに残したい」というのが、コレまでは「Middlewareごと拡張する」という方法しか無かったのも解消しています。
ErrorHandlerはErrorLoggerに対してRequestオブジェクトを渡してくれるんです。やったね!

弱いエラー

同じく、 PagesController のアクション内で trigger_error() をした感じです。

f:id:o0h:20200510065011p:plain

とてもシンプルでいいですね!
なお、エラーレベルによっては(=致命的なエラーの場合は)、handleError()内で処理が変わるので注意が必要。注意、といっても「そりゃそうだよね」って感じですが 💨

f:id:o0h:20200510065534p:plain

補足: set_erro_handler / set_exception_handler

ハンドラの登録ですが、これは BaseErrorHandler::register() で行われます。 f:id:o0h:20200510065138p:plain

という訳で、基本的には config/bootstrap.php 内の処理として、ハンドラが登録される感じです。

f:id:o0h:20200510065321p:plain

終わり

これと同様にConsole系の処理も追う必要があるのですが、今回は取り敢えずやりたいことが出来たのでwebのみの内容に絞って放出してしまいます・・
ErrorHandlerとエラー用のLoggerがどのタイミングでセットされるか?というのも合わせて抑えておくことで、cakeのエラー管理をしっかり行いやすくなると思います。

*1:といっても2018-03なら半年くらいか?業務で必要だったから「エラーを捕まえてSentryに飛ばすようにする」はこの時期だと既に作れていたような気もするんだけど、どうなんだろ。
でもPhpStormをちゃんと使うようになったキッカケの1つだったのは覚えてる!

*2:ず〜〜〜〜〜っとcak4対応やらねばやらねば!!と思っていて滞っていたわけですが、コレの理由の大きな1つが「CakePHP4への変更のキャッチアップをシないといけない、大変そう・・」というところで億劫になってしまっていた面があり。こういう時に、自分が直接のユーザーに慣れていないプロダクトつらいですね。。
ただ、「よく考えてみたらエラーハンドリング周りとプラグイン周りの2箇所だけ追えば、あとは動くな?」という事にふと気付きました。
あと、とにかく「使ってみてもらえるようにして、フィードバックを集められるようにする」方が大事かも知れん。

Real World HTTP 第2版を読んだ

昼休みブログチャレンジです。

昨日は日曜日でしたので、「Real World HTTP」の第2版を読みました。

Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP 第2版 ―歴史とコードに学ぶインターネットとウェブ技術

  • 作者:渋川 よしき
  • 発売日: 2020/04/21
  • メディア: 単行本(ソフトカバー)

Amazonリンクを貼っているけど自分はオライリーの電書で読んだ。先のエントリーに載せたとおり、「PC Kindleで読むの楽だな〜www」というのをやっています。
(ただPDFファイル読みにくかったので、epub -> mobiにして読んでいます)

その感想とかのメモ

  • 読む前
  • 読後
    • 「HTTP」によって盛り上がってきた話を幅広く扱う本
    • HTTPの歴史と未来像の話に触れられたので嬉しい
    • なんでGoなの?
    • 残念だったとこ
    • 全体的なところ
続きを読む

GWを振り返る

「はぁ〜、色々とインプットが足りない〜〜足りなすぎる〜〜」って感じが爆発してきたので、今年のGWは「本を読むぞ!」という過ごし方をしていました。

  • 本を読んだ
  • 読書の基本フォームみたいなのが見つかって良かった
  • 読んだ本の記録↓
    • 5.2 SOFT SKILLS ソフトウェア開発者の人生マニュアル
    • 5.3 小さなチーム、大きな仕事 働き方の新しいスタンダード
    • 5.4 チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ
    • 5.5 エンジニアの知的生産術 ―効率的に学び、整理し、アウトプットする
    • 5.5 レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
    • 5.6 Clean Architecture 達人に学ぶソフトウェアの構造と設計
    • 微妙にGWじゃないけど最近のやつ
      • 4.26 天才を殺す凡人 職場の人間関係に悩む、すべての人へ
      • 4.26 他者と働く──「わかりあえなさ」から始める組織論
  • 連休がおわっちゃった〜〜
続きを読む

やったこと・書いたもの{2020,04}

OSS

github.com

コネヒトで作ってたOSSを「Awesome CakePHPに載せたくない!?」という話をして自薦したのが承認された〜
うれしい〜
他のプラグインに倣ってREADMEに載せる内容は「Cakephp」prefixつけてなかったけどチェック入ってしまった、なるほど。

勉強会・LT

その他

インシデント対応時の役割分担

前置き

前職で「インシデント等の発生時にリアルタイムに対応していくためのプラクティス」みたいなものを整えていた時期がある。
その時の話を思い出したので、先日、文章を練って今の会社にも展開してみた。
その中で、「(入門監視で触れられているような)対応をすすめる時の役割」というような話に触れている。

続きを読む

やったこと・書いたもの{2020,02}

先月は、これを付け始めてから初めて「何もなかった1ヵ月」になってしまったのが何だか今の自分の状況を物語っているようで象徴的なものを感じる・・・

OSS

Release Fix unhandling event · Connehito/cake-sentry · GitHub
ずっと出せていなかったやつ・・・いろいろな問題が絡んでいて、それらをすべて取っ払う必要があったので、触る->予想してないところでつまずく -> 詰まる -> テンション下がる・・ -> 時間が経ってから再開、みたいなサイクルになってしまい変に時間がかかった!!

Release Support for CakePHP4 · Connehito/cakephp-master-replica · GitHub
こっちも「だそうだそうと思って遅れてたやつ」、cake4対応のPRもらってから丁度1ヵ月が経過・・・

勉強会・LT

=> 登壇後のエントリー #phperkaigi に参加してきました (day1) - 大好き!にちようび

その他

#phperkaigi に参加してきました (day1+day2)

「登壇しました」な話は昨日書きました

daisuki.nichiyoubi.land

ので、色々な感想などは終了後に書きますので の部分です。
公開用に資料も整えています現在。

  • 全体的な感想とか
    • 懇親会
    • ノベルティが凄いな〜と思う
    • 色んな人と話せてよかった
    • LT
  • 教えてもらったものや興味深かったもの
    • koriymさんから教えていただいたもの
    • wakabadouさん
    • zonuexeさん
  • 発表をきいたものや感想など
    • 実際に聴けなかったけど資料を後から拝見したシリーズ
    • 実際に聞いて印象に残ったフレーズがあったよシリーズ
  • 終わり
続きを読む