ops-deploy について
ops-deployは、ECS、GitHub Actions、Vercelのデプロイ状況を確認するClaudeスキルです。サービスとCIの情報を集めてダッシュボードにまとめ、状況に応じたログ確認や、承認後のデプロイ操作を提示します。
主な機能
- 01ECSクラスターとサービスの稼働確認
- 02直近のGitHub Actions実行の確認
- 03Vercelプロジェクトのデプロイ確認
- 04状況に応じた操作を示すダッシュボード
- 05デプロイのライブ監視とタスク追跡
活用シーン
- 01ECSサービスの稼働数と目標数の確認
- 02失敗したCI実行の特定とログ確認
- 03プロジェクトごとの最近のVercelデプロイ確認
- 04進行中のデプロイの監視
MCP 対応
Vercel MCPツールでプロジェクトとデプロイを一覧表示し、ビルドログを取得します。ツールを利用できない場合に備え、Vercel APIによる代替手段も記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ davepoon/ buildwithclaude --skill ops-deployインストール後、Claude Code で/ops-deployを入力して読み込まれたか確認します。
詳細
OPS ► デプロイ状況
実行時コンテキスト
実行前に、利用可能なコンテキストを読み込んでください。
-
設定:
${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.jsonを読み込みますtimezone— すべてのデプロイのタイムスタンプを正しいタイムゾーンで表示します
-
デーモンのヘルス状態:
${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.jsonを読み込みますinfra-monitorの状態を確認します — 実行されていない場合は、ECS のデータが古い可能性があることを明記します
-
シークレット:AWS と Vercel の認証情報が必要です。
シークレットの解決
- AWS:
$AWS_PROFILE/$AWS_ACCESS_KEY_IDを確認 →doppler secrets get AWS_ACCESS_KEY_ID --plain→ 設定にある vault クエリコマンド - Vercel トークン:
$VERCEL_TOKENを確認 →doppler secrets get VERCEL_TOKEN --plain→ vault
- AWS:
CLI/API リファレンス
aws CLI
| コマンド | 用途 | 出力 |
|---|---|---|
aws ecs list-clusters --output json | すべての ECS クラスター | {clusterArns: [...]} |
aws ecs list-services --cluster <name> --output json | クラスター内のサービス | {serviceArns: [...]} |
aws ecs describe-services --cluster <name> --services <arn> --output json | サービスのヘルス状態 | {services: [{serviceName, status, runningCount, desiredCount, pendingCount}]} |
aws logs tail /ecs/<service> --since 1h --format short | ECS ログ | ログ行 |
gh CLI(GitHub)
| コマンド | 用途 | 出力 |
|---|---|---|
gh run list --repo <owner/repo> --limit 5 --json status,conclusion,name,headBranch,createdAt,databaseId | CI の実行 | JSON 配列 |
gh run view <id> --repo <repo> --log-failed | 失敗した CI のログ | ログ出力 |
gh run watch <run-id> --repo <repo> | CI の実行をストリーミング | ライブ出力(Monitor と併用) |
Agent Teams のサポート
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 が設定されている場合、デプロイプラットフォームを並行して確認する際は Agent Teams を使用してください。これにより、次のことが可能になります。
- エージェントがコンテキストを共有し、実行中に連携できます
- 優先順位をリアルタイムで調整できます
- エージェントは作業が完了するたびに進捗を報告します
チームの設定(フラグが有効な場合のみ):
TeamCreate("deploy-team")
Agent(team_name="deploy-team", name="ecs-checker", prompt="List all ECS clusters and describe service health, running/desired counts")
Agent(team_name="deploy-team", name="vercel-checker", prompt="List Vercel projects and recent deployments with status")
Agent(team_name="deploy-team", name="ci-checker", prompt="Check GitHub Actions runs across all registered repos for failures")
フラグが設定されていない場合は、標準のファイア・アンド・フォーゲット方式のサブエージェントを使用します。
フェーズ 1 — デプロイデータを並行して収集
ECS サービス(すべてのクラスター)
${CLAUDE_PLUGIN_ROOT}/bin/ops-infra 2>/dev/null || \
aws ecs list-clusters --output json 2>/dev/null
ECS サービスの詳細
for cluster in $(aws ecs list-clusters --output json 2>/dev/null | jq -r '.clusterArns[]'); do
cluster_name=$(basename "$cluster")
aws ecs list-services --cluster "$cluster_name" --output json 2>/dev/null | \
jq -r '.serviceArns[]' | while read svc; do
aws ecs describe-services --cluster "$cluster_name" --services "$svc" \
--output json 2>/dev/null | jq '.services[] | {name: .serviceName, desired: .desiredCount, running: .runningCount, pending: .pendingCount, image: (.taskDefinition // "unknown"), status: .status}'
done
done
GitHub Actions の最近の実行(レジストリ主導)
REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.json"
[ -f "$REGISTRY" ] || REGISTRY="${CLAUDE_PLUGIN_ROOT}/scripts/registry.example.json"
for repo in $(jq -r '.projects[] | select(.gsd == true) | .repos[]' "$REGISTRY" 2>/dev/null); do
echo "=== $repo ==="
gh run list --repo "$repo" --limit 5 --json status,conclusion,name,headBranch,createdAt,databaseId 2>/dev/null
done
Vercel のデプロイ
mcp__claude_ai_Vercel__list_projects を使用し、各プロジェクトに対して mcp__claude_ai_Vercel__list_deployments を実行します(プロジェクトごとに最大 5 件)。
フェーズ 2 — ダッシュボードを表示
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OPS ► DEPLOY STATUS — [timestamp]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ECS SERVICES
CLUSTER SERVICE D/R/P STATUS LAST DEPLOY
─────────────────────────────────────────────────────
[cluster] [service] [x/x/x] ACTIVE [time ago]
...
VERCEL DEPLOYMENTS
PROJECT ENV STATUS COMMIT DEPLOYED
─────────────────────────────────────────────────────
[project] production READY [sha] [time ago]
...
CI/CD PIPELINE
REPO BRANCH WORKFLOW STATUS AGE
─────────────────────────────────────────────────────
example-api main Deploy API ✓ success 2h
example-web dev Build ✗ failure 1h
...
PENDING DEPLOYS (branch ready, not yet deployed)
[repo] [branch] [PR#] [CI status] → needs merge to trigger
──────────────────────────────────────────────────────
表示後、バッチ化した AskUserQuestion 呼び出し(選択肢は最大 4 つ)を使用します。現在の状態に関連するアクションのみを表示してください(例:失敗がなければ「失敗したサービスのログを表示」は省略します)。関連するアクションが 4 つ以下の場合は、1 回の呼び出しを使用します。4 つを超える場合は、次のように分けます。
AskUserQuestion 呼び出し 1:
[View logs for [failing service]]
[Trigger manual deploy for [project]]
[View build logs for [failing CI run]]
[More actions...]
AskUserQuestion 呼び出し 2(「その他のアクション...」を選択した場合のみ):
[Check Vercel [project] runtime logs]
[Open GitHub Actions for [repo]]
[Back to dashboard]
プロジェクトごとの詳細確認
$ARGUMENTS にプロジェクトのエイリアスがある場合は、そのプロジェクトのデプロイ情報、直近 10 件の CI 実行、およびログを表示するオプションのみを表示します。
デプロイに失敗した場合は、mcp__claude_ai_Vercel__get_deployment_build_logs または ECS CloudWatch ログでログを表示するオプションを提示します。
ユーザーが手動デプロイ(オプション b)を選択した場合は、実行前に AskUserQuestion で確認します。
Trigger deploy for [project]:
Environment: [production/staging]
Branch: [branch]
Last commit: [sha] — [message]
[Deploy now] [View diff since last deploy first] [Cancel]
ユーザーがログの表示を選択した場合は、ログを表示して AskUserQuestion を使用します。
[Dispatch fix agent for this failure] [Redeploy] [Back to dashboard]
ネイティブツールの使用
Monitor — デプロイのライブストリーミング
進行中のデプロイを監視する場合は、Monitor を使用してログをストリーミングします。
Monitor(command: "gh run watch <run-id> --repo <repo>")
ECS のデプロイでは、Monitor(command: "aws ecs wait services-stable --cluster <cluster> --services <service>") を使用します。
Tasks — デプロイの追跡
デプロイするプロジェクトごとに TaskCreate を使用します。デプロイが成功または失敗したら、TaskUpdate で更新します。
WebFetch — Vercel のフォールバック
Vercel MCP ツールを使用できない場合は、Vercel API に直接 WebFetch を使用します。
WebFetch(url: "https://api.vercel.com/v6/deployments?projectId=<id>&limit=5", headers: {"Authorization": "Bearer $VERCEL_TOKEN"})