Vercel CLI を使わずに Vercel デプロイをトリガーする方法
VERCEL_TOKEN などの Secrets を追加せずに Vercel デプロイをトリガーする方法を解説します。github-actions[bot] に空コミットを push させる仕組みと、Vercel CLI 方式とのトレードオフを比較します。
GitHub Actions から Vercel にデプロイしたいとき、多くの記事では vercel deploy コマンドを使う方法が紹介されています。この方法には、Vercel の認証情報を GitHub Secrets に保管する必要があります。管理する Secret が増えるほど、設定ミスや漏洩のリスクも積み上がります。実は、Secrets を一切追加せずにデプロイをトリガーできる方法があります。
この記事では、Vercel CLI を使わず github-actions[bot] に空のコミットを作らせることでデプロイを発火させる方法を紹介します。あわせて Vercel CLI 方式との比較も整理するので、自分のプロジェクトに合う方法を選ぶ参考にしてみてください。
前提 — この記事が想定する状況
この方法が役立つのは、次のような状況です。
- GitHub リポジトリの Collaborator だが、Vercel のチームメンバーではない
VERCEL_TOKENなどの Vercel 認証情報を GitHub Secrets に置きたくない- デプロイを手動トリガーに絞ってシンプルに管理したい
また、Vercel プロジェクトが GitHub との Git 連携(Vercel for GitHub)で接続済みであることが前提です。Vercel CLI 経由でのみデプロイしている場合は対象外となります。
なお、本記事の方法は Hobby プラン・Pro プラン、パブリック・プライベートリポジトリのいずれでも動作を確認しています。
よく見る方法 — Vercel CLI 方式と3つの Secrets
Vercel CLI を使ったデプロイ方式は次のとおりです。
- 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 }}
この方式では、GitHub Secrets に 3つの値を登録する必要があります。
Secret 名 | 内容 |
|---|---|
| Vercel アカウントのアクセストークン(オーナーが発行) |
| Vercel のチーム(オーガニゼーション)ID |
| Vercel のプロジェクト ID |
VERCEL_TOKEN はオーナーのアカウントで発行するため、チームメンバーの招待は不要です。ただし、Vercel の認証情報をリポジトリに保管するという点は変わりません。
github-actions[bot] がコミットするとデプロイが走る理由
Vercel の GitHub 連携は、リポジトリへの push イベントを検知してデプロイを開始します。ただし、プライベートリポジトリでは追加のチェックが入ります。
公式ドキュメントには次のように記載されています。
To deploy commits under a Hobby team, the commit author must be the owner of the Hobby team containing the Vercel project connected to the Git repository.
つまり、コミット作者が Vercel チームのメンバーまたはオーナーでない場合、デプロイはスキップされます。チーム外の GitHub ユーザーがコミットしても、Vercel 側でブロックされるわけです。
では、github-actions[bot] がコミットした場合はどうなるでしょうか。
github-actions[bot] は GitHub が提供するシステムボットです。このボットが push したコミットは Vercel のコミット作者チェックを通過し、デプロイがトリガーされます。Vercel 公式ドキュメントにも「Confirm bot commits are properly configured by the git provider.」(出典)という記述があり、ボットコミットを認識する仕組みが存在することが示されています。
:::message この挙動は Vercel によって明示的に文書化されたものではありません。仕様変更により動作しなくなる可能性がある点に注意してください。 :::
実装 — ワークフロー全文
name: Manual Deploy (Vercel)
on:
workflow_dispatch:
inputs:
message:
description: "Commit message (leave blank for default)"
required: false
default: ""
branch:
description: "Target branch (leave blank for default branch)"
required: false
default: ""
jobs:
deploy:
name: Trigger Vercel Deploy
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ inputs.branch || github.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure git as github-actions[bot]
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Create empty commit
run: |
MESSAGE="${{ inputs.message }}"
if [ -z "$MESSAGE" ]; then
MESSAGE="chore: trigger Vercel deploy ($(date -u '+%Y-%m-%d %H:%M UTC'))"
fi
git commit --allow-empty -m "$MESSAGE"
- name: Push
run: git push
各ステップの解説
workflow_dispatch トリガー
手動でワークフローを実行するためのトリガーです。GitHub の Actions タブから「Run workflow」ボタンを押すことで実行できます。ブランチとコミットメッセージをその場で指定できます。

permissions: contents: write
空のコミットをリモートにプッシュするため、リポジトリへの書き込み権限を明示的に付与します。
git の設定
github-actions[bot] のユーザー名とメールアドレス(github-actions[bot]@users.noreply.github.com)を設定します。このメールアドレスが、GitHub 公式ボットとして認識されるための重要なポイントです。
空コミットの作成
git commit --allow-empty で変更のないコミットを作成します。--allow-empty がないと、差分がない場合にコミットが失敗します。コミットメッセージが未入力の場合は、日時を含むデフォルトメッセージが使われます。
プッシュ
secrets.GITHUB_TOKEN は GitHub Actions が自動で提供するトークンです。追加の Secrets 登録は不要です。プッシュが完了すると Vercel の push イベントが発火し、デプロイが開始されます。
動作確認
ワークフロー実行後、Vercel ダッシュボードを確認すると、github-actions[bot] をコミット作者とするデプロイが追加されているはずです。
[スクリーンショット: Vercel ダッシュボードのデプロイ一覧(github-actions[bot] が表示されている)]
Vercel CLI 方式との比較
比較項目 | 空コミット方式(本記事) | Vercel CLI 方式 |
|---|---|---|
必要な Secrets | なし( |
|
Vercel メンバー権限 | 不要 | 不要(オーナーのトークンで代替) |
コミット履歴 | 空コミットが残る | 汚れない |
デプロイのタイミング | 手動トリガーのみ(推奨) | push ごとに自動化できる |
設定の複雑さ | 低い | やや高い |
挙動の文書化 | 非公式(仕様変更の可能性あり) | 公式ドキュメントに記載あり |
どちらを使うべきか
空コミット方式が向くケース
- Vercel の認証情報をリポジトリに置きたくない
- 設定を最小限にしたい個人プロジェクト
- デプロイを自動ではなく、意図的なタイミングで実行したい
Vercel CLI 方式が向くケース
- push のたびに自動でデプロイを走らせたい
- コミット履歴をクリーンに保ちたい
- ビルドステップを GitHub Actions 側でコントロールしたい
- 公式サポートの範囲内で安定して運用したい
どちらの方式も、Vercel の Git 連携がプロジェクトに接続されていることが前提です。目的と優先事項に合わせて使い分けてみてください。
まとめ
github-actions[bot]が空のコミットを push することで、Vercel のデプロイをトリガーできますGITHUB_TOKENは GitHub Actions が自動で提供するため、Secrets への追加登録は不要です- コミット履歴に空コミットが残る点と、非公式の挙動に依存する点がトレードオフです
- Vercel CLI 方式は Secrets の登録が必要な代わりに、公式ドキュメントに記載された安定した方法です
まずはワークフローをコピーして、手動実行から試してみてください。