「マージしたのに直らない」— デプロイ元と定期実行のブランチが違う罠の検出と対処
GitHub Actions の schedule は常にデフォルトブランチで走る。本番デプロイ元が別ブランチだと、同じスクリプトの版が2つ存在し「マージしてデプロイしたのに毎晩のバッチだけ古いまま」になる。検出コマンド、base の選び方、そして『デプロイ完了は証拠にならない』ことの確かめ方まで。
約3.8万トークンの節約 (API料金換算で約58円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「「マージしたのに直らない」— デプロイ元と定期実行のブランチが違う罠の検出と対処」は、開発プロセスカテゴリのAI指示書(MDファイル)です。GitHub Actions の schedule は常にデフォルトブランチで走る。本番デプロイ元が別ブランチだと、同じスクリプトの版が2つ存在し「マージしてデプロイしたのに毎晩のバッチだけ古いまま」になる。検出コマンド、base の選び方、そして『デプロイ完了は証拠にならない』ことの確かめ方まで。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.8万トークン(API料金換算で約58円)・91%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約3,600トークン
- 節約量
- 約3.8万トークン (約58円)
- 更新日
- 2026-09-12
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/md-f9a34900/raw を読み込んで、この指示書どおりに実装して"
中身
「マージしたのに直らない」— デプロイ元ブランチと定期実行ブランチが違う罠
誰向けか
1つのリポジトリで Web アプリ本体と定期バッチ(GitHub Actions の schedule)の両方を動かしていて、
かつ本番デプロイ元が main 以外のブランチになっているチーム。
症状
バグを直して PR を出し、CI も緑、本番ブランチにマージしてデプロイもした。 なのに毎晩のバッチだけ古い挙動のまま。ログを見ても新しいコードが動いた形跡がない。 「デプロイが反映されていないのでは」と本番を何度も再デプロイして時間を溶かす。
原因(仕様であってバグではない)
GitHub Actions の on: schedule は、常にリポジトリのデフォルトブランチのワークフロー定義で起動する。
さらに actions/checkout@v4 を ref: 無しで書くと、そのデフォルトブランチをチェックアウトする。
つまり実行されるスクリプトの実体は「デフォルトブランチ版」。
本番デプロイ元が別ブランチ(例: release、prod、cost-opt など)だと、同じファイルの中身が2つ存在し、
アプリは片方、定期バッチはもう片方を使うという状態になる。
ブランチが長く分岐しているほど中身の差は開く。実測例では、片方だけに167コミット・もう片方だけに201コミットあり、 問題のスクリプトはデフォルトブランチ側の方が新しかった(=本番デプロイ元の方が古い)。 この状態で「本番ブランチを土台に」直すと、古い版への変更を作ったうえに定期バッチには一切効かないという二重の空振りになる。
検出手順
1. 定期実行がどのブランチで走っているかを確認する
gh run list --workflow=<ワークフロー名>.yml --limit 3 \
--json headBranch,status,conclusion,createdAt,databaseId \
-q '.[] | "\(.createdAt) \(.headBranch) \(.status)/\(.conclusion) id=\(.databaseId)"'
headBranch がデフォルトブランチになっていれば、この罠の条件を満たす。
2. デフォルトブランチと本番デプロイ元を確認する
gh repo view --json defaultBranchRef -q .defaultBranchRef.name
3. 触ろうとしているファイルが2ブランチで食い違っていないか調べる(着手前に必ず)
# 分岐の大きさ
git rev-list --count origin/<デフォルト>..origin/<デプロイ元>
git rev-list --count origin/<デプロイ元>..origin/<デフォルト>
# そのファイルの最終更新がどちらが新しいか
git log -1 --format="%ad %h %s" --date=short origin/<デフォルト> -- <パス>
git log -1 --format="%ad %h %s" --date=short origin/<デプロイ元> -- <パス>
# 中身の差
git diff origin/<デフォルト> origin/<デプロイ元> -- <パス> --stat
4. そもそもその列/機能に触っているのはどちらの版かを確かめる
git grep -n "<関数名や列名>" origin/<デフォルト> -- scripts src
git grep -n "<関数名や列名>" origin/<デプロイ元> -- scripts src
片方で 0 件なら、その処理は片方のブランチにしか存在しない。 「本番で動いているはず」という思い込みが、ここで崩れる。
対処のルール(これだけ覚える)
| 触るもの | base にすべきブランチ |
|---|---|
.github/workflows/ 配下 | デフォルトブランチ |
定期バッチが実行するスクリプト(scripts/ 等) | デフォルトブランチ |
| Web アプリ本体・API・アプリ内 cron ハンドラ | 本番デプロイ元ブランチ |
着手前に「このファイルは誰が実行するのか」を1回だけ問う。schedule から実行されるなら base はデフォルトブランチ。
直ったことの確かめ方(デプロイ完了は証拠にならない)
新コードにしか存在しないログ行を1本仕込み、実行ログにそれが出たことを確認する。
console.log(`結果: 更新=${updated}, 無効化=${deactivated}, <新機能名>: ${newCount}件`);
gh run view <run-id> --log | grep -iE "<新機能名>|結果:"
この行が出ていれば、その実行が新コードだったと断定できる。 「マージした」「デプロイした」「CI が緑だった」はいずれも “定期実行が新コードを使った”ことの証拠にならない。
応用: 逆方向の事故を先に防ぐ
片方のブランチにしかない「上書き処理」がある場合、将来ブランチを揃えた瞬間にそれが有効化される。
例えば「DB の値をシートの値で無条件に上書きする同期」がデプロイ元ブランチにだけ存在するなら、
デフォルトブランチへ寄せた瞬間に手で直したデータが元に戻る。
ブランチを統合する前に、git diff で上書き系の処理が増えないかを必ず見る。
根本対処
- 本番デプロイ元をデフォルトブランチに一致させる(最善)
- できないなら、ワークフローに
ref:を明示して意図を固定する
この1行があるだけで、読む人が「どちらの版が動くのか」で迷わなくなる- uses: actions/checkout@v4 with: ref: <本番ブランチ>
よくある質問
+「「マージしたのに直らない」— デプロイ元と定期実行のブランチが違う罠の検出と対処」とは何ですか?
GitHub Actions の schedule は常にデフォルトブランチで走る。本番デプロイ元が別ブランチだと、同じスクリプトの版が2つ存在し「マージしてデプロイしたのに毎晩のバッチだけ古いまま」になる。検出コマンド、base の選び方、そして『デプロイ完了は証拠にならない』ことの確かめ方まで。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約3,600トークンで済みます。差し引き約3.8万トークン(API料金換算で約58円)・91%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
夜間ジョブ異常を通知で終わらせず自動修復→AI修理PR→人へ引き渡す閉ループ
監視の『検知して通知』の後段に、決定的Playbook→AIコーダーの隔離worktree修理PR→持ち越し→人への3要素引き渡し、を足す実装指示書。argvで指示を渡すな等の実測の落とし穴つき
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア