Vercel の Pro プランでチーム開発をしていると、こんな壁に当たります。
- チームメンバー以外が push したコミットは、Vercel のデプロイがブロックされる
- メンバーに追加すれば解決するが、Pro プランは1シートあたり月20ドル。開発者が増えるたびに課金が増える
- 「デプロイのためだけに全員分のシートを払うのは避けたい」
この記事では、Vercel の課金シートは1つのまま、リポジトリに push できる人なら誰でもデプロイが走る構成を、GitHub Actions + Vercel CLI で組む手順をまとめます。実際に業務のプロダクトで運用している構成です。
なぜブロックされるのか
Vercel 標準の Git 連携(GitHub リポジトリを接続して push で自動デプロイする機能)は、デプロイ時にコミット作者(commit author)が Vercel チームのメンバーかどうかをチェックします。
公式ドキュメントにも明記されています。
To deploy commits under a Vercel Pro team, the commit author must be a member of the team containing the Vercel project connected to the Git repository.
つまり Git 連携を使う限り、非メンバーの push は「commit author is not a member of the team」といったメッセージでブロックされるか、チームの設定によっては自動的にメンバー追加(=課金シート増)されます。
解決の考え方
発想を変えて、デプロイのトリガーを Vercel の Git 連携から GitHub Actions に移します。
- Vercel 側の Git 連携による自動デプロイは無効化する
- 代わりに GitHub Actions のワークフローで、Vercel CLI を使ってデプロイする
- CLI の認証にはチーム内の1アカウントで発行したトークンを使う
こうすると、デプロイの主体は「push した人」ではなく「トークンの持ち主」になります。コミット作者のメンバーシップチェックは Git 連携の仕組みなので、CLI 経由のデプロイでは効きません。リポジトリに push できる人=デプロイできる人、になります。
これはハックではなく、Vercel 公式ガイドで案内されている構成です。
手順
1. Vercel のトークンを発行する
Vercel のダッシュボードで Account Settings → Tokens からトークンを作成します。スコープは対象のチームを選びます。
このトークンの持ち主がデプロイの主体になるので、個人アカウントよりも CI 用の bot アカウント(チームに1シート追加して専用アカウントを用意する)にしておくと、退職や異動でトークンが失効する事故を防げます。まずは既存メンバーのトークンで始めて、運用が固まったら bot 化するのでも十分です。
2. プロジェクトの orgId / projectId を確認する
ローカルで一度だけ Vercel CLI でプロジェクトをリンクします。
npm i -g vercel
vercel link対話に答えると .vercel/project.json が生成され、この中に orgId と projectId が入っています。
{
"orgId": "team_xxxxxxxxxxxx",
"projectId": "prj_xxxxxxxxxxxx"
}なお .vercel ディレクトリはコミットしないでください(vercel link が自動で .gitignore に追記します)。
3. GitHub の Secrets に登録する
リポジトリの Settings → Secrets and variables → Actions に3つ登録します。
VERCEL_TOKEN— 手順1で発行したトークンVERCEL_ORG_ID—.vercel/project.jsonのorgIdVERCEL_PROJECT_ID—.vercel/project.jsonのprojectId
4. ワークフローを書く
.github/workflows/deploy.yml を作成します。main への push で本番デプロイする例です。
name: Vercel Production Deployment
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
on:
push:
branches:
- main
jobs:
Deploy-Production:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install Vercel CLI
run: npm install --global vercel@latest
- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
- name: Deploy Project Artifacts to Vercel
run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}ポイントは pull → build → deploy --prebuilt の3コマンドパターンです。
- `vercel pull` — Vercel 上のプロジェクト設定と環境変数を CI 環境に取得します。環境変数は Vercel 側の管理のままでよく、GitHub Secrets に二重管理する必要がありません
- `vercel build` — GitHub Actions のランナー上でビルドします
- `vercel deploy --prebuilt` — ビルド成果物だけを Vercel にアップロードします。Vercel 側ではビルドが走らないので、Vercel のビルド時間も消費しません
5. Vercel 側の自動デプロイを無効化する(忘れやすい)
このままだと「Git 連携による自動デプロイ(ブロックされる)」と「GitHub Actions によるデプロイ」が両方動いてしまいます。リポジトリ直下の vercel.json で Git 連携のデプロイを無効化します。
{
"git": {
"deploymentEnabled": false
}
}これで push しても Vercel 側の自動デプロイは走らず、GitHub Actions 経由のデプロイだけが実行されます。ここが一番漏れやすいステップで、設定しないと非メンバーの push のたびにブロック通知が飛び続けます。
プレビューデプロイも同じパターンで組める
PR ごとのプレビュー環境が欲しい場合も、同じ3コマンドで --prod を外し、environment を preview にするだけです。
name: Vercel Preview Deployment
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
on:
pull_request:
jobs:
Deploy-Preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install Vercel CLI
run: npm install --global vercel@latest
- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
- name: Build Project Artifacts
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
- name: Deploy Project Artifacts to Vercel
run: vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}vercel deploy の標準出力にデプロイ URL が出るので、それを拾って PR にコメントするステップを足すと、Git 連携のプレビュー URL 通知に近い体験を再現できます。
運用上の注意点
- デプロイ履歴が全部トークン所有者名義になる。誰のコミットによるデプロイかは Vercel のダッシュボードからは分からなくなるので、追跡は GitHub Actions の実行履歴側で行うことになります
- トークンは強い権限を持つ。GitHub Secrets での管理を徹底し、定期的なローテーションと、可能なら bot アカウント化を検討してください
- Vercel ダッシュボードの操作(環境変数の変更、ログ閲覧など)は引き続きメンバーのみ。この構成で解決するのは「デプロイ」だけです。ダッシュボードを触る必要がある人にはシートが必要です
まとめ
- Vercel の Git 連携はコミット作者のチームメンバーシップを要求するため、非課金メンバーの push はデプロイがブロックされる
- GitHub Actions + Vercel CLI + トークンに切り替えれば、シート1つでリポジトリの全開発者がデプロイ可能になる
vercel pull → build → deploy --prebuiltの3コマンドパターンが公式推奨vercel.jsonのgit.deploymentEnabled: falseを忘れずに