アーキテクチャ レッスン6

アーキテクチャ決定とADR

重要な設計判断とその理由を記録するArchitecture Decision Record(ADR)の書き方と活用法を学ぶ

なぜ意思決定を記録するのか

「なぜこのフレームワークを選んだのか」「なぜマイクロサービス化を見送ったのか」といった判断は、 時間が経つと当事者の記憶からも薄れていきます。新しく参加したメンバーは、その経緯を知らないまま 「今のコードは変えられない前提」として扱ってしまったり、逆に既に検討済みの案を再提案してしまったりします。

ADR(Architecture Decision Record)は、 こうした重要な設計判断を短い文書として記録し、後から誰でも経緯を追えるようにする手法です。

ADRの基本構成

ADRには様々な流儀がありますが、代表的なテンプレートは次の3要素(+タイトルとステータス)です。

# ADR-0007: 注文サービスのデータストアにPostgreSQLを採用する

## Status(状態)
Accepted (承認済み) — 2026-03-01

## Context(背景)
注文サービスは強い整合性が求められる決済関連の書き込みが多く、
複雑な結合クエリでの集計要件もある。チームはリレーショナルDBの運用経験が豊富。
候補として PostgreSQL / MongoDB / DynamoDB を比較した。

## Decision(決定内容)
注文サービスのプライマリデータストアとして PostgreSQL を採用する。

## Consequences(結果として生じる影響)
- 良い面: トランザクション整合性が確保しやすい。チームの学習コストが低い。
- 悪い面: 将来的に書き込みが急増した場合、水平シャーディングの設計コストが発生する。
- 対応: 半年後にスループットを再計測し、必要ならシャーディング導入を再検討する ADR を書く。

重要なのは「何を選んだか」だけでなく、「他にどんな選択肢があり、なぜそれを選ばなかったか」 「この決定によってどんな悪い面を引き受けることになるか」まで書くことです。

ADRを書くタイミングと運用

書くべきタイミング

採用技術の選定、サービス分割の判断、大規模なデータモデルの変更など、後から覆すコストが高い決定を行った直後

保管場所

リポジトリ内に docs/adr/ のようなディレクトリを作り、コードと一緒にバージョン管理する運用が広く使われている

状態の変化

決定が後から覆った場合は元のADRを削除せず、Status を Superseded(後継あり)にして新しいADRへのリンクを残す

良いADRの条件

  • 1つのADRは1つの決定だけを扱い、短く読み切れる分量にする
  • 検討した他の選択肢と、それを採らなかった理由も残す
  • 良い影響だけでなく、引き受けることになる悪い影響も正直に書く
  • 後から見返す人が前提知識ゼロでも文脈を理解できるように書く

ポイント

  • ADRはContext(背景)・Decision(決定内容)・Consequences(結果として生じる影響)を軸に記録する
  • 覆すコストの高い重要な決定を行った直後に、その都度書くのが基本
  • 良い面だけでなく代償も正直に書き、決定が覆った場合はSupersededとして履歴を残す

確認クイズ

1 / 3

ADR(Architecture Decision Record)を書く主な目的として適切なものはどれか?