はじめに
設計の仕事をしていると、こんな経験ありませんか?
「半年前に決めたこの設定、なんでこうしたんだっけ?」
「あの時、別の案も検討した気がするけど、なぜ採用しなかったんだろう?」などなど。。。。
私もまさに同じ状況で、設計書を書いたり、昔の設計書を読んだりしています。でも「なぜその設計にしたか」「他の候補は何だったか」「チームに確認しても曖昧になっていたり」が、時間が経つと曖昧になってしまう。
そんな悩みを解決してくれたのが ADR (Architecture Decision Record) という仕組みです。試しに、導入してみたら想像以上に良かったので、まだ知らない人向けに紹介します。
ADRって何?
ADR は Architecture Decision Record の略で、ざっくり言うと「チームで合意した設計判断の記録」です。
「え、それ設計書やん」と何が違うの?って最初は自分も思っていました。
ADR には次の4つのステータスがあります。
- Proposed: 提案中、レビュー待ち
- Accepted: チームレビューを経て承認済み
- Rejected: 検討の結果、採用しないと決定
- Superseded: 後のADRによって上書き
つまり ADR は単なるメモじゃなくて、「Proposed で起票 → レビュー → Accepted」というプロセスを経た、チームの意思決定の記録になります。
設計書だけじゃダメなのか?
ここで「設計書あるんだから ADR いらんくない?」という疑問が出てきます。でも実際にやってみると、両者は役割が全然違います。
| 設計書 | ADR | |
|---|---|---|
| 書く内容 | What (何を作るか) | Why (なぜそうしたか) |
| 採用しなかった案 | 通常書かない | 必ず書く |
| 更新頻度 | 仕様変更のたび | 判断が変わったときだけ |
設計書は「完成形を伝える」のが目的なので、検討経緯や没案は書かれません。でも、後から「なんでこうしたんだっけ?」となるのって、まさにその没案や検討経緯の部分になると思います。
ちなみに ADR で 一番価値があるのは「採用しなかった理由」 だと思ってます。「Aを選んだ理由」より「Bを選ばなかった理由」の方が、後から読む人にとって有用です。
監視設計の例
抽象的な話だけだとイメージしづらいので、私が監視設計で実際に書いた ADR を例に紹介します。
監視って、閾値とか検知ルールとか、「なぜその数字なのか」が後から分からなくなりがちです。(自分はそうです…)
例えば、評価周期と検知回数の設定。
- 選択肢1: 評価周期1分、検知1回
- 選択肢2: 評価周期5分、検知5回 ← 採用
- 選択肢3: 評価周期10分、検知3回
採用したのは選択肢2ですが、なぜか?
「選択肢1だとアラートが出すぎるし、選択肢3だと気づくのが遅れるから」
…って、これだけだと「もうちょっと論理的に書かなきゃ」って思いますよね。
でも、これでも全然OKです。
ADR にしたものを少し整えるとこんな感じです。
### 選択肢1: 評価周期1分、検知1回 - 不採用理由: 一時的なスパイクでも即アラートになり、運用上ノイズが多い。 アラート疲れにより本当に対応すべき通知を見逃すリスクが高い。 ### 選択肢3: 評価周期10分、検知3回 - 不採用理由: 異常検知までに最大10分かかり、対応開始が遅れる。 サービス影響が拡大するリスクがある。
経験則ベースの理由でも、ちゃんと「なぜダメか」を言語化すれば立派な ADR です。むしろ運用者の肌感覚って、設計書には載らない貴重な知見になると思います。
1年後とかに「この閾値、見直したほうがいいかも?」となったときにも、ADRがあると当時の判断根拠が分かるので議論がスムーズです。
ちなみに監視 ADR は、後追いで書きました。「ADR は設計フェーズで書くもの」だと思っていたんですが、後追いでも全然価値があります。むしろ運用してみての実感(「想定通りアラート疲れは起きなかった」など)を盛り込めるのは、後追いADRの特権です。設計フェーズで書くのが理想だとは思いますが、後追いでも遅くないので、
「うちの過去の判断、ADRにしてみようかな」と思ったタイミングで書き始めるのがおすすめです。
運用するときの工夫
フォーマットは MADR 形式が使いやすい
MADR (Markdown Architectural Decision Records) というテンプレート形式があります。最低限こんな項目を埋めればOK。
# ADR-0001: タイトル ## ステータス Accepted (2026-02-25) ## コンテキスト 〈なぜこの判断が必要か〉 ## 検討した選択肢 - 選択肢A - 選択肢B ## 決定 選択肢Aを採用する。 ## 理由 〈採用した理由 / 採用しなかった理由〉 ## 結果 〈この決定による影響・トレードオフ〉
最初から全部完璧に書こうとせず、この最小構成から始めるのがおすすめです。
管理は Git + Markdown + PR レビュー
ADR の管理場所は Git リポジトリ + Markdown がイチオシです。理由はシンプルで、
- PR ベースでレビュー・承認できる
- PR のマージ日時 = Accepted 日時として自動的に残る
- PR のレビュアー = 承認者として自動的に残る
「いつ・誰が・どう承認したか」が、特別な仕組みなしで履歴に残る
まとめ
正直に言うと、私自身もADRを始めたばかりで、まだ手探りの部分は多いです。「これで正解なのかな?」と思いながら書いているADR もあります。
でも、それでも導入してみて良かったなと思うことが3点あります。
- 「なぜこの設計にしたか」を後から振り返れる
- 「採用しなかった選択肢と理由」が残るので、将来の見直しがしやすい
- レビューと承認のプロセスが自然に組み込める
最初から完璧にやろうとせず、まず1本書いてみるのがおすすめです。MADR形式で最小限の項目から始めて、運用しながら自分たちのチームに合った形に育てていけばOKかなと思っています。
おまけ: AI時代の設計書として
最後に余談ですが、昨今のAI時代において、ADR はとてもいい仕組みだなと思っています。
コードや設計はAIが生成できるようになってきましたが、「なぜその判断をしたか」という人間の意思決定は、まだ人間が残すべき領域なんじゃないかと。
AIに設計を手伝ってもらうときも、ADR があれば「過去にこういう理由でこの構成にした」と前提を伝えられるので、AIとの協業もスムーズになると感じています。
ADR はその「なぜ」の部分を綺麗に切り出せる仕組みだと感じています。