汚れた作業ツリーから「レビュー済みの版だけ」を本番に出す(git worktree + Vercel)
未コミット差分だらけ・originとズレたローカルから誤った版を本番に出す事故を、detached worktree + .vercelコピー + 本番URLへの実描画検証で塞ぐ手順
約3.6万トークンの節約 (API料金換算で約54円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「汚れた作業ツリーから「レビュー済みの版だけ」を本番に出す(git worktree + Vercel)」は、開発プロセスカテゴリのAI指示書(MDファイル)です。未コミット差分だらけ・originとズレたローカルから誤った版を本番に出す事故を、detached worktree + .vercelコピー + 本番URLへの実描画検証で塞ぐ手順この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.6万トークン(API料金換算で約54円)・86%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約6,000トークン
- 節約量
- 約3.6万トークン (約54円)
- 更新日
- 2026-09-03
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/git-worktree-vercel/raw を読み込んで、この指示書どおりに実装して"
中身
汚れた作業ツリーから「レビュー済みの版だけ」を本番に出す(git worktree + Vercel)
誰のための指示書か
長く動いている開発ツリーは、たいてい次の状態になっている。
- 作業ディレクトリに未コミットの変更が何十ファイルも残っている(別の作業・別の担当・別の AI セッションのもの)
- ローカルのブランチが origin より ahead でも behind でもある(push していないコミットがある一方、 レビュー済みでマージされた変更をまだ pull していない)
この状態で vercel --prod を打つと、2つの事故が同時に起きる。
- 出したい変更が出ない(behind の分=マージ済みの PR がローカルに無い)
- 出してはいけない物が出る(未コミットの実験コード、他人の書きかけ、
.envの残骸)
vercel は「今チェックアウトされている作業ツリーの中身」をアップロードする。
git のブランチ名や、GitHub 側のマージ状況は一切見ていない。ここが誤解の中心。
この指示書は、作業ツリーを一切触らずに「origin の、レビュー済みの、その 1 コミット」だけを本番へ出す型を渡す。
前提
- git リポジトリ(
originにリモートがある) - Vercel CLI がログイン済み(
vercel --versionが通る) - リポジトリ直下に
.vercel/project.jsonがある(=vercel link済み) - 本番に出すブランチ名を
<PROD_BRANCH>とする(mainとは限らない。プロジェクトによる)
手順
1. まず「ローカルと origin がどれだけズレているか」を数字で見る
git fetch origin
git rev-list --left-right --count origin/<PROD_BRANCH>...HEAD
# 出力例: 8 2 → 左=origin にしか無い数, 右=ローカルにしか無い数
右が 0 でない限り、ローカルの HEAD を本番に出してはいけない。 そのコミットは誰のレビューも通っていない。
git log --oneline HEAD..origin/<PROD_BRANCH> # 出したい変更がここに居るか確認する
git log --oneline origin/<PROD_BRANCH>..HEAD # 出したくない物がここに居る
2. 汚れ具合を見る(触らない・コミットしない)
git status --short
自分が書いたのでない差分は絶対にコミットしない。 「デプロイのために邪魔だから」で他人の作業を巻き込むのが一番多い事故。 以下の手順は、この差分を残したまま安全に本番へ出せる。
3. clean worktree を切る
WT=<一時ディレクトリ>/deploy-$(date +%s)
git worktree add --detach "$WT" origin/<PROD_BRANCH>
--detachにするのは、ブランチを奪わないため。共有ツリーで他の作業が動いていても衝突しない。git checkoutは使わない。作業ツリーのブランチを切り替えると、そこで作業中の人・プロセスが壊れる。
4. .vercel/ をコピーする(これを飛ばすと新規プロジェクトが作られる)
cp -r .vercel "$WT/.vercel"
.vercel/ は .gitignore に入っているので worktree には存在しない。
無いまま vercel --prod を打つと、CLI は「未リンクの新しいディレクトリ」と判断し、
別の Vercel プロジェクトを新規作成してそこへデプロイする。本番は更新されないのに、
出力は成功に見える。ここは静かに失敗する典型。
5. デプロイして、出力の 2 行を必ず読む
cd "$WT" && vercel --prod --yes
読むのは次の 2 行。「Success」だけ見て終わらせない。
▲ Production https://<project>-<hash>-<team>.vercel.app… デプロイ先のプロジェクトが意図した物か▲ Aliased https://<本番ドメイン>… 本番ドメインに実際に張り替わったか
Alias 行が出ていなければ、本番ドメインは古い版のままである。
6. 本番に切り替わったことを、デプロイ結果とは別の情報源で確認する
vercel ls --prod --yes
一番上の Age が「たった今」になっていること、その 1 つ下が以前の版の日付であることを見る。 「前の本番が何日前だったか」を併せて記録すると、後から「本当に出たのか」を疑わずに済む。
7. 実描画で検証する(HTTP ステータスで済ませない)
ログインが要るアプリでは、存在しないルートも存在するルートも等しく /login へ 307 する。
つまり curl -o /dev/null -w "%{http_code}" では新機能が出たかどうかを判定できない。
「404 じゃないから出ている」は誤り。
E2E(Playwright 等)を本番 URL に対して走らせるのが最短で確実。
# baseURL の既定が本番 URL になっているかを先に確認する
grep -n "BASE_URL" playwright.config.ts
grep -n "E2E_BASE_URL" .env.local || echo "未設定 → 既定(本番)に当たる"
npx playwright test <新機能の spec>
- ローカルの
.envに baseURL の上書きが無いことを必ず確認する。 確認せずに走らせて全部 green になり、 実は localhost を見ていた、が最も多い偽の合格。 - 検証は読み取り+プレビューまでにとどめ、本番データへの書き込みを伴う spec は流さない。
8. 後片付け
cd <元のリポジトリ> && git worktree remove --force "$WT"
git worktree list # 消えたことを確認
検証のために元のツリーへ一時的にファイルをコピーしたなら、それも消す。 共有ツリーに未追跡ファイルを置き去りにすると、次に作業する人が自分の物と誤認してコミットする。
チェックリスト(この 6 つが揃って初めて「本番に出た」と言える)
-
git rev-list --left-right --countを実際に見た(ローカル HEAD を出していない) - worktree の HEAD が、出したい PR のマージコミットである
-
.vercel/をコピーしてからデプロイした - 出力に
Aliased <本番ドメイン>が出ている -
vercel ls --prodの最上段が今の時刻で、その下が旧版の日付である - 本番 URL に対する実描画テストが green(ステータスコードだけで判断していない)
よくある失敗と、その正体
| 症状 | 正体 |
|---|---|
| デプロイは成功するのに本番が変わらない | .vercel/ が無く、別プロジェクトへ出ている |
| 出したはずの機能が本番に無い | ローカルが origin より behind のままデプロイした |
| 本番に見覚えのないコードが混ざる | 未コミットの作業ツリーごとアップロードされた |
curl は 200 なのに機能が無い | 認証ゲートが全ルートを同じ応答にしている |
| E2E が全部 green なのに本番は古い | baseURL がローカルを向いていた |
この型が効く条件
- 「本番ブランチ =
main」でないプロジェクトほど効く(CLI デプロイ運用は特に) - 1 つのリポジトリを複数の担当・複数の AI セッションが同時に触っている環境
- CI が緑でも本番は別経路で更新される構成(=マージ=本番反映、が成立しない構成)
よくある質問
+「汚れた作業ツリーから「レビュー済みの版だけ」を本番に出す(git worktree + Vercel)」とは何ですか?
未コミット差分だらけ・originとズレたローカルから誤った版を本番に出す事故を、detached worktree + .vercelコピー + 本番URLへの実描画検証で塞ぐ手順
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約6,000トークンで済みます。差し引き約3.6万トークン(API料金換算で約54円)・86%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
「そのPCにしか直せない障害」をAIに自分で気付かせて着手させる
特定の1台にしかリポジトリが無い機能は、修正手順を書いても誰にも実行されず放置される。SessionStart hook で当該PCのAIだけに指示を出し、完了後は指示書へ状態を書き戻して再実装事故を防ぐ型。走査の時間予算とセッション跨ぎの再開、メール一致だけの自動承認がなりすまされる理由と署名キー方式、状態問い合わせAPI、鍵の自動配布、no-op通知の抑止まで、実際に94件の滞留を解消した実例に基づく手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア