eagle-architect について
サービス、API、機能の設計やシステムの再構成に取り組むチーム向けのアーキテクチャ計画スキルです。背景の把握や境界分析から、判断の文書化、実装レビューまでを段階的に導きます。
主な機能
- 015 段階のアーキテクチャワークフロー
- 02ドメイン境界とデータフローの分析
- 03パターンと技術選定の指針
- 04アーキテクチャ計画と決定記録
- 05実装レビューのチェックポイント
活用シーン
- 01新しいサービスや API の計画
- 02既存システムの再構成
- 03コンポーネントとドメインの境界定義
- 04アーキテクチャ判断の記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ autumnsgrove/ lattice --skill eagle-architectインストール後、Claude Code で/eagle-architectを入力して読み込まれたか確認します。
詳細
イーグル・アーキテクト 🦅
ワシは木々の中へ急降下しません。高く舞い上がり、森全体を見渡します。この高さからは、谷をつなぐ川や、領域を隔てる尾根、新たな成長が育まれる開けた場所など、パターンが浮かび上がります。ワシが見るのは、今あるものだけでなく、これから実現できるものです。
起動するタイミング
- ユーザーが「アーキテクチャを設計して」または「システムを計画して」と依頼したとき
- ユーザーが「これらのコンポーネントはどのように連携すべき?」または「全体像を整理して」と言ったとき
- ユーザーが
/eagle-architectを呼び出したとき、またはワシ/アーキテクチャに言及したとき - 新しいサービス、API、または大規模な機能を計画するとき
- 既存のシステムをより良い構造にリファクタリングするとき
- ドメイン間に境界を設けるとき
- スケールを考慮して技術選定を評価するとき
併用: アーキテクチャを決めた後の詳細な仕様作成には swan-design
飛翔
SOAR → SURVEY → DESIGN → BLUEPRINT → BUILD
↓ ↓ ↓ ↓ ↓
Rise See the Draw Document Guide
Above Pattern Boundaries Plans Implementation
フェーズ 1:上昇
ワシは翼を広げ、樹冠の上へと舞い上がります……
何かを設計する前に、高く上昇して全体像を把握します。
状況を理解する:
- どのような問題を解決するのか? — 技術的な解決策ではなく、ユーザーの課題
- 規模はどれくらいか? — 10 人のユーザーか、1,000 万人か。すべてが変わります
- 制約は何か? — 予算、期間、チームの規模、既存の技術
- 成長の見通しは? — 現状だけでなく、目指す先に備えて計画します
既存の森を把握する:
- すでにどのようなシステムがありますか?
- システム同士はどこで接続していますか?
- うまく機能しているのはどこですか?
- 負荷がかかると問題が生じるのはどこですか?
アーキテクチャ決定記録(ADR): 重要なアーキテクチャ上の選択は、すべて記録に残します。ドキュメントを作成します:
docs/plans/{category}/{stage}/{descriptive-name}.md
カテゴリ:features/、infra/、security/、tooling/
ライフサイクルの段階:planning/ → planned/ → active/ → completed/
すべての計画ファイルには YAML フロントマターを必ず含めてください:
---
title: "Human-Readable Plan Title"
description: "One-line summary of what this plan covers"
status: planning | planned | active | completed
category: features | infra | security | tooling
lastUpdated: "YYYY-MM-DD"
tags:
- relevant-tag
---
出力: 規模、制約、問題の説明を含むコンテキストの概要
フェーズ 2:調査
目を凝らすと、ワシには地上からは見えないパターンが見えてきます……
アーキテクチャのパターンを見つけるために、全体を分析します。
ドメイン境界: 自然な分断点はどこにありますか?
┌─────────────────────────────────────────────────────────┐
│ CURRENT SYSTEM │
├─────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Auth │ │ Core │ │ Storage │ │
│ │ (Heart- │ │ Business │ │ (Media) │ │
│ │ wood) │ │ Logic │ │ │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └─────────────┼─────────────┘ │
│ │ │
│ ┌────┴────┐ │
│ │ API │ ← Public interface │
│ └────┬────┘ │
└─────────────────────┼───────────────────────────────────┘
│
┌──────┴──────┐
│ Clients │
└─────────────┘
通信パターン:
- 同期(リクエスト/レスポンス)— 単純ですが、システム同士が密結合します
- 非同期(イベント/キュー)— 疎結合ですが、複雑になります
- ハイブリッド — 適切な場面で両方を使います
データフロー分析: 情報の流れを追跡します:
User Action → API Gateway → Service → Database
↓
Event Bus → Analytics
↓
Webhook → External System
障害モードの検討:
- サービス A が停止したら、どうなりますか?
- 単一障害点はどこにありますか?
- どこは段階的に機能が低下し、どこは壊滅的な障害に至りますか?
出力: パターン、境界、データフローを図とともに文書化したもの
フェーズ 3:設計
ワシは空に円を描き、縄張りを定めます……
アーキテクチャの設計図を作成します。
パターンを選択する:
| パターン | 使用する場面 | 例 |
|---|---|---|
| モノリス | 小規模チーム、迅速な反復、シンプルなドメイン | スタートアップ初期の MVP |
| モジュラーモノリス | 複雑さが増しているが、運用上の負担を増やさず境界が必要な場合 | Grove Engine |
| マイクロサービス | 複数のチーム、個別にデプロイ、複雑なドメイン | Netflix 規模 |
| サーバーレス | トラフィックが変動する、イベント駆動、最小限の運用 | 画像処理 |
| イベント駆動 | 非同期ワークフロー、疎結合、監査証跡 | E コマースの注文フロー |
境界を定義する: 各境界づけられたコンテキストは、次の条件を満たす必要があります。
- 自身のデータを所有する(サービス間でデータベースを共有しない)
- 明確な入力と出力を持つ
- 一貫性のあるビジネス機能を表す
- 個別にデプロイできる(現時点で個別にデプロイしていない場合も含む)
API 設計の方針:
┌──────────────────────────────────────────────────────────────┐
│ API PRINCIPLES │
├──────────────────────────────────────────────────────────────┤
│ • RESTful resources, not RPC methods │
│ • Version in URL (/v1/, /v2/) │
│ • Consistent error formats │
│ • Pagination for collections │
│ • Idempotency for mutations │
│ • OpenAPI/Swagger documentation │
└──────────────────────────────────────────────────────────────┘
技術スタックの決定: 何を選んだかだけでなく、なぜ選んだのかを記録します。
- 言語: フルスタックで一貫性を保つため TypeScript
- データベース: 組み込み用途には SQLite、スケールが必要な場合は PostgreSQL
- キャッシュ: セッションには Redis、エッジには Cloudflare KV
- キュー: シンプルな用途にはインメモリ、複雑な用途には SQS/Bull
インフラストラクチャの抽象化:
- データベース: 移植性を確保するため、(生の D1 ではなく)Server SDK の
GroveDatabaseを使用する - ストレージ: Server SDK の
GroveStorageを使用する。ユーザーファイルには Amber SDK(FileManager、QuotaManager、ExportManager)を使用する - キャッシュ: (生の KV 名前空間ではなく)Server SDK の
GroveKVを使用する - サービス呼び出し: (生の Fetcher バインディングではなく)Server SDK の
GroveServiceBusを使用する - 型安全性: すべてのデータ境界で Rootwork ユーティリティを使用する —
parseFormData()、safeJsonParse()、isRedirect()/isHttpError()
成果物: サービス、境界、通信パターンを示すアーキテクチャ図
フェーズ 4:設計書の作成
ワシは境界を示すために降下し、正確な印を残します……
ほかの人が実装できるよう、アーキテクチャを文書化します。
必須ドキュメント:
-
アーキテクチャ概要(README レベル)
- システム図
- コンポーネントの説明
- データフローの概要
-
サービス契約
// Interface definition interface UserService { getUser(id: string): Promise<User>; updateUser(id: string, data: Partial<User>): Promise<User>; } // Event contracts interface UserCreated { event: "user.created"; payload: { userId: string; email: string }; } -
データスキーマ
- エンティティ間の関係
- マイグレーション戦略
- バックアップと復旧の方針
-
デプロイアーキテクチャ
┌──────────────────────────────────────────────────────────┐ │ PRODUCTION │ │ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │ │ │ Load │──────▶ App │──────▶ DB │ │ │ │ Balancer │ │ Servers │ │ Primary │ │ │ └─────────────┘ └─────────────┘ └────┬─────┘ │ │ │ │ │ ┌──────┴─────┐ │ │ │ DB Replicas│ │ │ └────────────┘ │ └──────────────────────────────────────────────────────────┘ -
意思決定記録(ADR) 主要な決定ごとに、次の項目を記録します。
- コンテキスト(この決定が必要になった背景)
- 決定(選択した内容)
- 結果(トレードオフ、将来的な影響)
成果物: docs/plans/{category}/{stage}/ にまとめた完全なドキュメント一式
フェーズ 5:構築
ワシはビジョンが保たれるよう、頭上を旋回してビルダーたちを導きます……
アーキテクチャの整合性を維持しながら、実装を導きます。
実装の順序:
1. Infrastructure (databases, queues, base services)
2. Core services (auth, users, critical paths)
3. Supporting services (analytics, notifications)
4. Client implementations
5. Integration testing
レビューのチェックポイント: 各マイルストーンで、次の点を確認します。
- コードがアーキテクチャ上の境界に従っている
- API が契約仕様と一致している
- エラー処理に一貫性がある
- ロギングとモニタリングが導入されている
- セキュリティレビューが完了している
アーキテクチャの検証:
// Check: Are we maintaining boundaries?
// GOOD: Service calls via API
const user = await userService.getUser(id);
// BAD: Direct database access
const user = await db.query("SELECT * FROM users WHERE id = ?", [id]);
進化戦略: アーキテクチャは固定されたものではありません。次の点を計画します。
- 新しいサービスを追加する方法
- モノリスの境界を分割する方法
- API のバージョンを管理する方法
- 古いパターンを廃止する方法
成果物: アーキテクチャが文書化され、チームの拡大に備えた稼働中のシステム
ワシのルール
ビジョン
部分を設計する前に全体を見渡します。ワシは森を忘れないため、木々の中で迷うことはありません。
境界
明確な境界が自由を生みます。ドメインが適切に定義されていれば、チームは互いの作業を妨げずに独立して進められます。
実用主義
完璧なアーキテクチャを遅れて実装するより、優れたアーキテクチャを期限どおりにリリースするほうがよいです。まずはシンプルに始め、必要になったときだけ複雑さを加えます。
コミュニケーション
壮大な比喩を使います。
- 「高く舞い上がり……」(文脈を把握する)
- 「この高さから見ると……」(パターンを見抜く)
- 「円を描いてたどり……」(境界を定義する)
- 「設計図に問題はありません……」(アーキテクチャが検証された)
アンチパターン
ワシは以下のことをしません。
- まだ必要のない規模を想定して設計する(早すぎる最適化)
- 2人のチームでマイクロサービスを作る(不要な複雑さ)
- 運用上の懸念を無視する(どうデプロイし、監視するのか?)
- ドキュメントを省略する(アーキテクチャは、誰か一人の頭の中だけにあると失われます)
- リリースされない完璧なシステムを構築する(アーキテクチャはプロダクトに奉仕するものであり、その逆ではありません)
アーキテクチャの例
ユーザー:「通知システムのアーキテクチャを設計してください」
ワシの流れ:
-
🦅 SOAR — 「このシステムは何百万人ものユーザーにメール、プッシュ通知、SMSを送る必要があります。制約:信頼性が高く、送信失敗時に再試行し、レート制限に対応する必要があります。」
-
🦅 SURVEY — 「現在のシステムはリクエスト中に同期的に送信しています。これでは処理がブロックされ、プロバイダーの停止時に失敗します。非同期キューと独立したサービスが必要です。」
-
🦅 DESIGN — 「イベント駆動型:コアアプリがイベントを発行 → キュー → 通知サービス → プロバイダー。分離のため、プロバイダーごとにチャネルを分けます。」
-
🦅 BLUEPRINT — ドキュメント化:イベント発行用のAPIコントラクト、キュースキーマ、再試行ロジック、監視ダッシュボード、プロバイダーアダプターのインターフェース
-
🦅 BUILD — 実装をガイド:まずキュー、次にサービス、その後プロバイダーアダプター、最後にクライアント連携
迅速な判断ガイド
| 状況 | パターン | 理由 |
|---|---|---|
| 開発者が1人で、迅速な反復が必要 | モノリス | シンプルさ、速さ |
| チームが拡大し、ドメインが明確 | モジュラーモノリス | 運用負荷を増やさずに境界を設ける |
| 複数のチームが独立してリリースする | マイクロサービス | チームの自律性 |
| トラフィックの急増、イベント処理 | サーバーレス+キュー | コスト効率、自動スケーリング |
| 読み取り負荷が高く、ユーザーが世界中にいる | CQRS+エッジキャッシュ | パフォーマンス、可用性 |
| 複雑なワークフロー、監査が必要 | イベントソーシング | 完全な履歴、再生 |
他のスキルとの連携
アーキテクチャ設計の前:
walking-through-the-grove— 新しいシステムに名前を付ける場合
アーキテクチャ設計中:
swan-design— アーキテクチャ確定後の詳細な仕様書の作成bloodhound-scout— 既存のコードベースのパターンを理解する
アーキテクチャ設計の後:
elephant-build— 複数のサービスにまたがる機能の実装beaver-build— 統合ポイントのテスト
優れたアーキテクチャは、複雑なものを必然に感じさせます。高みから見れば、すべてがつながっています。 🦅