AIが私たちに良いコードを書くことを強いている
108日前原文(bits.logic.inc)
概要
- エージェント時代の「良いコード」の必須要素
- 100%コードカバレッジの重要性と運用方法
- ディレクトリ構造・型・自動化の最適化
- 開発環境の即時構築と並列実行
- 型システム・自動ツール活用による品質担保
エージェント時代の「良いコード」の本質
- テストの徹底、明確なドキュメント、小さくスコープの明確なモジュール、静的型付けの重要性
- これらは従来「任意」だったが、エージェントには必須要素
- 人間は後からリファクタや修正が可能だが、エージェントは「汚れを広げるRoomba」になりやすい危険性
- ガードレール(自動化された制約やチェック)の設定・運用が不可欠
- ガードレールが弱いと、痛い目に遭うリスク
- 強固なガードレールがあると、LLMは正解まで自律的に試行錯誤可能
100%コードカバレッジの価値
- チームの最重要かつ物議を醸すガイドラインは「100%コードカバレッジ」
- 100%カバレッジはバグゼロを保証するものではなく、全コードの挙動確認を目的
- 95%や99.99%では「どの行をテストすべきか」の判断が残るが、100%で曖昧さが消失
- カバレッジレポートがテストToDoリストとして機能
- テストはエージェントの自由度を減らし、挙動の明示的検証を強制
- 到達不能コードの削除、エッジケースの明示化、具体例によるコードレビューの容易化が副次効果
ファイル構成と粒度の最適化
- エージェントは主にファイルシステムを通じてコードベースをナビゲート
- 意味のあるディレクトリ構成・ファイル名設計の重要性
- 例: ./billing/invoices/compute.ts > ./utils/helpers.ts
- 小さくスコープの明確なファイルを多数用意
- ファイルが短いほどLLMが全体を文脈に保持しやすく、エージェントのパフォーマンスが向上
開発環境の自動化と並列実行
- 従来の「一つの開発環境」から複数同時・自動構築へシフト
- ガードレール(テスト等)の高速化が必須
- 例: npm testごとに新DB作成・マイグレーション・全テストを高速実行
- キャッシュ活用で10,000+アサーションを1分以内で完了
- 新機能開発コマンド(例: new-feature <name>)で即座に環境・設定を自動構築
- 環境ごとの完全な分離(ポート、DB名、キャッシュ等)を徹底
- Docker等の利用で容易に実現可能
型システムと自動ツールによる品質担保
- 自動リンター・フォーマッターの厳格運用と自動適用
- TypeScriptなどの強力な型付き言語推奨
- Pythonの型注釈よりTypeScriptの型システムが優秀
- 型によって不正な状態や遷移を排除し、意図の明示と探索空間の縮小を実現
- 意味のある型名(UserId, WorkspaceSlug, SignedWebhookPayload等)でエージェントの理解を補助
- OpenAPIによる型付きクライアント生成でフロント・バックエンドの整合性確保
- Postgresの型システムとチェック・トリガーでデータ正当性も担保
- Kysely等で型付きTypeScriptクライアントを自動生成
エージェント時代の開発文化
- エージェントは疲れ知らずで優秀なコーダーだが、環境次第で力を発揮
- 従来「余計」とされてきた良いコードの作法が本質的価値へ
- 初期投資は「税金」のように感じるが、長期的な生産性・品質向上に不可欠
- エンジニアリングリーダーシップの理解と支援を得て、理想的なコードベースを実現