convex-deploy について
Convex の開発者や AI コーディングエージェント向けのデプロイスキルです。環境の選択、CLI 操作、各環境での安全なロールアウトを扱います。
主な機能
- 01デプロイライフサイクルの指針
- 02CLI コマンドと対象の解決
- 03プレビューとローカルのデプロイ手順
- 04環境変数の管理
- 05スキーマと関数の安全な変更
活用シーン
- 01CI からの Convex バックエンドのデプロイ
- 02ブランチ別プレビューのテスト
- 03ローカル Convex 開発バックエンドの実行
- 04後方互換性を保つスキーマ変更の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igorwarzocha/ opencode-workflows --skill convex-deployインストール後、Claude Code で/convex-deployを入力して読み込まれたか確認します。
詳細
Convex バックエンドとフルスタックアプリのデプロイライフサイクル、環境、安全な段階的ロールアウト戦略について説明します。
- モデル:プロジェクトごとに本番デプロイメントが 1 つ、チームメンバーごとに開発デプロイメントが 1 つ、ブランチごとにプレビューデプロイメントが 1 つあります。
- プレビューデプロイメントはベータ版で、自動的にクリーンアップされます。データのシードには `--preview-run` が必要です。
- ローカルデプロイメント:`npx convex dev --local --once` を実行します。公開 URL はなく、Node アクションには Node 18 が必要です。
- エージェントモード:AI コーディングエージェントの開発時の権限を制限するには、`CONVEX_AGENT_MODE=anonymous` を使用します。
- 環境変数はデプロイメントごとに設定されます。システム変数は `CONVEX_CLOUD_URL` と `CONVEX_SITE_URL` です。
- 安全な変更のルール:スキーマはデータと一致していなければなりません。任意フィールド、バックフィル、ユニオンを使って移行してください。関数には後方互換性を持たせ、スケジュール済みジョブの引数は常に有効な状態にしてください。
- プロジェクト設定:`convex.json` で関数のパスや Node ランタイムを変更できます。静的コード生成はベータ版です。
- デプロイメントを一時停止すると、新しい呼び出しはエラーになり、スケジュール済みジョブはキューに入り、cron はスキップされます。まず開発環境でテストすることを推奨します。
デプロイ操作
- 主なコマンド:
npx convex dev、npx convex deploy、npx convex codegen、npx convex run(本番環境には--prodを使用します)。 - エージェントモード:AI エージェントとして反復作業を行い、安全にコード生成アーティファクトを生成する場合は、
CONVEX_AGENT_MODE=anonymous npx convex dev --onceを使用することを推奨します。 - デプロイ先の解決:
CONVEX_DEPLOY_KEYが設定されていればそれが優先され、そうでなければCONVEX_DEPLOYMENTのプロジェクトの本番デプロイメントが使われます。 - ビルド手順:
npx convex deploy --cmd "npm run build"を使用します。必要に応じて--cmd-url-env-var-nameも使用します。 - デプロイキー:本番、プレビュー、開発、管理者(コミットまたはログへの記録は禁止です)。
- ホスティングの流れ:
- Vercel/Netlify のビルドコマンドには
npx convex deploy --cmd 'npm run build'を使用することを推奨します。 - 環境ごと(プレビューと本番)に
CONVEX_DEPLOY_KEYを設定する必要があります。 - プレビューのデータシードには
--preview-run 'functionName'を使用します。 - カスタムホスティング:バックエンドをデプロイし、フロントエンドは別の場所でホストします。カスタムドメインを使用するには、
CONVEX_CLOUD_URLを上書きして再デプロイします。CONVEX_SITE_URLは任意です。
- Vercel/Netlify のビルドコマンドには
必須の出力
- ドキュメントに記載されている正確な CLI コマンドとフラグを使用する必要があります。
- デプロイ先の解決方法(デプロイキーと
CONVEX_DEPLOYMENTのどちらが使われるか)を明記する必要があります。 - デプロイによる影響(スキーマの検証、インデックスのバックフィル、コード生成、バンドル化)を明示する必要があります。
- 該当する場合は、
.convex.siteと.convex.cloudの URL の使い分けに常に触れることを推奨します。
デプロイモデル
- 各プロジェクトには、本番デプロイメントが 1 つと、チームメンバーごとにクラウド開発デプロイメントが 1 つあります。
- プレビューデプロイメントはブランチごとに作成され、一定期間の経過後に自動的にクリーンアップされます。
- ローカルデプロイメントは開発専用で、
npx convex devのサブプロセスとして実行されます。
CLI ワークフロー
開発
npx convex dev:- ファイルを監視し、変更を開発デプロイメントにプッシュします。
convex/_generated/*を再生成します。- ログ出力を制御するには
--tail-logsを使用することを推奨します。
- ローカル開発:
- ローカルバックエンドには
npx convex dev --local --onceを使用します。 - 注:公開 URL はありません。HTTP リクエストにはプロキシ(例:ngrok)が必要です。
- ローカルでの Node アクションには Node 18 が必要です。
- ローカルバックエンドには
デプロイ
npx convex deploy:- 関数の型チェックを行います。
- コード生成を再実行します。
- 関数、スキーマ、インデックスをバンドルしてプッシュします。
- デプロイ先の解決:
CONVEX_DEPLOY_KEYが設定されている場合、そのキーの対象にデプロイします。- そうでない場合は、
CONVEX_DEPLOYMENTのプロジェクトの本番デプロイメントを使用します。
- 任意のビルドコマンド:
npx convex deploy --cmd "npm run build"- 環境変数名をカスタマイズするには
--cmd-url-env-var-nameを使用します。
デプロイキー
- 本番デプロイキー:プロジェクトの本番デプロイメントを対象にします(一般的な CI 用)。
- プレビューデプロイキー:ブランチごとにプレビューデプロイメントを作成します。
- 開発デプロイキー:単一の開発デプロイメントにスコープされます。
- 管理者キー:すべてを制御できます。匿名のローカルデプロイメントで使用されます。
- セキュリティ:デプロイキーをコードに貼り付けたり、コミット履歴に含めたりしてはなりません。
プレビュー環境へのデプロイ
- ベータ機能であり、ライフサイクルに応じて自動クリーンアップされます(デフォルトは5日間)。
- プレビュー環境のデプロイ名はブランチに紐付けられます。再デプロイすると、以前のプレビュー環境が置き換えられます。
- データのシードには、デプロイ時に関数を実行する必要があります(
--preview-run)。
環境変数
- ダッシュボードまたは
npx convex envを使って、デプロイごとに設定する必要があります。 - 同じキーに対して、開発環境と本番環境の両方で値が必要になる場合があります。
- システム変数:
CONVEX_CLOUD_URLはクライアント RPC に使用します。CONVEX_SITE_URLは HTTP アクションに使用します。
- 実行時に
process.envに基づいてエクスポートを分岐してはいけません。関数はデプロイ時に設定されます。
安全な段階的リリースのルール
- スキーマは既存のデータと一致する必要があります。検証に失敗すると、デプロイはブロックされます。
- 安全なスキーマ変更:
- テーブルを追加します。
- オプションのフィールドを追加し、バックフィルしてから必須にします。
v.unionを使って範囲を広げ、バックフィルしてから狭めます。
- 古いクライアントが稼働している間、関数は下位互換性を維持する必要があります。
- スケジュール済み関数は、以前にスケジュールされた引数を受け付ける必要があります。
インデックスのバックフィル
- 新しいインデックスはデプロイ中にバックフィルされるため、本番環境へのプッシュが遅くなる場合があります。
- 大規模なテーブルでは、ステージング済みインデックス(検索/ベクトルインデックスを含む)を使用することをおすすめします。
- インデックスを削除すると、デプロイ時に削除されます。それらに依存するコードパスがないことを確認する必要があります。
URL
- HTTP アクション:
https://<deployment>.convex.site。 - クライアント URL:
https://<deployment>.convex.cloud(CONVEX_CLOUD_URL経由)。 .convex.siteと.convex.cloudの混在について警告することをおすすめします。
回答チェックリスト
- 環境(dev/prod/preview/local)を明記します。
- 正確なコマンドと必要な環境変数を提示します。
- 安全上の考慮事項(スキーマ、関数、スケジュール済み関数)を列挙します。
- トラブルシューティング時にログの場所(CLI またはダッシュボード)を記載します。
コメント
Markdown 対応