---
name: implement-adapter
description: >
  spec/database/ の設計とドメインのポートインターフェースに基づいてアダプターを実装し、
  レビューサイクルで品質を担保するスキル。
  サブエージェントに実装を委譲し、メインエージェントはオーケストレーションに集中する。
  実装完了後にアダプター層に特化したコードレビューを行い、ポート準拠やDB整合性を確認する。
  ユーザーが「アダプター実装して」「リポジトリ実装して」「DB層やって」
  「implement adapters」「アダプター層やって」などと言ったときにトリガーする。
  spec/database/ が存在する状態でアダプター層の実装を依頼された場合にこのスキルを使うこと。
  全レイヤーの実装を依頼された場合は implement スキルを使うこと。本スキルはアダプター層単体の実装に特化している。
---

# Implement Adapter — アダプター実装＋レビュー

spec/database/ の設計とドメインのポートインターフェースに基づき、アダプターをサブエージェントで実装する。実装後にアダプター層に特化したレビューサイクルを回す。

**メインエージェントの役割はオーケストレーションのみ。** コードの読み書きはすべてサブエージェントに委譲する。

## Phase 1: 準備

### spec/ の確認

以下が存在するか確認する:

- `spec/database/` — DB設計
- `spec/domains/` — ドメイン設計（ポートインターフェースの参照元）

### プロジェクトコンテキストの把握

CLAUDE.md と README.md を読み、以下を確認する:

- 使用言語・フレームワーク
- ディレクトリ構成（アダプター層の配置先、ドメイン層のポート定義場所）
- typecheck・lint コマンド
- コーディング規約

### 進捗管理

`spec/progress.md` を確認し、アダプター層の状態を把握する。ドメイン層が実装済みであることを確認する。

### 実装例の確認

`docs/backend_implementation_example.md` が存在するか確認する。存在する場合はサブエージェントに参照先として渡す。

## Phase 2: 実装

`references/impl-guide.md` を読み、その手順に従ってアダプターを実装する。

サブエージェント完了後:

1. 報告を確認する
2. typecheck + lint を実行する
3. エラーがあればサブエージェントを再起動して修正させる
4. `spec/progress.md` を更新する

## Phase 2.5: 完全性ゲート

全アダプターの実装が完了したら、レビューサイクルに進む前に `../_shared/references/completeness-gate.md` を読み、その手順に従って完全性ゲートを実行する。

typecheck + lint はインターフェースを満たすだけの空実装・固定値返しを素通りさせる。このゲートで、独立したサブエージェントがポートの全メソッド vs 実コードを照合し、実際の DB アクセスを伴わないスタブや未実装メソッドを検出する。欠落があればその項目だけを埋めさせて再ゲートし、欠落 0 件になってから Phase 3 へ進む。

- 対象レイヤー: adapter
- spec: `spec/database/` ＋ ドメインのポート定義
- 入力: 実装したファイル群＋各サブエージェントのカバレッジ表

## Phase 3: レビューサイクル

完全性ゲートを通過したら、`references/review-guide.md` を読み、その手順に従ってレビューと修正を行う。

**2回連続で Blocker 0件 かつ Warning 0件** になったらレビュー完了。最大5ラウンド。5ラウンドで収束しない場合はユーザーに報告して判断を委ねる。

レビュー記録は `.review/adapter/review-{連番}.md` に保存する。

## Phase 4: 完了

1. サブエージェントから報告された設計との乖離を確認し、必要に応じて:
   - `spec/database/` の該当ドキュメントを更新する
   - 設計判断があった場合は `.adr/{連番}-{topic}.md` に記録する
2. git commit する
3. `spec/progress.md` を更新する
4. サマリーを出す

## 原則

共通原則は `../_shared/references/implement-principles.md` に従う。本レイヤー固有:

- ポートインターフェースに準拠する（シグネチャだけ合わせて中身を省略しない）
