---
name: architecture-decision-records
description: コーディングセッション中にアーキテクチャ決定を構造化ADRとして記録し、自動的に決定の瞬間を検出し、コンテキスト、検討された代替案、根拠を記録します。今後の開発者がコードベースの形成理由を理解するためのADRログを維持します。
origin: ECC
---

# アーキテクチャ決定記録

コーディングセッション中にアーキテクチャ決定を構造化ドキュメントとして記録します。決定がSlackスレッド、PRコメント、または誰かの記憶にのみ存在する代わりに、このスキルはコードと並行して存在する構造化ADRドキュメントを生成します。

## アクティベーション時期

- ユーザーが明示的に「この決定を記録しよう」または「このADRを作成しよう」と言う
- 重要な代替案の選択（フレームワーク、ライブラリ、パターン、データベース、API設計）
- ユーザーが「私たちは...を選択した」または「YではなくXをしている理由は...です」と言う
- ユーザーが「なぜXを選んだのか」と尋ねる（既存のADRを読む）
- アーキテクチャ上のトレードオフが検討される計画段階

## ADR形式

Michael Nygardによって提案されたADR形式を、AI支援開発向けに調整したものを使用します：

```markdown
# ADR-NNNN: [決定タイトル]

**Date**: YYYY-MM-DD
**Status**: proposed | accepted | deprecated | superseded by ADR-NNNN
**Deciders**: [関係者]

## Context

この決定または変更を促すどのような問題や状況が見られるのか？

[2～5文で状況、制約条件、作用する力について説明]

## Decision

提案または実施する変更は何か？

[決定を明確に述べる1～3文]

## Alternatives Considered（検討された代替案）

### Alternative 1: [名前]
- **Pros**: [利点]
- **Cons**: [欠点]
- **Why not**: [この選択肢が拒否された特定の理由]

### Alternative 2: [名前]
- **Pros**: [利点]
- **Cons**: [欠点]
- **Why not**: [この選択肢が拒否された特定の理由]

## Consequences（結果）

この変更により、何がより簡単になり、何がより難しくなるか？

### Positive
- [利点1]
- [利点2]

### Negative
- [トレードオフ1]
- [トレードオフ2]

### Risks
- [リスクと軽減策]
```

## ワークフロー

### 新しいADRをキャプチャする

決定の瞬間が検出されたとき：

1. **初期化（初回のみ）** — `docs/adr/`が存在しない場合、ユーザーの確認を得た上でディレクトリ、インデックステーブルヘッダーでシードされた`README.md`（下記のADRインデックス形式を参照）、手動使用用の空白の`template.md`を作成します。明示的な同意なしにファイルを作成しないでください。
2. **決定を特定する** — 行われている中核的なアーキテクチャの選択を抽出する
3. **コンテキストを収集する** — この問題を起こした背景は？存在する制約条件は？
4. **代替案をドキュメント化する** — どの他のオプションが検討されたか？ なぜ拒否されたか？
5. **結果を述べる** — トレードオフは何か？何がより簡単/難しくなるか？
6. **番号を割り当てる** — `docs/adr/`内の既存のADRをスキャンして増分する
7. **確認して書き込む** — レビュー用のドラフトADRをユーザーに提示します。明示的な承認後にのみ`docs/adr/NNNN-decision-title.md`に書き込みます。ユーザーが辞退した場合、ファイルを書き込まずにドラフトを破棄します。
8. **インデックスを更新する** — `docs/adr/README.md`に追記する

### 既存のADRを読む

ユーザーが「なぜXを選んだのか」と尋ねたとき：

1. `docs/adr/`が存在するかチェック — 存在しない場合、「このプロジェクトでADRが見つかりません。アーキテクチャ決定の記録を始めたいですか？」と応答
2. 存在する場合、関連エントリの`docs/adr/README.md`インデックスをスキャン
3. 一致するADRファイルを読み、ContextとDecisionセクションを表示
4. 一致が見つからない場合、「その決定についてのADRが見つかりません。今すぐ記録しますか？」と応答

### ADRディレクトリ構造

```
docs/
└── adr/
    ├── README.md              ← すべてのADRのインデックス
    ├── 0001-use-nextjs.md
    ├── 0002-postgres-over-mongo.md
    ├── 0003-rest-over-graphql.md
    └── template.md            ← 手動使用用の空白テンプレート
```

### ADRインデックス形式

```markdown
# Architecture Decision Records

| ADR | Title | Status | Date |
|-----|-------|--------|------|
| [0001](0001-use-nextjs.md) | Use Next.js as frontend framework | accepted | 2026-01-15 |
| [0002](0002-postgres-over-mongo.md) | PostgreSQL over MongoDB for primary datastore | accepted | 2026-01-20 |
| [0003](0003-rest-over-graphql.md) | REST API over GraphQL | accepted | 2026-02-01 |
```

## 決定検出シグナル

会話の中でアーキテクチャ決定を示すこれらのパターンに注意：

**明示的なシグナル**
- 「Xにしよう」
- 「YではなくXを使うべき」
- 「トレードオフは...だから価値がある」
- 「このをADRとして記録して」

**暗黙的なシグナル**（ADRの記録を提案する — ユーザーの確認なしに自動作成しない）
- 2つのフレームワークまたはライブラリを比較して結論に達する
- 述べられた根拠を持つデータベーススキーマ設計の選択をする
- アーキテクチャパターン（モノリス対マイクロサービス、REST対GraphQL）の間で選択する
- 認証/認可戦略を決定する
- 代替案を評価した後、デプロイインフラストラクチャを選択する

## 良いADRとは

### すること
- **具体的に** — 「ORMを使う」ではなく「Prisma ORMを使う」
- **根拠を記録する** — 根拠は何よりも重要です
- **拒否された代替案を含める** — 将来の開発者は何が検討されたかを知る必要があります
- **結果を正直に述べる** — すべての決定にはトレードオフがあります
- **短く保つ** — ADRは2分で読めるべき
- **現在時制を使う** — 「Xを使う」ではなく「私たちはXを使う」

### しないこと
- 些細な決定を記録する — 変数名またはフォーマット選択はADRを必要としません
- エッセイを書く — contextセクションが10行を超える場合は長すぎます
- 代替案を省略する — 「単に選んだ」は有効な根拠ではありません
- マーキングなしでバックフィルする — 過去の決定を記録する場合は元の日付を注記
- ADRを古い状態にする — 置き換えられた決定は置き換えを参照する必要があります

## ADRライフサイクル

```
proposed → accepted → [deprecated | superseded by ADR-NNNN]
```

- **proposed**: 決定が検討中であり、まだコミットされていない
- **accepted**: 決定が有効であり、フォローされている
- **deprecated**: 決定は関連性がなくなった（例：機能が削除された）
- **superseded**: 新しいADRがこれを置き換える（常に置き換えをリンク）

## 記録する価値のある決定カテゴリ

| Category | Examples |
|----------|---------|
| **Technology choices** | フレームワーク、言語、データベース、クラウドプロバイダ |
| **Architecture patterns** | モノリス対マイクロサービス、イベント駆動、CQRS |
| **API design** | REST対GraphQL、バージョニング戦略、auth機構 |
| **Data modeling** | スキーマ設計、正規化決定、キャッシング戦略 |
| **Infrastructure** | デプロイメントモデル、CI/CDパイプライン、監視スタック |
| **Security** | Auth戦略、暗号化アプローチ、シークレット管理 |
| **Testing** | テストフレームワーク、カバレッジ対象、E2E対統合のバランス |
| **Process** | ブランチング戦略、レビュープロセス、リリースケーデンス |

## 他のスキルとの統合

- **Planner エージェント**: プランナーがアーキテクチャ変更を提案するとき、ADRの作成を提案
- **Code reviewer エージェント**: 対応するADRなしでアーキテクチャ変更を導入するPRにフラグを立てる
