gists

ADR における Architecture / Decision / Record とは?

Architecture

システムの構造的な骨格を指す。具体的には:

単なるコード構成ではなく、「後から変えるのが高コストな選択」全般。

Decision

なぜその選択をしたか」という意思決定そのもの。ADRの中核で、通常こういう構造で書く:

「PostgreSQLを採用する」が Decision ではなく、「Xという制約下でAとBを比較した結果、Postgresを選んだ」全体が Decision。

Record

ADRの “R”。「記録」を意味し、以下の性質を持つ:

Decision が「意思決定そのもの」なら、Record は「その意思決定を消さずに残す」という運用ルール。Git のコミット履歴に近い発想で、過去の判断を再現・検証できる状態に保つことが目的。


まとめ

ADR = アーキテクチャ上の意思決定を、時系列の記録として残す仕組み

用語 役割
Architecture 対象範囲(後から変えにくい構造的選択)
Decision 中身(Context / Decision / Consequences / Alternatives)
Record 運用ルール(追記型・不変・時点凍結)

補足: 「追記型」で古いADRと新しいADRはどうリンクするか

ADR-0013 が後から ADR-0101 で上書きされる場合、両方向にポインタを張るのが一般的。

ADR-0013(古い方)

# ADR-0013: セッションストアにRedisを採用

Status: Superseded by ADR-0101   ← 後から追記する
Date: 2024-03-10

## Context
(当時の状況をそのまま残す。書き換えない)

## Decision
Redisを使う

本文は書き換えない。Status行に “Superseded by ADR-0101” を足すだけ。

ADR-0101(新しい方)

# ADR-0101: セッションストアをDynamoDBへ移行

Status: Accepted
Date: 2026-04-15
Supersedes: ADR-0013   ← 前の決定を指す

## Context
ADR-0013 で Redis を採用したが、マルチリージョン対応が必要になり…

## Decision
DynamoDBに移行する

ポイント

追記型=ファイル全体を不変にするのではなく、過去の判断内容(Context/Decision)を不変にする、という意味。Status行のようなメタ情報の更新は許されるのがポイント。