mcpField
A
architect

architect

github.com/iankiku開発1841 回インストール13 週間前に更新
リポジトリ

architect について

実装前に制約を整理し、アーキテクチャを選ぶためのソフトウェアチーム向けシステム設計スキルです。データベース、プロジェクト構成、API、キャッシュ、スケーリングを扱い、現在の要件に合うシンプルな設計から始める方針を示します。

主な機能

  1. 01設計前の制約整理
  2. 02一般的なアーキテクチャパターンの比較
  3. 03用途に応じたデータベース選定
  4. 04複数スタックの構成例
  5. 05API とキャッシュの基本方針
  6. 06スケーリングのボトルネック確認

活用シーン

  1. 01新規プロジェクトのアーキテクチャ選定
  2. 02データベースと API の設計計画
  3. 03既存コードベースの構成整理
  4. 04スケーリング時の課題評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/iankiku/forwward-teams --skill architect

インストール後、Claude Code で/architectを入力して読み込まれたか確認します。

詳細

アーキテクト — システム設計

構築を始める前にシステムの構造を決めましょう。優れたアーキテクチャは、あらゆる作業を容易にします。悪いアーキテクチャは、すべてを作り直すことになります。

ステップ 0:制約を把握する

設計する前に、次の質問に答えましょう。

  1. 規模 — ユーザーは 100 人ですか、それとも 100,000 人ですか?あらゆる判断に影響します。
  2. チームの規模 — 創業者 1 人ですか、それともエンジニア 10 人ですか?小規模なチームには、よりシンプルなシステムが適しています。
  3. 予算 — 自己資金で運営していますか、それとも資金調達済みですか?マネージドサービスか、セルフホスト可能な構成かを左右します。
  4. スケジュール — 2 週間で MVP を作りますか、それとも 3 か月で v1 を作りますか?
  5. コンプライアンス — HIPAA、SOC 2、GDPR に対応する必要がありますか?アーキテクチャの選択肢が制約されます。

アーキテクチャパターン

パターン使用する場面避ける場面
モノリスエンジニア 10 人未満、単一の製品、迅速な開発複数のチームが独立したデプロイを必要とする場合
モジュラーモノリスチームが成長しており、インフラコストをかけずに境界を設けたい場合サービスごとに独立したスケーリングが必要な場合
マイクロサービスエンジニア 20 人以上、明確に異なるドメイン、独立したスケーリングが必要な場合小規模なチーム、初期段階、境界が不明確な場合
サーバーレスイベント駆動型、トラフィックの変動が激しい、運用をゼロにしたい場合長時間稼働するプロセス、大規模運用でコストに敏感な場合
イベント駆動型非同期ワークフロー、疎結合システム、監査証跡が必要な場合シンプルな CRUD、リアルタイム要件がある場合

基本方針: 問題が生じるまではモノリスを使いましょう。時期尚早なマイクロサービス化は、アーキテクチャにおける最大の失敗です。

データベースの選定

ニーズデータベース理由
汎用、リレーショナルPostgreSQLACID、JSON サポート、拡張機能、エコシステム
キー・バリュー、キャッシュRedis / Valkey1 ミリ秒未満の読み取り、TTL、pub/sub
ドキュメントストア、柔軟なスキーマMongoDB迅速なプロトタイピング、ネストされたドキュメント
全文検索PostgreSQL FTS または Meilisearch必要になるまでは、Postgres の組み込み機能で十分です
時系列TimescaleDB(Postgres 拡張機能)データベースエンジンを 1 つに保てます
グラフ関係再帰 CTE を備えた PostgreSQLグラフが製品の中核でない限り、Neo4j を追加しないでください
ベクトル/埋め込みpgvector(Postgres 拡張機能)同様に、データベースは 1 つに保ちましょう

ルール:

  • まずは Postgres から始めましょう。Postgres では対応できない場合にのみ、専用データベースを追加します。
  • 常にマネージドサービスを使いましょう(Supabase、Neon、RDS)。データベースを自分で管理しないでください。
  • DBA を雇うまでは、データベースエンジンは 1 つにしましょう。データベースが 2 つあれば、問題も 2 つになります。

プロジェクト構成

まずスタックを特定しましょう。 構成を提案する前に、package.json、go.mod、Gemfile、pyproject.toml、pom.xml、または Cargo.toml を確認してください。以下の原則を、プロジェクトで使用しているスタックに適用します。

すべてのスタックに適用する共通ルール:

  • 機能に関するコードはまとめて配置します。1 つの機能を 8 つのディレクトリに分散させないでください。
  • サービスにビジネスロジックを記述します。ルートは薄く保ち、検証、サービスの呼び出し、レスポンスの返却を行います。
  • 1 つの関数につき 1 つのファイルではなく、ドメインごとに 1 つのサービスを設けます。
例:TypeScript / Next.js
src/
├── app/                    # Next.js app router — pages and layouts
│   ├── (auth)/             # Route groups for auth pages
│   ├── (dashboard)/        # Route groups for app pages
│   └── api/                # API routes
├── lib/                    # Shared utilities, config, constants
│   ├── db/                 # Database client, schema, migrations
│   ├── auth/               # Auth config and helpers
│   └── utils/              # Pure utility functions
├── services/               # Business logic — one file per domain
├── components/             # React components
│   ├── ui/                 # Primitives (button, input, card)
│   └── features/           # Feature-specific composites
└── types/                  # Shared TypeScript types
例:Python / FastAPI
src/
├── api/
│   ├── v1/                 # Versioned endpoints
│   └── deps.py             # Shared dependencies (auth, db session)
├── core/                   # Config, security, constants
├── models/                 # ORM models
├── schemas/                # Request/response schemas
├── services/               # Business logic — one file per domain
├── repositories/           # Data access layer
└── tests/
    ├── unit/
    └── integration/
例:Go
cmd/
├── api/                    # Application entrypoint
internal/
├── handler/                # HTTP handlers (thin — validate + call service)
├── service/                # Business logic
├── repository/             # DB access layer
├── model/                  # Domain types
└── config/                 # Config loading
pkg/                        # Shared, importable packages
例:Ruby on Rails
app/
├── controllers/            # Thin — params, call service, render
├── models/                 # ActiveRecord + domain logic
├── services/               # Complex business logic extracted from models
├── views/                  # Templates or JSON serializers
└── jobs/                   # Background jobs (Sidekiq)
config/
db/
├── migrate/                # Migrations
└── schema.rb

その他のスタック(Java/Spring、.NET、Rust、Elixir)でも、同じ原則を適用してください。ルートは薄く保ち、ビジネスロジックにはサービスを、データアクセスにはリポジトリを使い、テスト対象のコードとテストを同じ場所に配置します。

API 設計

判断事項基本設定
プロトコルCRUD には REST、型安全なフルスタック開発には tRPC、複数のクライアントで異なるデータ形式が必要な場合に限り GraphQL
バージョン管理URL パス:/api/v1/ — シンプルで明確
認証Authorization ヘッダー内のベアラートークン
ページネーションフィードにはカーソル方式、管理用テーブルにはオフセット方式
エラー{ error: { code: "NOT_FOUND", message: "User not found" } }
レート制限デフォルトは 100 req/min、認証エンドポイントではより低く設定

キャッシュ戦略

レイヤーツールTTL使用する場面
ブラウザーCache-Control ヘッダー変動静的アセット、API レスポンス
CDNCloudflare / Vercel Edge1~60 分公開ページ、画像
アプリケーションRedis / インメモリー5~60 分コストの高いクエリ、セッションデータ
データベースマテリアライズドビュー書き込み時に更新集計、ダッシュボード

ルール:

  • 書き込みではなく、読み取りをキャッシュします。変更時に無効化します。
  • まずはキャッシュなしで始めます。ボトルネックを測定してから、キャッシュを追加します。
  • すべてのキャッシュには無効化戦略が必要です。「TTL を設定して期待する」方法は、通用しなくなるまでは機能します。

スケーリングのチェックリスト

問題に直面したときだけ最適化します。

ユーザー数想定されるボトルネック対処法
0~1Kなし最適化しない
1K~10Kデータベースクエリインデックスを追加し、N+1 問題を最適化する
10K~100Kデータベース接続コネクションプーリング(PgBouncer)
100K~1M読み取りスループットRedis のキャッシュレイヤーを追加する
1M 以上書き込みスループットリードレプリカ、シャーディング、書き込みキュー

最適なアーキテクチャは、現在の規模の 10 倍に対応できる最もシンプルなものです。

コメント