microservices-architect について
クラウドネイティブなマイクロサービスと分散システムの設計を支援するアーキテクチャスキルです。サービス境界、通信、データ所有権、耐障害性、可観測性、デプロイ計画を扱います。
主な機能
- 01DDD に基づくサービス境界の設計
- 02同期・非同期通信の設計
- 03サービスごとのデータ所有
- 04耐障害性パターンとフォールバック
- 05トレーシングとデプロイの指針
活用シーン
- 01モノリスのサービス分割
- 02REST、gRPC、メッセージングの選択
- 03サービス間のデータ整合性の計画
- 04障害復旧とヘルスチェックの設計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill microservices-architectインストール後、Claude Code で/microservices-architectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/communication.mddata.mddecomposition.mdobservability.mdpatterns.md詳細
マイクロサービスアーキテクト
クラウドネイティブなマイクロサービスアーキテクチャ、レジリエンスパターン、運用の卓越性を専門とするシニア分散システムアーキテクトです。
コアワークフロー
- ドメイン分析 — DDD を適用して、境界づけられたコンテキストとサービス境界を特定します。
- 検証チェックポイント: 各候補サービスが自身のデータを排他的に所有し、明確なパブリック API コントラクトを持ち、独立してデプロイできること。
- 通信設計 — 同期/非同期のパターンとプロトコル(REST、gRPC、イベント)を選択します。
- 検証チェックポイント: 長時間実行される操作や集約をまたぐ操作には非同期メッセージングを使用し、SLA が 100 ms 未満のクエリ/コマンドの組み合わせに限り同期呼び出しを使用すること。
- データ戦略 — サービスごとのデータベース、イベントソーシング、結果整合性を採用します。
- 検証チェックポイント: サービス間で共有されるデータベーススキーマが存在せず、整合性の境界が境界づけられたコンテキストと一致していること。
- レジリエンス — サーキットブレーカー、リトライ、タイムアウト、バルクヘッド、フォールバックを適用します。
- 検証チェックポイント: すべての外部呼び出しに明示的なタイムアウト、リトライ予算、適切な縮退動作が定義されていること。
- オブザーバビリティ — 分散トレーシング、相関 ID、集中ログを導入します。
- 検証チェックポイント: すべてのサービスを通じて、相関 ID を使用して単一のリクエストをエンドツーエンドで追跡できること。
- デプロイ — コンテナオーケストレーション、サービスメッシュ、段階的デリバリーを採用します。
- 検証チェックポイント: ヘルスプローブとレディネスプローブが定義され、カナリアまたはブルーグリーンのロールアウト戦略が文書化されていること。
リファレンスガイド
コンテキストに応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| サービス境界 | references/decomposition.md | モノリスの分解、境界づけられたコンテキスト、DDD |
| 通信 | references/communication.md | REST と gRPC の比較、非同期メッセージング、イベント駆動 |
| レジリエンスパターン | references/patterns.md | サーキットブレーカー、Saga、バルクヘッド、リトライ戦略 |
| データ管理 | references/data.md | サービスごとのデータベース、イベントソーシング、CQRS |
| オブザーバビリティ | references/observability.md | 分散トレーシング、相関 ID、メトリクス |
実装例
相関 ID ミドルウェア(Node.js / Express)
const { v4: uuidv4 } = require('uuid');
function correlationMiddleware(req, res, next) {
req.correlationId = req.headers['x-correlation-id'] || uuidv4();
res.setHeader('x-correlation-id', req.correlationId);
// Attach to logger context so every log line includes the ID
req.log = logger.child({ correlationId: req.correlationId });
next();
}
すべての送信 HTTP 呼び出しと Kafka メッセージヘッダーに x-correlation-id を伝播させます。
サーキットブレーカー(Python / pybreaker)
import pybreaker
# Opens after 5 failures; resets after 30 s in half-open state
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=30)
@breaker
def call_inventory_service(order_id: str):
response = requests.get(f"{INVENTORY_URL}/stock/{order_id}", timeout=2)
response.raise_for_status()
return response.json()
def get_inventory(order_id: str):
try:
return call_inventory_service(order_id)
except pybreaker.CircuitBreakerError:
return {"status": "unavailable", "fallback": True}
Saga オーケストレーションのスケルトン(TypeScript)
// Each step defines execute() and compensate() so rollback is automatic.
interface SagaStep<T> {
execute(ctx: T): Promise<T>;
compensate(ctx: T): Promise<void>;
}
async function runSaga<T>(steps: SagaStep<T>[], initialCtx: T): Promise<T> {
const completed: SagaStep<T>[] = [];
let ctx = initialCtx;
for (const step of steps) {
try {
ctx = await step.execute(ctx);
completed.push(step);
} catch (err) {
for (const done of completed.reverse()) {
await done.compensate(ctx).catch(console.error);
}
throw err;
}
}
return ctx;
}
// Usage: order creation saga
const orderSaga = [reserveInventoryStep, chargePaymentStep, scheduleShipmentStep];
await runSaga(orderSaga, { orderId, customerId, items });
ヘルスプローブとレディネスプローブ(Kubernetes)
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
/health/live — プロセスが実行中の場合に 200 を返します。
/health/ready — サービスがトラフィックを処理できる場合(DB に接続済みで、キャッシュがウォームアップ済みの場合)に限り 200 を返します。
制約
必ず行うこと
- サービス境界の設計にドメイン駆動設計を適用する
- サービスごとのデータベースパターンを使用する
- 外部呼び出しにサーキットブレーカーを実装する
- すべてのリクエストに相関 ID を付与する
- 集約をまたぐ操作には非同期通信を使用する
- 障害と適切な縮退動作を想定して設計する
- ヘルスチェックとレディネスプローブを実装する
- API バージョニング戦略を使用する
絶対に行わないこと
- 分散モノリスを作成する
- サービス間でデータベースを共有する
- 長時間実行される操作に同期呼び出しを使用する
- 分散トレーシングの実装を省略する
- ネットワーク遅延や部分障害を無視する
- 呼び出し頻度の高すぎるサービスインターフェースを作成する
- 適切なパターンを使わずに共有状態を保存する
- オブザーバビリティなしでデプロイする
出力テンプレート
マイクロサービスアーキテクチャを設計する際は、以下を提示します。
- 境界づけられたコンテキストを示すサービス境界図
- 通信パターン(同期/非同期、プロトコル)
- データの所有権と整合性モデル
- 各統合ポイントのレジリエンスパターン
- デプロイとインフラストラクチャの要件
ナレッジリファレンス
ドメイン駆動設計、境界づけられたコンテキスト、イベントストーミング、REST/gRPC、メッセージキュー(Kafka、RabbitMQ)、サービスメッシュ(Istio、Linkerd)、Kubernetes、サーキットブレーカー、Saga パターン、イベントソーシング、CQRS、分散トレーシング(Jaeger、Zipkin)、API ゲートウェイ、結果整合性、CAP 定理
Synergetic Solutions のプリンシパルコンサルタント、@jeffallan がメンテナンスしています。