Routine Labo — Operations

端末間同期 運用リファレンス

MacBook Pro(母艦)/ MacBook Air / Mac mini の3台で、works をズレなく回すための運用手順。

~/Downloads/works ⇄ github.com/senao-routine/works(private / main)
THE GOLDEN RULE

始める前に pull、離れる前に push。同じフォルダを2台で同時に開かない。

この2つを守っている限り、3台は常に一致します。今まで起きた事故は、ほぼ全て「片方を push し忘れたまま、もう片方で作業を始めた」ことが原因です。

01日々の3コマンド

どのMacでも同じ。これだけ覚えれば足ります。

# ① 作業を始める前 — 相手Macの変更を取り込む
git pull --rebase origin main

# ② 作業したら — 区切りごとに保存
git add -A
git commit -m "何をやったか一言"

# ③ そのMacを離れる前に必ず — 相手Macへ送る
git push origin main

--rebase を付けるのがポイントです。付けないとマージコミットが挟まって履歴が読みにくくなります。端末ごとに一度 git config pull.rebase true を実行しておけば、以後は git pull だけで自動的に rebase になります。

02hook が自動でやる範囲と、唯一の穴

Claude Code で作業している間は、works の auto-sync hook が3方向で肩代わりします。

タイミングやること効かない条件
セッション開始 git pull --ff-only 未コミット変更やローカル未pushコミットがあると何もしない(分岐時のみ警告を出す)
毎ターン終了 未pushコミットを push コミットはしてくれない
セッション終了 未コミット変更を auto commit + push
THE ONE GAP
作業中に作ったファイルは、セッションを閉じるまでコミットされない。

つまり別のMacへ移る前に、Claude Code のセッションを一度終了する(=SessionEnd で自動 commit+push される)か、手動でコミットする必要があります。これを忘れて向こうで作業を始めると、両方に変更が溜まって分岐します。

また、普通のターミナルだけで作業した日は hook は一切動きません。その場合は 01 の3コマンドを自分で回してください。

03台を移るときの手順

「去る側」で確定させてから「行く先」で取り込む。この順番を崩さない。

去る側のMac

セッションを閉じれば hook が自動 commit+push。不安なら手動で確定させる。

git status
git add -A
git commit -m "..."
git push origin main

行く先のMac

始める前にこれだけ。git status が clean なら pull だけでよい。

git pull --rebase origin main

行く先のMacに未保存の変更が残っていて、それを捨てたくないときは退避してから取り込みます。

git stash
git pull --rebase origin main
git stash pop

04~/.claude の共通設定は「一方向」

works と違い対等ではありません。ここが最も混同しやすい部分です。

母艦(MacBook Pro) ──▶ Air / mini 正本は母艦の ~/.claude だけ。Air・mini は受け取る側です。

母艦で設定を変えたとき(配る側)

# ~/.claude/CLAUDE.md・グローバルコマンド・エージェントを変更したら必ず
bash "Claude設定同期/pull-from-home.sh"
git add -A && git commit -m "claude共通設定を更新" && git push

Air / mini(受け取る側)

git pull --rebase origin main
bash "Claude設定同期/apply.sh"
# apply.sh --link にするとシンボリックリンク版=以後 git pull だけで即反映

Air や mini で ~/.claude を直接編集しても、次の apply.sh で消えます。変更は必ず母艦で行ってください。なお settings.json は APIキーを含むため配布対象外で、各Mac個別設定のままです。

05こういうとき(トラブル別)

慌てず、症状から引く。

症状対処
push が rejected
(相手が先に push 済み)
git pull --rebase origin main してから git push origin main
pull が CONFLICT で止まった競合ファイルを開いて残す内容に直す → git add <ファイル>git rebase --continue
rebase をやり直したいgit rebase --abort で一旦元に戻す
「mainが分岐しています」の警告が出た両方に未pushコミットがある状態。git pull --rebase origin main で解消
ローカルを全部捨てて相手に合わせたいgit fetch origin && git reset --hard origin/main(ローカル変更は消えるので注意)
どっちが新しいか分からない各Macで git log --oneline -5 を見比べる/git fetch && git status

06git で流れない3レーン

「3台が完全一致」= git + Drive + 秘密情報 の3点セット。日常で意識するのは①だけで十分です。

レーン中身同期の担い手
① gitコード・スキル・ドキュメント(リポジトリ全部)01の3コマンド/auto-sync hook
② メディア収録動画・完成動画・画像Google Drive(works 内は symlink で参照)
③ 秘密・設定APIキー・トークン・~/.claude 共通設定移行キット install.shapply.sh

git に乗らないもの(新しいMacで別途用意が必要)

07新しいMacの初回セットアップ

1回きり。上から順に流すだけで母艦と同じ環境になります。

# 1) 取得(private リポなので先に gh auth login)
git clone https://github.com/senao-routine/works.git ~/Downloads/works
cd ~/Downloads/works
git config pull.rebase true

# 2) 秘密情報を配置(AirDrop / USB で受け取った移行キット)
bash ~/Downloads/移行キット_秘密情報_*/install.sh

# 3) Claude のグローバル設定を母艦と同じに
bash "Claude設定同期/apply.sh"

# 4) 配線を全数チェック(緑になれば完了)
bash .claude/verify-works.sh

二重処理を防ぐ設計:トレンド収集・維持率・コスト集計などの定常ループは母艦だけで回れば十分です。install.sh が二次機に ~/.claude/.works-secondary という印を置き、この印がある機では loop-catchup が即終了します。母艦(印なし)の挙動は一切変わりません。

前提ツール: brew install git gh node python@3.12 ffmpegnpm i -g @openai/codex。macOS のユーザー名と Drive アカウントは母艦とそろえてください(works 内の Drive symlink が絶対パスのため)。