Vercel plugin×Codex CLIでAIデプロイ自動化

「Vercel pluginとCodex CLIを触ってみたいけど、GitHub Actionsまでつなぐと急に難しくなる」と感じている人に向けて書きました。この記事を読むと、deployment:falseの意味からJST cronの実装、事故を減らす運用ルールまで一気に整理できます。僕は福祉事業のIT全般を担当しつつ、複業でAI×SaaS開発をしているので、非ITのチームでも回る形に落とし込んで解説していきます。

こんな方におすすめ

  • VercelとGitHub Actionsの役割分担が曖昧なまま運用している
  • Codex CLIを使った自動レビューや自動修正をデプロイに組み込みたい
  • cronのUTC/JST変換や、実行漏れで毎回ハマってしまう
  • 手動デプロイから抜けたいけど、品質事故は増やしたくない

この記事でわかること

  • deployment:false設計の正しい設定名と使いどころ
  • Vercel plugin+Codex CLI+GitHub Actionsの最短構成
  • JST cronを安定運用するための実装ポイント
  • 本番事故を減らす監視指標と運用テンプレート

公開前確認(2026年5月時点):Vercel pluginはOpenAI Codex/Codex CLI対応が公式changelogで確認できます。VercelのGit自動デプロイ停止は git.deploymentEnabled: false、GitHub Actions側の環境デプロイ抑制は environment.deployment: false と、似た名前でも別設定なので混同しないようにしてください。

僕は福祉事業のIT全般を担当しながら、フリーランスでAI×SaaS開発や業務効率化の支援をしています。現場で「エンジニア語を非ITの言葉に翻訳する」役割をよく担うので、その視点で実装と運用をまとめます。

Vercel plugin×Codex CLI×GitHub Actionsの全体像

2026年3月17日に、Vercelはコーディングエージェント向けVercel pluginを公開しました。さらに2026年3月26日には、OpenAI CodexとCodex CLI対応が追加されています。つまり今は、Codex CLIを使った開発フローとVercel運用を同じレーンに載せやすい時期です。

設計のイメージとしては、「AIが考える層」と「デプロイを実行する層」を分けると安定します。自動化の成功率は、役割分担を先に決めるだけで大きく上がります。ここを曖昧にすると、AIが便利なのに運用はむしろ不安定になります。

  • 知識レイヤー — Vercel pluginで環境知識を読み込む
  • 実行レイヤーopenai/codex-actionでCodex CLIを安全に実行する
  • 配信レイヤーvercel buildvercel deploy --prebuilt で本番反映する

Vercel公式の説明では、plugin経由で39以上のプラットフォームスキルと3つの専門エージェントが使えます。GitHub Actions側はCodex Actionがworkspace-write/read-onlyなどの実行モードを持っているので、レビュー中心か修正まで許可するかをジョブ単位で制御できます。つまり「AIを入れる」ではなく、「AIの権限を設計する」ということです。

GitHub Actions deployment:false設計の核心

まず用語を揃えます。現場では「deployment:falseにする」と言いがちですが、Vercel設定の正確なキーはgit.deploymentEnabled: falseです。ここをfalseにすると、Git pushだけで勝手にデプロイされる流れを止められます。デプロイ責任をGitHub Actionsに集約したいときは、ここが起点です。

方式 速度 事故リスク 向いているチーム
Vercel標準のGit自動デプロイ 最速 小規模・試作中心
git.deploymentEnabled: false + Actions 品質ゲート重視
Actions + --prod --skip-domain 段階公開 最小 本番影響を厳密に抑えたい

設計時の注意点

  • PreviewとProductionを分離 — 1本のworkflowに詰め込まず、失敗範囲を小さくします
  • 古い設定を使わないgithub.enabled は非推奨で、git.deploymentEnabled が推奨です
  • 段階公開を選べるようにする--skip-domainで即時切替を防げます

「とりあえず自動化」より「どこで止められるか」まで決めるほうが実運用で助かります。特に非ITメンバーが関わるチームだと、意図しない公開が一番説明コストを増やします。だから最初にdeploymentEnabledを整理して、公開の最終トリガーをGitHub Actions側に寄せるのがおすすめです。

実践手順:JST cronでAIデプロイを自動化する

ここからは、今日そのまま試せる最小構成です。Vercel公式もGitHub Actionsでvercel pullvercel buildvercel deploy --prebuiltの流れを案内しています。加えて、GitHub公式ではscheduleの最短間隔が5分、デフォルトがUTC、必要に応じてtimezone指定が可能とされています。

  1. Git自動デプロイを停止git.deploymentEnabled: false を設定
  2. Codex Actionで差分チェック — まずはread-onlyで開始
  3. Vercel CLIでビルド/配信--prebuiltでビルド責務をCIへ集約
  4. JST cronを設定timezone: Asia/Tokyo またはUTC換算で指定
  5. 同時実行を止めるconcurrency.cancel-in-progress: true を設定
{
  "$schema": "https://openapi.vercel.sh/vercel.json",
  "git": {
    "deploymentEnabled": false
  }
}
name: ai-deploy
on:
  workflow_dispatch:
  schedule:
    - cron: '3 12 * * 1-5'
      timezone: 'Asia/Tokyo'

concurrency:
  group: ai-deploy-${{ github.ref }}
  cancel-in-progress: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5

      - name: Run Codex check
        uses: openai/codex-action@v1
        with:
        openai-api-key: ${{ secrets.OPENAI_API_KEY }}
        prompt: "変更差分を確認し、デプロイ前チェック項目を短く出力してください。"
        sandbox: read-only
        safety-strategy: drop-sudo

      - name: Install Vercel CLI
        run: npm install --global vercel@latest

      - name: Pull env
        run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}

      - name: Build
        run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}

      - name: Deploy (staged)
        run: vercel deploy --prebuilt --prod --skip-domain --token=${{ secrets.VERCEL_TOKEN }} > deployment-url.txt

      - name: Print URL
        run: cat deployment-url.txt

補足として、GitHub公式には「毎時ちょうどは混雑しやすく遅延やドロップが起きることがある」とあります。なので0分を避けて3分7分にずらすのが現実的です。この細かい調整だけで、定時実行の体感安定度はかなり変わります。実装途中で詰まったら、まず直近3回のrun時刻・失敗率・Vercel deployment URLを表にして、cron起因かビルド起因かを分けて確認してください。

運用で詰まりやすいポイントと回避ルール

自動化は作って終わりではありません。運用でハマる場所はほぼ決まっているので、最初からルール化しておくと楽です。特にGitHubのscheduleは「default branchのみ実行」「公開リポジトリは60日活動なしで無効化」の条件があるので、知らないまま放置すると急に止まります。

  • default branch限定 — 本番workflowはmainに配置してworkflow_dispatchも併用します
  • 60日無活動停止 — 月1回の手動実行か定期コミットで死活監視します
  • 毎時0分の混雑 — cronを3,7,13分などにずらします
  • 権限過多のまま運用 — Codex Actionはread-onlyから始めて段階的に拡張します
監視項目 通常目安 警戒ライン 初動
cron実行遅延 0〜3分 10分超 実行時刻を毎時0分からずらす
デプロイ失敗率(週) 0〜5% 15%超 直近3runのログ差分を比較
手動介入回数(週) 0〜1回 3回以上 workflow分割と権限見直し
非ITチーム向けに伝えるときは「異世界転生」の考え方が使いやすいです。つまり、ITの細かい仕組みをそのまま見せるより、「毎週同じ確認を自動で肩代わりする仕組みです」と翻訳したほうが、運用の合意が早く進みます。

技術より先に運用ルールを決めると、後からの修正コストが下がります。CI/CD整備では、誰が承認し、どのログを見て、どの条件なら本番aliasを付けるかまで先に決めておくのが安全です。

手動デプロイを続けた先に起きやすい現実

deployment:false設計やcron運用を知らないままだと、担当者依存のリリースが残り続ける可能性があります。すると、担当が不在の日に公開が止まったり、確認漏れで本番に反映してしまったりします。これは「誰かの努力不足」ではなく、仕組み不足で起きます。だからこそ、早めに自動化へ寄せるだけで、チームの心理的コストまで下げられますよね。

この記事を書いている理由

僕自身、SESから人材育成、そして福祉領域のIT担当へ移ってきて、「技術をわかる人だけが得する構造」を何度も見てきました。業務効率化ツールで月80時間分の工数を削減した経験や、550名以上のキャリア面談をした経験から、結局いちばん効率が出るのは“わかる仕組みを先に作ること”だと感じています。だから今回も、難しい話を実装まで落として共有したかったんです。

次のアクション

まずはgit.deploymentEnabled: falseを設定し、workflow_dispatchで1回だけ手動実行してみてください。動いたらcronを足す順番で進めると安全です。最後に、deployment URL、承認者、alias付与条件をリリースメモに残してください。

今日からできるアクション

  • vercel.jsongit.deploymentEnabled: falseを追加する
  • GitHub Actionsにworkflow_dispatchだけ先に作る
  • 安定したらJST cron(毎時0分以外)を追加する