CCAR-F 学習ノート(非公式)合格体験記へ

← 第3章のノートへ

音声原稿 03-b:プランと反復

🎧 プランと反復

このパートでは、大きい変更の前に調査と設計を分けることと、文章でぶれる変換を、観測で狭めることを扱います。ノートの、プランモード、直接実行、探索の外出し、反復、途中で境界が動く、と同じ中身です。

プランモードは、変更を確定する前に、リポジトリを調べ、境界と手順を文章にします。向くのは、変更が大きい、妥当な案が複数ある、サービスの境界を決める、数十のファイルに触る、という仕事です。マイクロサービスへの分割、広範囲のライブラリ移行、要件の違う二つの統合方式、はここに入ります。先にコードを書くと、境界が間違っていたとき、差分の破棄が調査より高くなります。

直接実行は、何を変えるかがすでに分かっているときです。スタックトレースが、一つのファイルの一行を指している。日付の検証を、一つの関数に足す。調査を挟むと、同じ結論に到達するまでの往復が増えるだけです。

調査ログが長いフェーズは、探索というサブエージェントに渡し、要約だけを本会話へ戻します。プランモードの中でも、生の検索結果を本会話に積むと、設計を書く頃には窓が探索で埋まっています。戻すのは、変更すべきファイルは三つ、理由は有効期限の比較、のような、ファイル名と結論です。複数フェーズの仕事は、探索を外へ出し、設計の会話を短く保ちます。

組み合わせてよいです。移行の調査と方式の選択はプランモード、選んだ方式の機械的な適用は直接実行、です。複雑さが途中で見えるかもしれないから最初から直接、というのは、要件の時点で再編だと分かっている仕事には向きません。調査せずに完全な事前指示だけを渡して直接実行するのも、境界がコードの中にしか無いときは危険です。指示は、まだ読んでいない依存を想像で固定します。

途中で、境界は動きます。最初の報告は、セッションのファイルの比較が一日になっている、です。スタックトレースが一つの関数を指しているなら、直接実行です。プランモードに入ると、同じ行に戻るまでの往復だけが増えます。読み始めて、比較がミドルウェアと各ハンドラの二箇所にあり、有効期限の置き場所がサービス境界だと分かったら、そこで直接実行を止めます。プランに書くのは、残す境界、動かすモジュール、触らないディレクトリ、最初の検証コマンド、です。コードの断片を大量に貼ったプランは、調査ログです。方式の選択が文章になっていないと、直接実行へ移ったときに、モデルは別の境界を発明します。

プランを承認してから直接実行へ移り、プランのファイルをその会話の文脈に残します。承認せずに、だいたいこの方向で、と口頭で移ると、プランの制約が次のターンで落ちます。単一ファイルの欠陥でプランモードに入ると、結論は最初のスタックトレースと同じ行です。直接実行へ戻す基準は、変える場所が一つのシンボルに特定できていることです。特定できていないなら、小さい欠陥に見えて、実は境界の問題です。プランモードへ上げます。

反復は、形容詞ではなく観測で進めます。もう少し堅く、は、人によって別の変換になります。入力と望む出力を二つか三つ見せると、変換の定義が共有されます。例は完成形だけでなく、端を一つ入れます。空文字、ヌル、全角の数字。端を入れないと、モデルは典型例の形だけを覚えて、ヌルで落ちます。

実装の前に、期待する挙動、端、性能の上限をテストとして置き、失敗の出力を一緒に渡して直すと、直ったかどうかがテストで決まります。失敗を隠して、いい感じに、と頼むと、メッセージは成功に見えて、同じ端が残ります。

不慣れな領域では、実装の前に質問させます。キャッシュの無効化、障害時に古い値を返すか、キーの衝突。頼む側が想定していない考慮が、質問として出てから実装に入ります。質問を飛ばして書き始めると、無効化の抜けがレビューまで残り、差分が大きくなってから設計が変わります。

問題の渡し方は、依存で分けます。互いに影響する不具合、つまり同じ関数の条件と、そのテストの期待値は、一つのメッセージにまとめます。分けて直すと、先の修正が後の前提を壊します。独立した不具合、つまり別パッケージの誤字と、無関係な日付検証は、順に直します。一度に混ぜると、片方の差分が、もう片方の失敗を隠します。

このパートの判断は、こうです。大きい、複数案、多数ファイルはプランモードです。分かっている小さい修正は直接実行です。長い探索は、外へ出して要約だけを戻します。承認したプランは、次の実行の文脈に残します。ぶれる変換は、端を含む入出力を二、三個です。影響し合う修正は一通、独立は順に。不慣れな領域は、実装の前に質問させます。

再編のプランに書く四行を、固定します。残す境界。動かすモジュール。触らないディレクトリ。最初の検証コマンド。コードの断片を大量に貼った文書は、調査ログであってプランではありません。方式が文章になっていないと、直接実行へ移ったモデルは、別の境界を発明します。承認したプランのファイルを、次の会話の文脈に残します。だいたいこの方向で、という口頭の移しは、制約を次のターンで落とします。

小さい欠陥に見えて、境界だった例です。スタックトレースは、セッションのファイルの一行を指しています。直接実行で比較を直します。読み進めると、同じ比較がミドルウェアと、各ハンドラの二箇所にあります。有効期限の置き場所がサービス境界です。ここで直接実行を止め、プランへ上げます。最初からプランに入っていたら、一行の修正までの往復が増えるだけです。上げる基準は、変える場所が一つのシンボルに特定できなくなったことです。

ぶれを狭める例を、日付の検証で置きます。もう少し堅く、ではなく、空文字は拒否、ヌルは拒否、全角の数字は半角に揃えてから判定、という入出力を三つ見せます。端のヌルが無いと、典型の八桁だけを覚えて、ヌルで落ちます。直ったかは、先に置いたテストの失敗出力で判定します。失敗を隠して、いい感じに、と頼むと、メッセージは成功に見えて同じヌルが残ります。

キャッシュのように不慣れなら、実装の前に三つ質問させます。無効化はいつか。障害のとき古い値を返すか。キーが衝突したらどちらか。質問を飛ばすと、無効化の抜けがレビューまで残り、差分が大きくなってから設計が変わります。同じ関数の条件と、そのテストの期待値は一通にまとめます。別パッケージの誤字は、そのあと順に直します。一度に混ぜると、誤字の差分が、日付の失敗を隠します。

探索を本会話に残したときの症状は、設計の段でファイルの中身の一部しか見なくなることです。検索結果が履歴の大半を占めると、境界の文章より、最後に読んだ関数が判断を支配します。探索のサブエージェントに渡し、戻すのはファイル名と理由だけにします。理由にファイル名が無い要約は、本会話が次の編集を始められません。プランモードの中でも、この外出しを先にします。生の検索を積んでからプランを書くと、プランが調査ログになります。

影響し合う修正を分けたときの症状は、先に直した条件が、後から直したテストの期待値と食い違うことです。テストは緑に見え、実行時の分岐は古い期待のままです。一通にまとめると、条件と期待が同じ差分で動きます。独立した誤字をその一通に混ぜると、誤字の行が、日付の失敗をレビューから隠します。順に分けます。