Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

アーキテクチャ決定記録(ADR)

Architecture Decision Record。アーキテクチャ上の重要な意思決定と、その背景・トレードオフ・結果を記録する軽量なドキュメント。 Michael Nygard が2011年のブログ記事で提唱した。

なぜ書くのか

  • 「なぜこの設計にしたか」が数ヶ月後には失われる:コードは「何をしているか」を示すが、「なぜそうしたか」「他に何を検討し、 なぜ却下したか」は残らない

  • 意思決定の手戻りを防ぐ:過去に検討済みのトレードオフを知らずに同じ議論を繰り返すことを防げる

  • オンボーディングの助けになる:新しく参加したメンバーが設計の背景を短時間で追える

アーキテクチャ特性 の選択のように、複数のトレードオフの中から1つを選ぶ判断ほどADRの効果が大きい。

テンプレート

決まった形式はないが、Nygardが示した基本形は以下のようにシンプル。

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

## ステータス
承認済み(2024-03-01)

## コンテキスト
注文サービスは強い整合性とトランザクションが必要。読み取り負荷は中程度で、将来的なスケールアウトよりも
まず正確性を優先したい。

## 決定
PostgreSQLを採用する。

## 検討した代替案
- DynamoDB: スケーラビリティは高いが、複雑なトランザクションの表現がしづらい
- MongoDB: スキーマ柔軟性はメリットだが、注文ドメインは構造が安定しておりRDBMSの制約の方が有用

## 結果
- Pros: 強い整合性、成熟したツール群、チームの知見が豊富
- Cons: 将来的に書き込みが急増した場合はシャーディング戦略の追加検討が必要

各ADRは一度書いたら基本的に変更しない(Immutable)。決定が覆った場合は、古いADRを「Superseded」にして、 新しいADRを追加する形で記録を積み重ねる。番号を振って docs/adr/0001-xxx.md のように連番ファイルで管理することが多い。

書くべき判断・書かなくてよい判断

書く価値があるのは、覆すコストが高い決定:

逆に、ローカルな実装の詳細(変数名、1関数内のロジック)はコードコメントやPRの説明で十分で、ADRにする必要はない。