コードベースに憲法を与えよ
人々の頭の中にあるアーキテクチャは、コーディングエージェントには通用しません。
長年、コードベースのルールは「暗黙知」として存在してきました。シニアエンジニアは、どのレイヤー同士が通信できるかを知っていました。どの依存関係が禁止されているかも知っていました。新人エンジニアは、何かを壊してレビューで指摘されることで学んでいきました。
これは人間にとっては機能します。なぜなら、人間は時間をかけてコンテキストを構築していくからです。エージェントはコンテキストを構築しません。彼らは見えているものしか知らないのです。
ルールが書き留められていなければ、エージェントはそのルールが存在しないと考えます。エージェントが内部レイヤーを外部レイヤーに接続してしまうのを私は見てきました。私たちが意図的に避けてきた依存関係を導入してしまうのです。コードは動作しますが、アーキテクチャが漂流(ドリフト)していきます。
アーキテクチャを「伝承」から「法律」へと変えなければなりません。
憲法はドキュメントではありません。ドキュメントは、システムが現在どのように動作するかを説明するものです。憲法は、システムが何になることを許されるかを定義するものです。
憲法は、大規模なリファクタリングを経ても変わらないものに焦点を当てるべきです。以下を含める必要があります:
- 法則と不変条件
- システムの境界
- 基礎となる前提
優れた憲法は、簡潔で、制限的であり、変更に時間がかかるものです。
アーキテクチャをディレクトリ構造に結びつけてはいけません。ディレクトリは変わるものです。アーキテクチャは「責務」に結びつけてください。ドメインモデルは、それがどのフォルダにあろうとも、ドメインモデルです。
すべての法律には理由が必要です。根拠のないルールは、それを理解していない誰かによって削除されてしまいます。ルールは振る舞いを教え、理由は判断力を教えます。
最も重要なのは、法律を強制することです。
指示はガイドラインに過ぎません。強制こそが現実です。エージェントも人間も、書き込まれた指示をいずれ無視します。
ルールが極めて重要な場合は、文章に頼ってはいけません。CIに組み込みなさい。リンターに組み込みなさい。バリデーターに組み込みなさい。
すべての重要なルールには、2つの形式が必要です:
- 人間向け:意図を説明するもの
- マシン向け:遵守を保証するもの
これはプロセスを増やすことではなく、レバレッジを効かせることです。アーキテクチャが強制可能になれば、すべての決定を検査する必要はなくなります。マシンが代わりにやってくれるからです。
境界線を信頼できれば、より多くの仕事を委譲できるようになります。
始め方:
レビューに注意を払ってください。「〜なので、それは行いません」と言うたびに、あなたは一つの法律を見つけているのです。
まずはいくつかのルールから始めましょう:
- 依存関係の方向
- シークレットの取り扱い
- 重要な契約
- 境界の所有権
ルールを書きなさい。理由を書きなさい。そして、それを破ることが不可能なコードチェックを追加しなさい。
執行のない法律は、単なる提案に過ぎない。
出典: https://dev.to/miteshethos/give-your-codebase-a-constitution-3k4h
任意参加の学習コミュニティ: https://t.me/GyaanSetuAi