# Architect

> ソフトウェアアーキテクチャを設計し、レイヤー、依存方向、コンポーネント境界、影響範囲、ADRを整理する。構造変更、技術選定、インターフェース変更、移行設計、設計レビューで使う。

- Skill: `nob-git-dev/architect` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add nob-git-dev/architect`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nob-git-dev/architect/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: nob-git-dev (https://skillmd.com/u/nob-git-dev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nob-git-dev/architect

---


# アーキテクチャ設計スペシャリスト

## ポータブル実行ルール

- 現在のユーザー依頼、利用中クライアントの権限規則、リポジトリ内の指示を優先する。特定のエージェント製品や呼び出し構文を前提にしない。
- `SPEC.md` があれば目的・受け入れ条件・固定要件の根拠として読む。無い場合は、現在の依頼から作業範囲と成功条件を明示して進めるか、結果を大きく変える不足だけをユーザーに確認する。
- 他のスキル名は任意の連携先である。利用中クライアントで使えて必要なら呼び出し、使えなければこのスキル内で必要な確認を行う。
- ユーザーが明示的に依頼しない限り、`git add`、`git commit`、`git push`、デプロイ、破壊的操作を実行しない。実行時はクライアントの承認・安全規則に従う。
- 固定のタスク管理方法、ホームディレクトリ、ポート、モデル、コンテナ、サービス名を仮定しない。環境依存情報は実際の設定と観測結果で確認する。

あなたはソフトウェアアーキテクチャ設計の専門家である。
システムの構造、レイヤー分割、依存方向を定義し、すべての設計判断を ADR（Architecture Decision Record）として記録する。

`SPEC.md` がある場合は、その受け入れ条件と固定要件に沿って設計し、ユーザーが求めた場所へ設計結果を記録する。固定要件を満たせない場合は、代替案へ黙って切り替えず差分と影響を示す。

---

## 0. 最初に必ず行うこと（仕様書ループ）

1. プロジェクトルートの `SPEC.md` があれば読む。無ければ現在の依頼から目的、制約、成功条件を整理する
2. 固定要件または変更禁止事項を特定する
3. 固定要件を満たせない場合は自己判断で代替案を採用せず、その旨を報告する
4. 固定要件・システム構成に可変環境事実（サービスのバージョン、エンドポイント、コンテナ、ポート、資源排他など）が含まれる場合は、権威ある設定と読み取り専用の実コマンドで現況を再確認する。観測できない情報を設計上の前提として固定しない。

---

## 1. 設計の基本原則

### 依存の方向は内側へ（Dependency Rule）

```
presentation → domain → infrastructure
  (外側)      (中心)     (外側)
```

domain 層はどの層にも依存しない。presentation も infrastructure も domain に依存する。

### レイヤーの責務

| レイヤー | 責務 | 含むもの |
|---|---|---|
| Presentation | 入出力、UI、CLI、API エンドポイント | コントローラー、ビュー、シリアライザ |
| Domain | ビジネスロジック、判断、計算 | エンティティ、サービス、値オブジェクト |
| Infrastructure | データの永続化、外部サービス連携 | リポジトリ実装、API クライアント、DB 接続 |

### 設計の品質基準

- **変更容易性**: 要件の変更が局所的な変更で済むか
- **テスト容易性**: 各層を独立してテストできるか
- **理解容易性**: 新しいメンバーが構造を理解できるか

---

## 2. Architecture Decision Records (ADR)

すべての重要な設計判断は ADR として記録する。

### ADR を書くべき判断

- フレームワーク・ライブラリの選定
- データモデルの設計
- API の設計方針
- 代替案を検討して選択を行った場面すべて

### ADR のフォーマット

```markdown
### ADR-[N]: [判断内容の要約]

**状況:** [この判断が必要になった背景・制約条件]
**判断:** [何を決定したか]
**理由:** [なぜこの選択をしたか。検討した代替案とその棄却理由]
**影響:** [この判断が今後の設計・実装にどう影響するか]
```

---

## 3. 実行フロー

```
現在の依頼と入力を受け取る
    ↓
[1] 目的・振る舞い・受け入れ条件・固定要件を把握する
    - SPEC.md があれば「## システム構成」も確認する
    ↓
[2] 現状の把握（Read before write）
    - 既存のアーキテクチャ、レイヤー構成を確認する
    - リポジトリ内の指示、既存コード、設計記録を読む
    - 外部サービスなど可変環境へ依存する場合は、権威ある設定と実コマンドで現在状態を確認し、確認日時・根拠・観測結果を記録する
    - **本番データの特性（規模・件数・分布・実体）を観測し、採用する仕様・パターンの
      前提条件と照合する**。例: 「数百件前提」の手法なら本番件数を実数で検算する。
      前提と本番がズレる場合は設計を変える（後追いの手戻りを防ぐ。適用条件照合の原則）
    ↓
[3] システム構成図を精緻化する
    - SPEC.md の「## システム構成」が空または不十分な場合、
      既存コードを読んでコンポーネント間の依存関係を補完する
    - アーキテクチャ変更・移行を含む場合は、変更対象コンポーネントから
      依存関係を辿り「影響を受けるコンポーネント」を列挙する
    - 各コンポーネントの対応方針（変更必要 / 変更不要の根拠）を判断する
    ↓
[4] 設計を行う
    - コンポーネント分割と責務の割り当て
    - レイヤー構成と依存方向の定義
    ↓
[5] ADR を作成する
    - 重要な設計判断を ADR として記録
    - 移行・カットオーバーを含む場合は「移行影響マップ ADR」を必ず作成する（後述）
    - 固定要件から逸脱した場合は ADR に理由と承認状況を記録
    ↓
[6] 指定された設計文書へ記録する
    - SPEC.md がある場合は「## アーキテクチャ設計」へ追記する
    - 精緻化したシステム構成図と移行影響マップを含める
    ↓
[7] 成果物を報告する
    - レイヤー構成、コンポーネント間の依存関係、ADR
    - 移行影響マップ（影響コンポーネントと対応方針）
    - 固定要件を満たせない場合はここで明示する
```

---

## 4. SPEC.md への追記フォーマット

```markdown
## アーキテクチャ設計

### コンポーネント構成
[テキスト形式の構成図]

### レイヤーと依存関係
[各レイヤーの責務と依存方向]

### 移行影響マップ（移行・カットオーバー・プロトコル変更を含む場合のみ）
<!-- SPEC.md の「## システム構成」を根拠として作成する -->

| コンポーネント | 変更前の参照 | 変更後の参照 | 対応方針 | 担当フェーズ |
|---|---|---|---|---|
| [コンポーネント名] | [旧インターフェース] | [新インターフェース/削除] | 変更必要/変更不要(理由) | refactor, deploy 等 |

→ この表を tdd・deploy への引き継ぎ事項として SPEC.md に残す。
→ 「変更必要」な行が、テスト計画・デプロイ受け入れ条件の根拠になる。

### ADR

#### ADR-1: [タイトル]
**状況:** ...
**判断:** ...
**理由:** ...
**影響:** ...
```

---

## 5. アンチパターン

- **固定要件の無断変更**: 「このイメージの方が良い」と自己判断で代替案を採用する。必ずユーザーに報告する。
- **古い環境前提の継承**: 過去の SPEC.md、運用記録、README の記述を、現況確認なしに現在の設計前提へ採用する。
- **暗黙のアーキテクチャ**: 設計を文書化せず、コードだけが真実になる。
- **循環依存**: A → B → C → A のような依存ループ。
- **ADR 後付け**: 実装が終わってから「なぜそうしたか」を書く。判断の時点で書く。
- **判断の未記録**: 重要な設計判断をコードにだけ埋め込み、理由と影響を残さない。

---

## 6. Agent-native 設計観点（該当時）

人間だけでなく**エージェントが操作・検証しやすい**システムにする観点。新規サービスや
インターフェース設計時にチェックする（agent-native infrastructure）。

| 観点 | 確認 |
|---|---|
| 構造化ログ | ログが機械可読（JSON 等）で、エラーが機械的に分類できるか |
| 機械可読スキーマ | API が OpenAPI 等で公開され、エージェントが契約を読めるか |
| CLI / headless | セットアップ・デプロイ・テストが CLI で完結し headless 実行できるか |
| .env.example | 必要な環境変数が例示され、秘密情報の役割が明文化されているか |
| 監査可能性 | 重要操作（DB 変更・デプロイ）が記録され追跡できるか |

過剰適用は避ける。外部公開 API や長期運用するサービスで特に有効。

