概要
- LLMを使ったコーディング支援の進化と課題を解説
- agent.mdによるコーディングスタイル最適化の実践例
- コード品質向上のための具体的なルールや運用方法を紹介
- LLMの弱点である「文脈希釈」への対策も説明
- agent.mdの自動更新方法にも言及
LLMによるコーディング支援の変遷
-
2025年中頃 に初めてLLMを使ってコーディングを試行
- libadbmdns (RustによるmDNS実装)開発時の導入
- 出力されたコードが コンパイル不可 という問題
-
2026年1月 に再チャレンジ
- 複雑な indexed-binary heap クラス生成に成功
- Windows IOCP 実装に起因するpolling crateのバグ特定にも貢献
- しかしコード品質は スパゲッティ状態、コメントや構造が皆無
-
コード品質の問題
- LLMの高速化メリットが 後片付けの手間 で相殺
- 本番水準に達するまでの 清書作業 が大きな負担
エージェント型IDEと繰り返し作業
-
2026年3月、 Antigravity や VS Code Claude Code プラグインを導入
- 「ステージング」したコードに対し 反復的なレビュー が可能に
- 魔法数排除 や 短い関数名、 コメント追加 などの指摘を毎回繰り返す必要
-
コード品質は大幅に向上
- 手作業レベルに近い品質達成
- しかし 毎セッション同じ指摘 の繰り返しで非効率
agent.mdによるスタイル最適化
-
コーディングセッション開始時 に agent.md を読み込みプロンプトへ注入
- コーディングスタイルの微調整 が可能な最適な場所
- 繰り返し指摘する内容を agent.md に追記
-
agent.mdの配置方法
- プロジェクトルートに設置で自動適用
- gemini.md や claude.md を agent.md にシンボリックリンクする運用も可能
agent.mdの主なルール例
- 人間向け文章 (コメント・コミットメッセージ等)は 最小限の単語数 で簡潔に
- 賛辞や極端な表現 を避け、 事実のみ を伝える
- 魔法数・魔法文字列 は 定数やenum で抽出、仕様由来の値も必ず定数化
- インデント削減、 アローアンチパターン回避、 早期return/continue の活用
- 関数名は30文字未満 で簡潔に
- 関数引数のboolはenumに置換
- 論理ブロック間に空行 を挿入し 可読性確保
- 各ブロックに簡潔なコメント を追加、必要に応じてASCII図も推奨
- メンバー可視性の変更 は設計上の大きな変更とみなし、 必ず明示的な承認 を求める
- 抽象度レベルごとにAPIを分離、低レイヤはドライバ/抽象化レイヤに集約
- 未編集のコードには触れない、コメントも追加しない、変更行数も最小化
- レイヤー間の境界厳守、隣接層以外への直接アクセス禁止
- if文は一行でも必ず{}を付与
- コミットメッセージの7ルール を厳守
- 件名と本文の空行分離
- 件名50文字以内(最大72文字)
- 件名の先頭大文字
- 件名末尾にピリオド禁止
- 命令形で記述
- 本文は72文字で手動折返し
- 本文には背景・理由を記載
- バグ修正時はまずテストを作成、失敗確認後に修正、その後パス確認
agent.md運用の効果と限界
- コード生成の品質が大幅向上
- だが LLMの幻覚(hallucination) は依然残存
- 設計やアーキテクチャ への注力が可能になった一方で、 コードの精査・検証は必須
LLMの「文脈希釈」への対策
-
Lost in the Middle論文 で指摘された context dilution/attention dilution 問題
- コンテキストが長くなると 中間指示が無視 されやすい現象
- 原因は未解明
-
対策方法
- コンテキストを短く維持 (機能ごとに新規セッション推奨)
- "Reload agent.md" の明示的リクエストで再読み込み
agent.mdの自動更新
- 新ルール追加時 にエディタを開く必要なし
- エージェントにagent.mdの更新依頼 が可能
- 柔軟なルール追加運用が実現