Vercel にデプロイ
任意のプロジェクトをVercelにデプロイします。ユーザーが明示的に本番環境を要求しない限り、常にプレビューとしてデプロイします。
目標は、ユーザーを最適な長期的セットアップ(プロジェクトをVercelにリンクし、Gitプッシュでデプロイできる状態)に導くことです。以下のすべての方法は、その状態にユーザーを近づけることを目指します。
ステップ 1: プロジェクトの状態を確認する
デプロイ方法を決定する前に、以下の4つのチェックをすべて実行します。
# 1. Gitリモートの有無を確認
git remote get-url origin 2>/dev/null
# 2. Vercelプロジェクトにローカルでリンクされているか確認(どちらかのファイルがあればリンク済み)
cat .vercel/project.json 2>/dev/null || cat .vercel/repo.json 2>/dev/null
# 3. Vercel CLIがインストールされ、認証されているか確認
vercel whoami 2>/dev/null
# 4. 利用可能なチーム一覧を取得(認証済みの場合)
vercel teams list --format json 2>/dev/null
チーム選択
ユーザーが複数のチームに所属している場合は、利用可能なすべてのチームスラッグを箇条書きで表示し、どれにデプロイするか尋ねます。ユーザーがチームを選択したら、すぐに次のステップに進みます。追加の確認は求めないでください。
選択されたチームスラッグは、後続のすべてのCLIコマンド(vercel deploy、vercel link、vercel inspectなど)で --scope パラメータとして渡します。
vercel deploy [path] -y --no-wait --scope <team-slug>
プロジェクトがすでにリンクされている場合(.vercel/project.json または .vercel/repo.json が存在する場合)、それらのファイル内の orgId がチームを決定するため、再度尋ねる必要はありません。チームが1つ(または個人アカウントのみ)の場合は、プロンプトをスキップして直接使用します。
.vercel/ ディレクトリについて: リンクされたプロジェクトには、以下のいずれかが存在します。
.vercel/project.json—vercel linkによって作成される(単一プロジェクトのリンク)。projectIdとorgIdが含まれます。.vercel/repo.json—vercel link --repoによって作成される(リポジトリベースのリンク)。orgId、remoteName、およびディレクトリをVercelプロジェクトIDにマッピングするprojects配列が含まれます。
どちらかのファイルがあれば、プロジェクトはリンク済みです。両方を確認してください。
リンクされていないディレクトリで状態を検出するために vercel project inspect、vercel ls、または vercel link を使用しないでください。.vercel/ 設定がない場合、それらのコマンドは対話的にプロンプトを表示するか(または --yes を付けると、副作用としてサイレントにリンクしてしまいます)。安全に実行できるのは vercel whoami だけです。
ステップ 2: デプロイ方法を選択する
リンク済み(.vercel/ が存在する)+ Gitリモートあり → Gitプッシュ
これが理想的な状態です。プロジェクトがリンクされ、Git連携が設定されています。
-
プッシュ前にユーザーに確認を取ります。 明示的な承認なしにプッシュしないでください。
このプロジェクトはGit経由でVercelに接続されています。コミットしてプッシュし、 デプロイをトリガーできます。続行しますか? -
コミットしてプッシュします。
git add . git commit -m "deploy: <変更内容の説明>" git pushVercelはプッシュから自動的にビルドします。本番用ではないブランチはプレビューデプロイメントを取得し、本番ブランチ(通常
main)は本番デプロイメントを取得します。 -
プレビューURLを取得します。 CLIが認証されている場合:
sleep 5 vercel ls --format jsonJSON出力には
deployments配列が含まれます。最新のエントリを見つけます。そのurlフィールドがプレビューURLです。CLIが認証されていない場合は、プレビューURLを確認するためにVercelダッシュボードまたはGitプロバイダーのコミットステータスチェックを確認するようユーザーに伝えます。
リンク済み(.vercel/ が存在する)+ Gitリモートなし → vercel deploy
プロジェクトはリンクされていますが、Gitリポジトリがありません。CLIで直接デプロイします。
vercel deploy [path] -y --no-wait
--no-wait を使用して、ビルドが完了するまでブロックする代わりに、CLIが即座にデプロイメントURLを返すようにします(ビルドには時間がかかる場合があります)。その後、以下のコマンドでデプロイメントの状態を確認します。
vercel inspect <deployment-url>
本番デプロイの場合(ユーザーが明示的に要求した場合のみ):
vercel deploy [path] --prod -y --no-wait
リンクされていない + CLIが認証済み → 最初にリンクしてからデプロイ
CLIは動作していますが、プロジェクトがまだリンクされていません。これはユーザーを最適な状態に導く絶好の機会です。
-
どのチームにデプロイするかユーザーに尋ねます。 ステップ1のチームスラッグを箇条書きで表示します。チームが1つ(または個人アカウントのみ)の場合は、このステップをスキップします。
-
チームが選択されたら、直接リンクに進みます。 何が行われるかをユーザーに伝えますが、個別の確認は求めません。
このプロジェクトをVercelの <チーム名> にリンクしています。これにより、Vercelプロジェクトが作成され、 将来のGitプッシュで自動デプロイが有効になります。 -
Gitリモートが存在する場合、選択されたチームスコープでリポジトリベースのリンクを使用します。
vercel link --repo --scope <team-slug>これにより、GitリモートURLが読み取られ、そのリポジトリからデプロイする既存のVercelプロジェクトと照合されます。
.vercel/repo.jsonが作成されます。これはvercel link(--repoなし)よりもはるかに信頼性が高く、vercel linkはディレクトリ名で一致させようとするため、ローカルフォルダ名とVercelプロジェクト名が異なる場合に失敗することがよくあります。Gitリモートがない場合、標準のリンクにフォールバックします。
vercel link --scope <team-slug>これにより、ユーザーにプロジェクトの選択または作成を促します。
.vercel/project.jsonが作成されます。 -
次に、利用可能な最良の方法でデプロイします。
- Gitリモートがある場合 → コミットしてプッシュ(上記のGitプッシュ方法を参照)
- Gitリモートがない場合 →
vercel deploy [path] -y --no-wait --scope <team-slug>、次にvercel inspect <url>で状態を確認
リンクされていない + CLIが認証されていない → インストール、認証、リンク、デプロイ
Vercel CLIがまったくセットアップされていません。
-
CLIをインストールします(まだインストールされていない場合)。
npm install -g vercel -
認証します。
vercel loginユーザーはブラウザで認証を完了します。ログインが不可能な非対話型環境で実行している場合は、以下の認証なしフォールバックに進みます。
-
どのチームにデプロイするか尋ねます —
vercel teams list --format jsonのチームスラッグを箇条書きで表示します。チームが1つ/個人アカウントのみの場合はスキップします。選択されたらすぐに進みます。 -
選択されたチームスコープでプロジェクトをリンクします(Gitリモートがある場合は
--repoを使用し、そうでない場合はプレーンなvercel linkを使用)。vercel link --repo --scope <team-slug> # Gitリモートがある場合 vercel link --scope <team-slug> # Gitリモートがない場合 -
利用可能な最良の方法でデプロイします(リモートが存在する場合はGitプッシュ、そうでない場合は
vercel deploy -y --no-wait --scope <team-slug>の後、vercel inspect <url>で状態を確認)。
認証なしフォールバック — claude.ai サンドボックス
使用するタイミング: claude.aiサンドボックスでCLIをインストールまたは認証できない場合の最終手段です。認証は不要で、プレビューURL(公開サイト)とクレームURL(Vercelアカウントに転送するため)を返します。
bash /mnt/skills/user/deploy-to-vercel/resources/deploy.sh [path]
引数:
path- デプロイするディレクトリ、または.tgzファイル(デフォルトはカレントディレクトリ)
例:
# カレントディレクトリをデプロイ
bash /mnt/skills/user/deploy-to-vercel/resources/deploy.sh
# 特定のプロジェクトをデプロイ
bash /mnt/skills/user/deploy-to-vercel/resources/deploy.sh /path/to/project
# 既存のtarballをデプロイ
bash /mnt/skills/user/deploy-to-vercel/resources/deploy.sh /path/to/project.tgz
スクリプトは package.json からフレームワークを自動検出し、プロジェクトをパッケージ化して(node_modules、.git、.env は除外)、アップロードし、ビルドが完了するのを待ちます。
ユーザーに伝える: 「デプロイメントの準備ができました: [previewUrl]。デプロイメントを管理するには [claimUrl] でクレームしてください。」
認証なしフォールバック — Codex サンドボックス
使用するタイミング: CLIが認証されていない可能性があるCodexサンドボックスで使用します。Codexはデフォルトでサンドボックス環境で実行されます。まずCLIを試し、認証に失敗した場合はデプロイスクリプトにフォールバックします。
-
Vercel CLIがインストールされているか確認します(この確認に権限昇格は不要です)。
command -v vercel -
vercelがインストールされている場合、CLIでデプロイを試みます。vercel deploy [path] -y --no-wait -
vercelがインストールされていない場合、またはCLIが「既存の認証情報が見つかりません」で失敗した場合、フォールバックスクリプトを使用します。skill_dir="<path-to-skill>" # カレントディレクトリをデプロイ bash "$skill_dir/resources/deploy-codex.sh" # 特定のプロジェクトをデプロイ bash "$skill_dir/resources/deploy-codex.sh" /path/to/project # 既存のtarballをデプロイ bash "$skill_dir/resources/deploy-codex.sh" /path/to/project.tgz
スクリプトはフレームワークの検出、パッケージ化、デプロイを処理します。ビルドが完了するのを待ち、previewUrl と claimUrl を含むJSONを返します。
ユーザーに伝える: 「デプロイメントの準備ができました: [previewUrl]。デプロイメントを管理するには [claimUrl] でクレームしてください。」
昇格されたネットワークアクセス: サンドボックスがネットワークコールをブロックする場合のみ、実際のデプロイコマンドを昇格させます(sandbox_permissions=require_escalated)。command -v vercel チェックを昇格させないでください。
エージェント固有の注意事項
Claude Code / ターミナルベースのエージェント
シェルへのフルアクセスがあります。/mnt/skills/ パスは使用しないでください。上記の決定フローに従い、CLIを直接使用します。
認証なしフォールバックの場合は、スキルのインストール先からデプロイスクリプトを実行します。
bash ~/.claude/skills/deploy-to-vercel/resources/deploy.sh [path]
パスは、ユーザーがスキルをインストールした場所によって異なる場合があります。
サンドボックス環境(claude.ai)
vercel login や git push はおそらく実行できません。直接認証なしフォールバック — claude.ai サンドボックスに進んでください。
Codex
Codexはサンドボックスで実行されます。最初にCLIが利用可能かどうかを確認し、利用できない場合はデプロイスクリプトにフォールバックします。認証なしフォールバック — Codex サンドボックスに進んでください。
出力
常にユーザーにデプロイメントURLを表示します。
- Gitプッシュ:
vercel ls --format jsonを使用してプレビューURLを見つけます。CLIが認証されていない場合は、Vercelダッシュボードまたはコミットステータスチェックを確認するようユーザーに伝えます。 - CLIデプロイ:
vercel deploy --no-waitが返したURLを表示します。vercel inspect <url>を使用してビルド状態を確認し、ユーザーに報告します。 - 認証なしフォールバック: プレビューURLとクレームURLの両方を表示します。
デプロイ成功! プレビューURL: https://my-app-abc123.vercel.app クレームURL: https://vercel.com/claim-deployment?code=... プレビューURLでサイトを表示できます。 このデプロイメントをVercelアカウントに転送するには、クレームURLにアクセスしてください。
デプロイされたURLを curl や fetch で検証しないでください。リンクを返すだけにしてください。
トラブルシューティング
ネットワークエグレスエラー(claude.ai)
claude.aiのネットワーク制限によりデプロイが失敗した場合は、ユーザーに次のように伝えます。
ネットワーク制限のためデプロイに失敗しました。修正するには:
1. https://claude.ai/settings/capabilities にアクセス
2. 許可ドメインに *.vercel.com を追加
3. 再度デプロイを試行
昇格されたネットワークアクセス(Codex / サンドボックス環境)
サンドボックス環境でネットワーク問題(タイムアウト、DNSエラー、接続リセット)が原因でデプロイが失敗した場合は、昇格された権限で再実行します(sandbox_permissions=require_escalated)。最初のCLI可用性チェックは昇格させず、実際のデプロイコマンドのみを昇格させてください。
ユーザーへのガイダンス例:
デプロイをVercelに実行するには、昇格されたネットワークアクセスが必要です。
昇格された権限でコマンドを再実行できます。続行しますか?
CLI認証エラー
vercel login または vercel deploy が認証エラーで失敗した場合は、認証なしデプロイスクリプト(環境に応じてclaude.aiまたはCodexバリアント)にフォールバックします。