deploy-pipeline について
deploy-pipelineは、Stripe、Supabase、Vercelをまたぐ変更をリリースするチーム向けのコマンドラインスキルです。課金、データベース移行、デプロイ、検証、告知を順に進め、ロールバック手順も示します。
主な機能
- 01Stripe、Supabase、Vercelの順次リリース
- 02課金価格の作成・更新
- 03Supabaseの移行とスキーマ確認
- 04Vercelのデプロイと昇格
- 05スモークテストとSlackでの告知
- 06逆順でのロールバック手順
活用シーン
- 01課金・データベース・フロントエンドにまたがるリリース
- 02プレビュー版の昇格と価格変更、移行の同時実施
- 03毎週のリリース手順の反復
MCP 対応
このスキルはComposio CLIを使い、Stripe、Supabase、Vercel、および任意でSlackの操作を実行します。入力にはMCPとの連携について記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ composio-community/ awesome-codex-skills --skill deploy-pipelineインストール後、Claude Code で/deploy-pipelineを入力して読み込まれたか確認します。
詳細
デプロイパイプライン(Stripe/Supabase/Vercel)
Composio CLI を使って、シェルから Stripe、Supabase、Vercel 間の段階的なリリースを調整します。1 つのスクリプトで、プロダクト/価格の更新、データベースのマイグレーション、フロントエンドのデプロイ、スモークテスト、変更履歴の投稿まで、一連の「リリース」手順を実行できます。
使用する場面
- 課金、データベース、フロントエンドをまとめて変更するフルスタックのプロダクトローンチ。
- Stripe の価格切り替えと Supabase のマイグレーションを行い、Vercel のプレビュービルドを本番環境に昇格させる場合。
- 同じ手順を定期的に繰り返し、信頼性を高めたい週次リリース。
前提条件
curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack # for release announcements
ツールを確認する
composio search "create price" --toolkits stripe
composio search "apply migration" --toolkits supabase
composio search "create deployment" --toolkits vercel
composio tools list stripe
composio tools list supabase
composio tools list vercel
よく使われるスラッグ(--get-schema で確認してください):
Stripe
STRIPE_CREATE_PRODUCTSTRIPE_CREATE_PRICESTRIPE_UPDATE_PRODUCTSTRIPE_LIST_PRICES
Supabase
SUPABASE_LIST_PROJECTSSUPABASE_RUN_SQL_QUERYSUPABASE_LIST_MIGRATIONSSUPABASE_APPLY_MIGRATION
Vercel
VERCEL_CREATE_A_NEW_DEPLOYMENTVERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URLVERCEL_LIST_DEPLOYMENTSVERCEL_PROMOTE_DEPLOYMENT
パイプライン
順序が重要です:Stripe → Supabase → Vercel → 検証 → 告知。 課金の変更をデータベースより先に、データベースの変更をフロントエンドより先に行います。
1. Stripe:価格を作成または更新する
composio execute STRIPE_CREATE_PRICE -d '{
"product":"prod_abc123",
"unit_amount":2900,
"currency":"usd",
"recurring":{"interval":"month"},
"lookup_key":"team-plan-v2"
}'
2. Supabase:マイグレーションを適用する
composio execute SUPABASE_APPLY_MIGRATION -d '{
"project_id":"abcxyz",
"name":"add_team_tier_column",
"query":"alter table teams add column tier text default '\''free'\'';"
}'
適用後にスキーマをチェックします:
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id":"abcxyz",
"query":"select column_name from information_schema.columns where table_name='\''teams'\'' and column_name='\''tier'\'';"
}'
3. Vercel:デプロイして昇格させる
# Trigger a production deployment from a git ref
composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
"name":"web",
"target":"production",
"gitSource":{"type":"github","ref":"main","repoId":123456}
}'
準備完了になるまでポーリングします:
composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{"idOrUrl":"dpl_xxx"}' \
| jq '.readyState'
4. 検証する
curl -fsS https://app.acme.com/api/health
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id":"abcxyz","query":"select count(*) from teams where tier is null;"
}'
5. 告知する
composio execute SLACK_SEND_MESSAGE -d '{
"channel":"releases",
"text":"✅ Team Plan v2 shipped. Stripe price `team-plan-v2` live, Supabase migration applied, Vercel production promoted."
}'
ワークフローファイルとしてのパイプライン
composio run --file scripts/ship.ts -- --ref main で実行する scripts/ship.ts:
const ref = process.argv[process.argv.indexOf("--ref") + 1] ?? "main";
// 1. Stripe
const price = await execute("STRIPE_CREATE_PRICE", {
product: "prod_abc123", unit_amount: 2900, currency: "usd",
recurring: { interval: "month" }, lookup_key: "team-plan-v2"
});
// 2. Supabase
await execute("SUPABASE_APPLY_MIGRATION", {
project_id: "abcxyz",
name: "add_team_tier_column",
query: "alter table teams add column tier text default 'free';"
});
// 3. Vercel
const dep = await execute("VERCEL_CREATE_A_NEW_DEPLOYMENT", {
name: "web", target: "production",
gitSource: { type: "github", ref, repoId: 123456 }
});
// 4. Wait for ready
let state = "QUEUED";
while (state !== "READY" && state !== "ERROR") {
await new Promise(r => setTimeout(r, 4000));
const d = await execute("VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL", { idOrUrl: dep.id });
state = d.readyState;
}
if (state !== "READY") throw new Error("Vercel deploy failed");
// 5. Announce
await execute("SLACK_SEND_MESSAGE", {
channel: "releases",
text: `✅ Shipped ${ref}. Stripe price ${price.id}, Vercel ${dep.url}.`
});
ロールバック計画
検証に失敗した場合は、逆の順序で元に戻します:
- Vercel:以前のデプロイ ID を指定して
VERCEL_PROMOTE_DEPLOYMENTを実行します。 - Supabase:ダウンマイグレーションを適用します(リリース前に必ず対応する
down.sqlを作成してください)。 - Stripe:
STRIPE_UPDATE_PRODUCTを使い、新しい価格を非表示にします(active:false)。削除はしないでください。Stripe オブジェクトは実質的に不変で、過去の請求書にも影響するためです。 - Slack:ロールバックを告知します。
トラブルシューティング
- Stripe の価格は表示されるが、チェックアウトには古い価格が表示される → アプリ側のキャッシュが原因です。チェックアウトで取得している
lookup_keyを確認してください。 - Supabase のマイグレーションが停止する → 別の接続がロックを保持しています。
select pid, state, query from pg_stat_activity where state <> 'idle';を実行してください。 - Vercel のデプロイが
QUEUEDのまま停止する →?logs=1を付けてVERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URLを実行し、ビルドログを確認してください。 - 順序に関する不具合(マイグレーションが適用される前にフロントエンドがカラムを読み込む)→ パイプラインは必ず順番に実行してください。Stripe、Supabase、Vercel をまたいで
--parallelを使わないでください。
CLI のリファレンス全文:docs.composio.dev/docs/cli
コメント
Markdown 対応