0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIに迷わせない・聞き返させないために、ADR を書いている話

0
Last updated at Posted at 2026-05-31

はじめに

AI開発に任せていて、こんなことありませんか

  • AIに「いい感じに直して」と頼んだら、過去の判断を無視した実装 が返ってきた
  • AIに毎回「Firebase / Stripe / AI API のキーが設定されていないので動きません」と指摘される。実際はキーをサーバーに入って手で設定したり、GitHub Secrets / GitLab CI/CD Variables / AWS Secrets Manager で管理してるだけなのに、毎回ローカルに無いことを問題扱いされて説明する羽目になる
  • 複数のAIツール(Claude Code / Codex / Cursor)でルールが食い違って、どれが正なのか分からなくなる
  • 半年前に決めた技術選定の理由を、自分でもAIでも答えられない

自分はぜんぶ経験があります。で、いろいろ調べた末にたどり着いたのが ADR(Architecture Decision Record) でした。
この記事では、ADRって結局なに? どう運用すれば続くの? そして AIコーディングと組み合わせると何が起きるのか? を、最小限のところだけまとめます。

設計ドキュメントとは何が違う?

最初に整理しておくと、ADR は「設計ドキュメント」とも別物です。

設計ドキュメント ADR
目的 今のシステム全体像 特定の判断の理由
粒度 システム単位 決定1件
鮮度 常に最新を保つ 決定時点で固定
保存場所 Wiki / Notion Gitリポジトリ内

ADRは「決まった瞬間の判断」を冷凍保存するイメージです。
あとからその判断が覆ったら、ADRは書き換えず 新しいADRを起こして "Superseded by ADR-00XX" と書く。ここが地味に効きます。「あの時はこう考えてたけど、今はこっちにした」という遷移そのものが資産になる。

最小フォーマット

派生形はいくつかありますが、最初は原典の Nygard 形式が一番ラクです。5項目だけ。

# ADR-0007: ディレクトリ構造を機能別 (feature-based) に統一する

## Status
Accepted (2026-05-30)

## Context
当初はファイル種別 (components/ / utils/ / types/) でディレクトリを切っていたが、
1機能の修正で複数ディレクトリを横断する必要があり、
新規メンバーやAIが関連ファイルを見つけにくい状態が続いていた。

## Decision
ディレクトリは機能 (feature) 単位で切る。
`src/features/<機能名>/` 配下に components / hooks / types / utils を配置する。
複数機能で共有するものだけ `src/shared/` に置く。

## Consequences
- ✅ 1機能の修正がほぼ1ディレクトリで完結する
- ✅ AIが関連ファイルを文脈として認識しやすくなる
- ⚠️ 横断的なユーティリティの置き場(shared)に例外ルールが必要
- ⚠️ 既存コードの移行に時間がかかる

これだけ。「Decision」と「Consequences(良い影響も悪い影響も)」を能動態で書く のがコツです。
「〜できる」「〜になる」と言い切る。「〜できるかもしれない」と濁さない。

AIコーディング時代に ADR が効いてくる理由

ここからが本題、というか自分が一番伝えたいところ。

Claude Code や Codex みたいな AI コーディング支援を使うようになってから、ADRの価値が一段上がった という実感があります。理由は5つ。

1. AIに「過去の判断」を文脈として渡せる

AIは指示されたタスクには強いけど、「このプロジェクトが何を避けたいのか」「なぜ今この構成なのか」は知らない
ADRを docs/adr/ に置いておくと、AIが「この変更って ADR-0007 と矛盾してませんか?」と気づいてくれる確率がぐっと上がります。実際、自分は CLAUDE.md や AGENTS.md に「重要な設計判断は docs/adr/ を参照」と書くだけで、的外れな提案が目に見えて減りました。

2. AIが書くコードの「レビュー基準」になる

AIが提案してきたコードに対して、「これ ADR-0012 に書いた方針と違うんだけど」と人間が即座に判断できる。
レビュー基準が頭の中だけにあると、AIの出力が増えるほど判断疲れします。外部化されたレビュー基準としての ADR は、AI時代にむしろ必要性が上がります。

3. AIをADR執筆のアシスタントにできる

「これからやろうとしている変更について、Nygard 形式で ADR のドラフト書いて」と頼めば、論点の抜けや代替案の検討漏れを補ってくれる。
人間が書くと面倒だった Context や Consequences の網羅性が、AIの助けで一段上がります。書くハードルが下がるので、運用が続きやすくなる という効果がじわじわ効きます。

4. 「コードに現れない決まり事」をAIに渡せる

ここが個人的には一番デカいかもしれない。

普段フロントエンドとバックエンドを触っていて困るのが、コードを読んでも分からないルール の存在です。たとえば:

  • インフラ層 / アプリケーション層 / モバイルアプリ層の 責務分界(このバリデーションはアプリ側、レート制限はインフラ側、みたいな線引き)

  • APIキー・シークレットの管理ポリシー
    Firebase / Stripe / AI API のキーはローカルの .env にも置かない。実際の置き場は次のどれか:

    • 本番サーバーに入って手で環境変数として設定する
    • GitHub Secrets(Repository / Environment / Organization)
    • GitLab CI/CD Variables(Masked / Protected オプション)
    • AWS Secrets Manager / AWS Systems Manager Parameter Store

    ローカル環境ではキー未設定やサンプルキーが入っていることが多いので、AIが毎回「キーが無いので動きません」と指摘してくる。これは2つの解き方ができます:

    • 新しいサービスを導入するタイミングで ADR に書いておく: 例えば「Stripe を導入する」「Firebase を導入する」と決めた時に、そのADR の中に 「ローカル環境ではキー未設定が正常状態。本番は GitHub Secrets から注入する」 と一行だけ入れておく。これだけで、次にAIがこのプロジェクトを触ったとき、同じ指摘は出なくなる。
    • ルール側 / サブエージェント側で弾く: 同じことは ADR でなくても解決できます。ルールファイル(CLAUDE.md / .cursor/rules など)に直接書く、あるいは レビュー用のサブエージェントやスキルを用意してそこでチェックさせる という選択肢もあります。

    ADR が唯一解ではないので、自分のワークフローに合う方を選べばOK。ただし複数のAIツールを併用するなら、最終的にADRを単一ソースにしておく方がラクです。

これらはコード上に書いていないので、AIに「いい感じに直して」と頼むと毎回ルールを踏み外した提案が返ってきます。判断基準を渡さなければAIレビュアーも同じ指摘を繰り返す。

ADR を1本書いておけば、人間レビューもAIレビューも同じ単一ソースを参照できる
おまけに 「なぜそれを採用しなかったか」(却下した選択肢)も残せる ので、「なぜここで○○を使わないんですか?」とAIが提案してくる無駄も消せます。

5. 複数のAIツールの「共通言語」になる

これも体感としてかなり効いてます。

自分は Claude Code と Codex を両方使うことが多いんですが、AIコーディングツールはそれぞれ独自の設定ファイルを持っています。

ツール 設定ファイル
Claude Code CLAUDE.md
Codex / GPT 系エージェント AGENTS.md
Cursor .cursor/rules
GitHub Copilot .github/copilot-instructions.md

同じルールを各ファイルに重複コピペするのは、書くのもしんどいし、ルールが食い違ったらどっちが正なのか分からなくなるCLAUDE.md を更新したのに AGENTS.md の更新を忘れて、Codex だけ古いルールで動いてた…みたいなことが普通に起きます。

そこで、真の判断基準は docs/adr/ に置くと決めてしまって、各ツールの設定ファイルからは「重要な設計判断は docs/adr/ を参照」と一行書くだけにする。すると:

  • Claude Code でも Codex でも、同じ判断基準 で動いてくれる
  • ルールを更新するときは ADR 1ファイルだけ書き換えればOK
  • 「Claude では通った提案が Codex では弾かれる」みたいなブレが減る
  • 新しいAIツールを試すときも、docs/adr/ を参照させるだけで即立ち上げ可能

要は ADR が AI 間の "single source of truth"(単一ソース) になる、という使い方です。
チーム内で複数AIを併用する流れは今後も増えると思っているので、ここで一度「ベンダー非依存のチームルール置き場」を作っておくと、ツールの乗り換えや追加が一気にラクになります。

AIと組み合わせる時の注意点

いいことばかり書きましたが、当然落とし穴もあります。むしろこっちが本題かもしれない。

1. AIに事後生成させると一気に形骸化する

「決まった後に AI に ADR 書かせとこう」が一番危険。
当時の論点や却下された代替案の生々しさが抜けて、「正解ぽいけど中身がない」ADR が量産されます。Olaf Zimmermann の言う "Fairy Tale" アンチパターン(Pros しか書かない / 代替案を1つしか検討しない)に、AI生成ADRはハマりやすい。
判断の最中に、人間が論点を吐き出してAIに整形させる くらいの分担がちょうどいい。

2. AIが過去ADRを「絶対」として扱ってしまう

ADRは「その時点での判断」であって、永遠の正解ではない。でもAIに「ADRを参照して」と言うと、古いADRを盲信して、状況が変わった今の文脈に合わない提案を返してくる ことがある。
→ Deprecated / Superseded のステータス管理を怠ると、AIにとっても人間にとっても地雷になります。ステータスの鮮度はAI時代のほうがシビア

3. AIに書かせたあと、必ず一度人間が手を入れる

ADRの下書きはAIに任せてOK、というかむしろアシスタントとして使い倒した方がいいです。論点の整理も網羅性チェックもAIの得意分野。
ただ、生成された文章をそのままコミットしない。最後に一度人間が読み返して、2〜3箇所だけ書き換える。これだけで読みやすさが全然変わります。

具体的には:

  • 「重要です」「以下の点が挙げられます」「総じて言えば」みたいなAI特有の前置きや締めを削る
  • 「〜することができます」を「〜できる」に短縮する
  • 体験談や違和感のある部分は 自分の言葉に言い換える

ADRは最終的に 人間が判断を引き継ぐためのもの なので、AIの草稿 + 人間の最終チェック、というのがちょうどいい分担です。
ゼロから人間が書く必要はないけど、ゼロチェックでマージするのも違う、という間くらい。

4. AIが書きすぎる

放っておくとAIは丁寧に書きすぎます。3,000字のADRが量産されると誰も読まなくなる。
「1ファイル500字目安、超えたら粒度がデカすぎるサイン」 を人間側のガードレールとして持っておくと良いです。

導入してよかったこと(AIと関係なく効いた話)

AI関連を抜きにしても、2つ効きました。

1. 半年後の自分が助かる
ADRを書いておくと、しばらく経ってから戻ってきても「なんでこうしたか」が即わかる。未来の自分への手紙 として効きます。AIに聞いても答えが出ない(コードに書いてないから)情報なので、これは ADR にしか残せない価値。

2. 書く過程で論点がはっきりする
これは意外な副作用でした。Context と Consequences を書こうとすると、「あれ、自分この観点ちゃんと考えてなかったな」と気づくことが結構ある。書くこと自体が思考の道具になります。AIに下書きさせて、自分でツッコミを入れる、というやり方とも相性がいい。

まとめ

  • ADR は「重要な設計判断の理由」を残す短い文書
  • Nygard形式の5項目(Status / Context / Decision / Consequences)から始めればOK
  • 一度確定した判断は書き換えない。覆ったら新ADRを起こして "Superseded by ADR-XXX" でリンク
  • AI時代のメリット: 過去判断をAIに渡せる / レビュー基準になる / 執筆アシスタントになる / コードに現れない決まり事を渡せる / 複数AIツールの共通言語になる
  • AI時代の注意点: 事後生成・古いADR盲信・AI文体そのままコミット・書きすぎ。AI下書き + 人間の最終チェック がちょうどいい分担

設計の"なぜ"が流れていく感じがあるなら、騙されたと思って3本書いてみてください。AIと組んでいるなら、なおさら。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?