システムの構造的な骨格を指す。具体的には:
単なるコード構成ではなく、「後から変えるのが高コストな選択」全般。
「なぜその選択をしたか」という意思決定そのもの。ADRの中核で、通常こういう構造で書く:
「PostgreSQLを採用する」が Decision ではなく、「Xという制約下でAとBを比較した結果、Postgresを選んだ」全体が Decision。
ADRの “R”。「記録」を意味し、以下の性質を持つ:
Deprecated / Superseded に変えるDecision が「意思決定そのもの」なら、Record は「その意思決定を消さずに残す」という運用ルール。Git のコミット履歴に近い発想で、過去の判断を再現・検証できる状態に保つことが目的。
ADR = アーキテクチャ上の意思決定を、時系列の記録として残す仕組み。
| 用語 | 役割 |
|---|---|
| Architecture | 対象範囲(後から変えにくい構造的選択) |
| Decision | 中身(Context / Decision / Consequences / Alternatives) |
| Record | 運用ルール(追記型・不変・時点凍結) |
ADR-0013 が後から ADR-0101 で上書きされる場合、両方向にポインタを張るのが一般的。
# ADR-0013: セッションストアにRedisを採用
Status: Superseded by ADR-0101 ← 後から追記する
Date: 2024-03-10
## Context
(当時の状況をそのまま残す。書き換えない)
## Decision
Redisを使う
本文は書き換えない。Status行に “Superseded by ADR-0101” を足すだけ。
# ADR-0101: セッションストアをDynamoDBへ移行
Status: Accepted
Date: 2026-04-15
Supersedes: ADR-0013 ← 前の決定を指す
## Context
ADR-0013 で Redis を採用したが、マルチリージョン対応が必要になり…
## Decision
DynamoDBに移行する
追記型=ファイル全体を不変にするのではなく、過去の判断内容(Context/Decision)を不変にする、という意味。Status行のようなメタ情報の更新は許されるのがポイント。