connehito/cake-sentryのCakePHP4対応を終えた

遅ればせながらリリースしました🎉

packagist.org

connehito/cake-sentryというのは、前職時代に開発していてその後もメンテナに入れてもらっているOSSです。
半年ほど前に、メジャーバージョンアップをどうにか終えました。
daisuki.nichiyoubi.land

この時は「Sentry SDKがリデザインされたので新しいのを使うようにしようよ」だったのですが、1ヵ月ほど後に今度は「CakePHPが新しいメジャーバージョンを出したよ」ということで、それの対応をやらねばやらねば・・・・と今に至ったわけでございます。

どうしたの

cake4はおろかcake3ですら触っていない状況になってしまっていたので、どうにもこうにも腰が重く。*1
そうこうしている間にコミュニティの方々からPRをもらったので、よしコレを基礎としてリリースまで持っていくぞ!!!という気持ちがやっと湧いてきたのでございます。

3つ目のPRである#34をもらった時点で「大まかには動くじゃろ」というのが確認できて、またPRに書いてもらった説明から「どんな感じに変わったの?」が読み取りやすかったので、こらが大変背中を押してくれるような結果になりました。
わかりやすいPR大事だな〜〜〜〜!

ついでに

久しぶりに全体的にコードを眺めてみる〜という行動になったので、いくつか気になった点を修正したりもしています。

その中でコードカバレッジが100%になったりもしました。ソレ自体はあんま意味のある数字とも思っていないけど、まぁ折角ならキリの良い数にしておいた方が気持ちいいじゃんね!!くらいの。そもそも「あと何行かくらいだし、100%にしておこ」という軽い気持ちで手を出したら「実際にはそこに到達しない(手前でエラーになっている)」という箇所が炙り出せたので、良かったなぁという気持ちです。

他には、久々に全体的に見返していて「名付けが一貫性無いかもな・・・?」と感じた部分をシンプルにしたり、といった事をしています。

デモ環境を用意しておいて良かったね

今回の改修に関して改めて感じましたが、「そのプラグインを動かすために必要な環境を一緒に梱包しておく」のは、やはり良いですね〜。
CakeSentryでいうとtest_app という形でdocker-composeと動作デモ用URLを混ぜてありますが、コレのおかげで、開発に際して必要なことに集中できた感じがあります。

cake-sentry/tests/test_app at master · Connehito/cake-sentry · GitHub

コレやってなかったらもっと億劫だっただろうなと・・・・・・

折角Dockerfileもあることですし、Sentry側の変更等への追従を保証すべく、E2EっぽいものをCI上で回したいなぁという野望も抱いていたりします。
「web/cliでエラーを起こして→Sentry側に登録エラーを問い合わせて→登録されるべき形で今のエラーが登録されているか」みたいな。
これをスケジュール設定して動かしておけたら良さそうな感じするんですよねぇ。

おわりに

作ったものを使ってくれている人がいるのは有り難いなぁ〜〜というのを改めて感じた次第。
PRくれた人に対してどこまで直しをお願いしようかな・・?というのは割と悩ましく感じたけれど、早め早めでマージしつつ気になった所は自分で直す!!くらいの温度感が良さそう〜というのを今回の流れの中で感じました。業務コードだったり相手が同僚だったりした場合とは別だな、と。
折角関わってくれた人に対して敬意を表したいぜ〜〜〜!の気持ちと、少しずつでも前進させていくやり方をとりたいな〜という気持ちと。

今後もメンテちゃんとやっていくぞ〜〜

*1:cake3使っていれば多分cake4移行やろうぜ!!というモチベーションで動かしているだろうにな、とも思いつつ。

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) - 大好き!にちようび

その他