AIがコードを書く時代、人はドキュメントだけレビューすればいい? → ドキュメント更新も漏れるじゃん
TL;DR
- Claude Codeにコードを書かせてレビューは人がやる、という運用をしている
- でも「ドキュメント更新」をAIに任せると抜け漏れが発生する
- コード変更時に「どのドキュメントを更新すべきか」を自動で特定するツールを作った
-
https://github.com/tomohiro-owada/doc-tracer
問題: AIでもドキュメント更新は完璧にできない
最近、Claude Codeを使った開発フローを試している。
1. 要件を伝える
2. Claude Codeがコードを書く
3. 人がレビューする
4. マージ
「コードを書くのはAI、レビューするのは人」という分業。効率的に見える。
でも、ドキュメントはどうする?
コードを変更したら、関連するドキュメントも更新が必要。
- 仕様書
- 設計書
- API仕様
Claude Codeに「ドキュメントも更新して」と頼むと、一応やってくれる。でも抜け漏れが発生する。
なぜか?
AIはコードの文脈は理解できるが、ドキュメント体系全体を把握していない。
「このコードを変更したら、どのドキュメントに影響するか」を判断するには、ドキュメント間の関係性を知っている必要がある。でもAIは毎回それを推測するしかない。
解決策: コードとドキュメントの関係をグラフで管理する
doc-tracerを作った。
go install github.com/tomohiro-owada/doc-tracer@latest
やること
- ドキュメントにメタデータを埋め込む(YAMLフロントマター)
- コードを自動スキャンして関係を抽出
- グラフとして可視化・検索可能にする
ドキュメントのメタデータ
---
trace:
id: doc:docs/05_プログラム設計/LoginForm設計書.md
parent:
- doc:docs/04_詳細設計/ログイン詳細設計書.md
uses:
- component:LoginForm
- api:/api/v1/auth/login
---
# LoginForm プログラム設計書
...
これで「このドキュメントは何を参照しているか」が明示される。
コードの自動スキャン
doc-tracer scan .
Vue、TypeScript、Go、Python、Java、Rust など13言語に対応。
- コンポーネントの親子関係
- API呼び出し
- import文
- ルート定義(Flask、Spring Boot、Actix-web等)
これらを自動で抽出してグラフに追加。
核心機能: 影響範囲の逆引き
doc-tracer impact src/components/LoginForm.vue
出力:
影響を受けるドキュメント (5件):
- LoginForm設計書.md
パス: docs/05_プログラム設計/LoginForm設計書.md
- ログイン詳細設計書.md
パス: docs/04_詳細設計/ログイン詳細設計書.md
- 認証基本設計書.md
パス: docs/03_基本設計/認証基本設計書.md
- 認証仕様書.md
パス: docs/02_仕様書/認証仕様書.md
- 機能要件定義書.md
パス: docs/01_要件定義/機能要件定義書.md
コードを変更したら、どのドキュメントを更新すべきか一発で分かる。
これをClaude Codeに渡せば、更新すべきドキュメントを漏れなく更新できる。
可視化
doc-tracer serve
D3.jsでグラフを可視化。ノードをクリックすると上流のドキュメントがハイライトされる。
整合性チェック
doc-tracer check
📊 統計情報:
ノード:
- document: 12
- module: 7
- function: 10
エッジ:
- contains: 21
- uses: 7
✅ 整合性チェック完了: 問題なし
- リンク切れ検出: 存在しないノードへの参照
- 孤立ドキュメント検出: どこからも参照されていないドキュメント
5層ドキュメント構造
doc-tracerはウォーターフォール型の5層構造を想定している。
01_要件定義/ # WHY - なぜ作るのか
02_仕様書/ # WHAT - 何を作るのか
03_基本設計/ # HOW(概要)
04_詳細設計/ # HOW(詳細)
05_プログラム設計/ # 実装設計 → コードへの参照
下位層から上位層への参照を辿ることで、コード変更の影響範囲を特定できる。
対応言語
| 言語 | 検出対象 |
|---|---|
| JavaScript/TypeScript | モジュール、composable、store |
| Vue | コンポーネント、API呼び出し |
| Go | モジュール、関数、メソッド |
| Python | クラス、関数、Flask/FastAPIルート |
| Java | クラス、メソッド、Spring Bootエンドポイント |
| Rust | struct、関数、Actix-web/Axumルート |
| Ruby | クラス、メソッド |
| C# | クラス、メソッド、ASP.NETエンドポイント |
| Kotlin | クラス、関数、Spring Bootエンドポイント |
| Swift | クラス、struct、関数 |
| Dart | クラス、Widget、Provider/Bloc |
| PHP | コントローラー、モデル、Laravelルート |
使い方
1. インストール
go install github.com/tomohiro-owada/doc-tracer@latest
またはReleasesからバイナリをダウンロード。
2. ドキュメントにフロントマターを追加
---
trace:
parent:
- doc:docs/上位層/親ドキュメント.md
uses:
- module:xxx
---
3. スキャン
doc-tracer scan .
4. 影響範囲を確認
doc-tracer impact path/to/changed/file.py
5. 整合性チェック
doc-tracer check
Claude Codeとの連携(スキル化済み)
Claude Code向けのスキルとして統合済み。コミット前に自動で影響範囲をチェックできる。
# ステージングしたファイルの影響範囲を一発確認
git add src/components/LoginForm.vue
doc-tracer impact --staged
# 出力例:
# ステージングされたファイル (1件):
# - src/components/LoginForm.vue
#
# 影響を受けるドキュメント (5件):
# - LoginForm設計書.md
# - ログイン詳細設計書.md
# - 認証基本設計書.md
# ...
# 整合性チェック
doc-tracer check
Claude Codeに「このドキュメントを更新して」と依頼すれば、漏れなく更新できる。
まとめ
「AIにコードを書かせてレビューは人」という運用は効率的。でもドキュメント更新はAIでも漏れる。
doc-tracerは:
- コードとドキュメントの関係を明示化
- 変更時の影響範囲を自動特定
- 整合性を強制チェック
これで「ドキュメント更新忘れた」を防ぐ。
リポジトリ: https://github.com/tomohiro-owada/doc-tracer
フィードバック歓迎!
Discussion