デプロイパイプライン (Stripe / Supabase / Vercel)
Composio CLI を使って、シェルから Stripe、Supabase、Vercel を横断した段階的リリースを調整します。1つのスクリプトで「出荷だ!」という一連の流れ(製品/価格の更新、DBマイグレーション、フロントエンドデプロイ、スモークテスト、チェンジログ投稿)を開始できます。
いつ使うか
- 🫸課金、データベース、フロントエンドが連動するフルスタック製品のローンチ。
- Vercel のプレビュービルドを本番に昇格させ、Stripe の価格変更と Supabase のマイグレーションを同時に行う場合。
- 毎週のリリーストレインで、同じシーケンスを繰り返し実行し、信頼性を確保したい場合。
前提条件
curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack # リリース告知用
ツールの確認
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 → 確認 → アナウンス。 課金変更は DB より前に、DB 変更はフロントエンドより前に実施します。
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:デプロイ + 昇格
# git 参照から本番デプロイをトリガー
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 を出荷しました。Stripe 価格 `team-plan-v2` 公開、Supabase マイグレーション適用、Vercel 本番デプロイ昇格完了。"
}'
パイプラインをワークフローファイルとして
scripts/ship.ts を composio run --file scripts/ship.ts -- --ref main で実行:
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. 準備完了を待つ
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 デプロイに失敗しました");
// 5. アナウンス
await execute("SLACK_SEND_MESSAGE", {
channel: "releases",
text: `✅ ${ref} を出荷しました。Stripe 価格 ${price.id}、Vercel ${dep.url}.`
});
ロールバック計画
確認に失敗した場合は、逆順で元に戻します:
- Vercel:
VERCEL_PROMOTE_DEPLOYMENTで以前のデプロイIDに戻します。 - 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で止まる →VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URLに?logs=1を付けてビルドログを確認してください。 - 順序バグ(フロントエンドがマイグレーション適用前のカラムを読み取る) → 必ずパイプラインを直列化してください。Stripe/Supabase/Vercel 間で
--parallelを使用しないでください。
CLI リファレンス全文: docs.composio.dev/docs/cli