TailscaleとrsyncでMac間のClaude Code環境を差分同期すれば、複数PCで同一スキル・設定を共有できます。
- 要点1: Tailscaleインストールだけでポート開放不要のP2P暗号化接続が確立できる
- 要点2: rsyncの差分同期は初回以降80MB程度の転送で完了(全量5GBを毎回送らない)
- 要点3: macOSのSSH権限エラーは
sshd-keygen-wrapperへのフルディスクアクセス付与で解消できる
対象: Mac miniとMacBookの両方でClaude Codeを活用したいエンジニア・AI活用担当者
今日やること: TailscaleをMac mini・MacBookの両方にインストールし、同じアカウントでログインする
この記事の目次
MacBookとMac miniの両方でClaude Codeを使いたい場合、スキルや設定ファイルを手動でコピーするのは現実的ではありません。TailscaleとrsyncでMac間を接続すれば、差分のみを転送して数分で環境を揃えられます。
「せっかくMac miniに構築したカスタムスキルやCLAUDE.mdを、MacBookでも使いたい」という声は多くあります。しかしClaude Codeの実行フォルダには機密情報が含まれるため、GitHubでの管理には落とし穴があります。
この記事では、あるClaude Codeヘビーユーザーが実際に経験したトラブルと解決策をもとに、Tailscale+rsyncによるMac間同期の設定手順を解説します。macOS固有の権限エラーやパス差分問題も含め、つまずきやすいポイントを詳しく説明します。
なぜGitHubよりrsync+Tailscaleが適しているのか
Claude Code環境の同期方法を検討する際、最初に思いつくのがGitHubによるバージョン管理かもしれません。しかし実際のClaude Code実行フォルダを精査すると、GitHubは不適切だとわかります。
GitHubが適さない理由
Claude Codeを本格的に活用するほど、実行フォルダには以下のような機密情報が蓄積されていきます。
| ファイル・フォルダ | 含まれる情報 | リスク |
|---|---|---|
| Google OAuthクライアントシークレット(.json) | OAuth認証情報 | Googleサービスへの不正アクセス |
| GCPサービスアカウントキー(.json) | クラウドリソースのアクセス権限 | Google Drive等の不正操作 |
.claude/settings.local.json |
APIトークン | 有料APIの不正利用 |
| contacts/ | 個人・取引先情報 | 個人情報の流出 |
これらのファイルを除外すれば、「同じ環境を再現する」という目的は果たせません。除外設定が多すぎて、環境の実体をGitHubに置けないのです。
ポイント機密情報の多いClaude Code実行フォルダは、GitHubではなくTailscale+rsyncで管理するのが現実的です。プライベートネットワーク内での転送であれば、機密ファイルをそのまま安全に同期できます。
Tailscale+rsyncのメリット
| 比較軸 | GitHub | Tailscale+rsync |
|---|---|---|
| 機密情報 | 除外が必要(設定漏れのリスクあり) | そのまま転送(プライベートネットワーク) |
| 初期設定 | .gitignoreの慎重な設定が必要 | Tailscaleをインストールするだけ |
| 同期速度 | 差分が多いと遅い | rsyncの差分転送で高速(変更分のみ) |
| バイナリファイル | 不得意 | 問題なし |
| 方向性 | 双方向(コンフリクトのリスクあり) | 一方向(シンプルで安全) |
事前準備:Tailscaleのインストールとネットワーク構成
Tailscaleとは
Tailscaleは、ゼロコンフィグで使えるP2P VPNツールです。Wireguardをベースとした暗号化トンネルをデバイス間に自動構築し、ルーターのポート開放やIPアドレスの固定が不要です。個人・小規模利用は無料で使えます。
複数のMacでClaude Codeを使いたい場合、Mac miniとMacBookの両方にTailscaleをインストールするだけで、安全なプライベートネットワークが完成します。
両MacへのTailscaleインストール手順
Step 1: インストール
Tailscale公式サイトから、Mac miniとMacBook両方にインストールします。
# macOSの場合はbrew経由でもインストール可能brew install tailscale
または、App StoreからTailscaleをインストールする方法も使えます。
Step 2: 同じアカウントでログイン
Mac mini・MacBook両方でTailscaleを起動し、同じGoogleアカウント(またはGitHubアカウント)でログインします。これだけで両機器がTailscaleのプライベートネットワーク(テールネット)に追加されます。
Tailscale IPアドレスの確認方法
同期コマンドで使用するIPアドレスは以下のコマンドで確認できます。
# 現在の接続状態を確認tailscale status
実行結果の例:
100.67.140.4 macbook-air your-account@ macOS -100.65.67.53 mac-mini your-account@ macOS active; direct 192.168.x.x:xxxxx
表示されたTailscale IP(100.x.x.x)をrsyncコマンドで使用します。DHCPで変動するローカルIPアドレスと違い、TailscaleのIPアドレスは固定されるため、毎回確認する必要がありません。
\ Claude Codeの導入、何から始めればいいかわかります /
法人向けClaude Code個別指導の無料相談はこちらSSH鍵認証の設定
Tailscale経由のSSHでは、パスワード認証より鍵認証が推奨されます。一度設定すれば、以降はパスワードなしでrsyncが実行できます。
Mac miniでSSH鍵を生成する
転送元(Mac mini)のターミナルで以下を実行します。
# ed25519形式で鍵を生成(既存の鍵がある場合はスキップ)ssh-keygen -t ed25519 -C "your-email@example.com"
パスフレーズは空のままでよい場合はEnterを連打します(業務環境では適切なパスフレーズの設定を推奨します)。
生成された公開鍵を確認します。
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAA... から始まる1行のテキストが表示されます。これをコピーしておきます。
MacBook Air側のauthorized_keysに登録する
MacBook側のターミナルで以下を実行し、Mac miniの公開鍵を登録します。
# .sshフォルダが存在しない場合は作成mkdir -p ~/.ssh && chmod 700 ~/.ssh# Mac miniの公開鍵を追加(コピーした内容を貼り付ける)echo "ssh-ed25519 AAAA...(ここにMac miniの公開鍵を貼り付け)" >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
MacBook側でリモートログインを有効にする必要があります。
システム設定 → 一般 → 共有 → 「リモートログイン」をオンにし、アクセスを「すべてのユーザー」に設定します。
接続テストと疎通確認
Mac miniから以下のコマンドでSSH接続を確認します。
# MacBook AirのTailscale IPへSSH接続(ユーザー名は各自の環境に合わせる)ssh your-username@100.67.140.4 "echo 接続成功"
接続成功と表示されれば、鍵認証の設定は完了です。
macOSの権限設定(フルディスクアクセス)
ここが最も多くのユーザーがつまずくポイントです。SSH経由のrsyncがDesktopフォルダなどに書き込もうとすると、macOSのセキュリティがブロックすることがあります。
よくあるエラー「Permission denied」の原因
rsyncコマンドを実行した際に以下のようなエラーが出る場合があります。
rsync: [sender] send_files failed to open "/path/to/Desktop/..." (in module): Permission denied (13)
このエラーの原因は、macOSのプライバシー保護機能にあります。SSH経由でログインすると、sshd-keygen-wrapperというプロセスがファイル操作を担当します。このプロセスにDesktopフォルダへのアクセス権限がないとrsyncが失敗します。
フルディスクアクセスをターミナルアプリや/usr/bin/rsyncに付与しても解消しない場合は、このプロセスへの権限付与が必要です。
システム設定でsshd-keygen-wrapperに権限を付与する手順
Step 1: MacBook側で「システム設定」を開く
Step 2: 「プライバシーとセキュリティ」→「フルディスクアクセス」を選択
Step 3: 「+」ボタンをクリックして追加画面を開く
Step 4: Cmd + Shift + Gでパス入力欄を開き、/usr/libexec/sshd-keygen-wrapperと入力してEnter
Step 5: sshd-keygen-wrapperを選択して「開く」
この設定後、SSH経由のrsyncがDesktopフォルダへ正常にアクセスできるようになります。
ポイントターミナルアプリのフルディスクアクセス(MacBook側で操作する場合)も合わせて有効にしておくと、ローカルでの操作にも支障が出ません。
Claude Codeの環境構築や複数PC運用について、具体的な設定方法や自社環境へのカスタマイズは個別にご相談いただけます。
\ 業務自動化のお悩み、プロが30分で整理します /
法人向けClaude Code個別指導の無料相談はこちらrsyncで差分同期するコマンド
権限設定が完了したら、実際の同期コマンドを組み立てます。rsyncは変更されたファイルのみを転送するため、初回以降は非常に高速に完了します。
実際のケースでは、約5GBのフォルダに対して初回同期後の差分転送は約80MB(スピードアップ比44倍)で完了しました。
基本の同期コマンド(Claude Code実行フォルダ)
# Mac mini → MacBook Air へ差分同期(追加・更新のみ)rsync -avz \ -e "ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519" \ --exclude 'node_modules/' \ --exclude '.git/' \ --exclude '.DS_Store' \ --exclude 'moltworker/' \ --exclude '*.json' \ "/Users/riku/Desktop/Claude Code実行フォルダ/" \ "your-username@100.67.140.4:Desktop/Claude Code実行フォルダ/"
オプションの説明:
| オプション | 意味 |
|---|---|
-a |
アーカイブモード(パーミッション・タイムスタンプを保持) |
-v |
詳細表示(どのファイルを転送したか確認できる) |
-z |
転送時に圧縮(ネットワーク帯域を節約) |
-e "ssh ..." |
SSH経由で接続(鍵を明示的に指定) |
--exclude |
同期から除外するパターン |
重要: スペース入りパスについて
Claude Code実行フォルダのようにパスにスペースが含まれる場合は、上記のように引用符で囲みます。シングルクォートではなくダブルクォートを使うと、シェル変数が展開される点に注意してください。
スキルとCLAUDE.mdの同期コマンド
Claude Codeのカスタムスキル(~/.claude/skills/)とグローバル設定(~/.claude/CLAUDE.md)も忘れずに同期します。
# スキルの同期rsync -avz \ -e "ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519" \ ~/.claude/skills/ \ "your-username@100.67.140.4:~/.claude/skills/"# CLAUDE.mdの同期rsync -avz \ -e "ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519" \ ~/.claude/CLAUDE.md \ "your-username@100.67.140.4:~/.claude/CLAUDE.md"
–deleteオプションの使い分け
rsyncには--deleteオプションがあり、送信側に存在しないファイルを受信側から削除します。
| 用途 | コマンド | 注意点 |
|---|---|---|
| 追加・更新のみ(推奨) | --deleteなし |
受信側の独自ファイルが残る |
| 完全一致(マスター同期) | --deleteを追加 |
受信側のファイルが削除される可能性あり |
MacBook側でも独自にファイルを作成することがある場合は、--deleteを外した「追加・更新のみ」モードが安全です。
パス差分の修正(ユーザー名が異なる場合)
MacBookとMac miniのユーザー名が異なる場合(例: kawashimariku と riku)、SKILL.md内にハードコードされたフルパスを修正する必要があります。
修正が必要なファイルの探し方
スキルを同期した後、以下のコマンドで旧ユーザー名が残っているファイルを検索します。
# スキルフォルダ内で旧ユーザー名を検索grep -rl "旧ユーザー名" ~/.claude/skills/
例えばkawashimarikuという旧ユーザー名が残っている場合、以下のように表示されます。
/Users/riku/.claude/skills/nexa-gsc/scripts/gsc_query.py/Users/riku/.claude/skills/nexa-html-slides/SKILL.md/Users/riku/.claude/skills/nexa-media/wp-publish/SKILL.md/Users/riku/.claude/skills/nexa-pptx-generator/SKILL.md
sedコマンドで一括置換する方法
# macOSのsedは -i '' が必要(Linuxと異なる点に注意)find ~/.claude/skills -type f -name "*.md" -o -name "*.py" | \ xargs sed -i '' 's|/Users/kawashimariku/|/Users/riku/|g'
置換後、再度grepで確認して残りがゼロになればOKです。
# 修正されたか確認grep -rl "kawashimariku" ~/.claude/skills/# → 何も表示されなければ完了
なお、Claude Codeそのものについては、Anthropic社が提供するAIコーディングツールです。ターミナル上で対話しながらコードの生成・修正・レビューを行えます。コンテキストを保持したまま会話できるため、スキルと呼ばれる専用の指示ファイルを通じて様々なタスクを自動化できます。(Claude Codeの詳細はこちら →)
\ AI活用の「次の一手」を一緒に考えませんか /
法人向けClaude Code個別指導の無料相談はこちらよくある質問
Q. Tailscaleを使わずに自宅LANだけでrsync同期できますか?
同じネットワーク内(自宅LAN)であれば、Tailscaleなしでもssh ユーザー名@ローカルIPでrsyncが実行できます。ただし外出先からMac miniへアクセスする場合や、IPアドレスが変動する環境では、Tailscaleのほうが安定しています。Tailscaleは個人利用なら無料で使えるため、最初からTailscaleを使うほうがシンプルです。
Q. 毎回コマンドを実行するのが面倒です。定期的に自動同期できますか?
Claude Codeが動く環境であれば、OpenClawのcronジョブとして同期コマンドを定期実行できます。たとえば毎日深夜にMac miniからMacBookへ差分同期するジョブを設定すれば、手動実行が不要になります。(OpenClawのcronジョブについて →)
Q. MacBook AirからMac miniへの逆方向同期はどうすればよいですか?
同期元と同期先を逆にするだけです。ただしMac miniとMacBook両方で独自の変更が発生した場合、「どちらが最新か」の判断が必要になります。rsyncはコンフリクト解決機能を持たないため、基本は「Mac miniをマスター、MacBookをスレーブ」という一方向の運用が管理しやすいです。
まとめ
MacBookとMac miniでClaude Code環境を同期するための手順をまとめます。
- Tailscaleのインストール: 両Macに入れて同じアカウントでログインするだけ。Tailscale IPが固定されるため以降の接続設定が不要
- SSH鍵認証の設定: Mac mini側で鍵生成 → MacBook側のauthorized_keysに登録
- フルディスクアクセスの付与: MacBook側で
/usr/libexec/sshd-keygen-wrapperに権限を付与(Permission deniedエラーの解消) - rsyncの実行:
--deleteなしで「追加・更新のみ」の安全な差分同期 - パス差分の修正: ユーザー名が異なる場合、SKILL.md等のフルパスを一括置換
特にmacOSのフルディスクアクセス問題は、多くのユーザーがつまずくポイントです。ターミナルや/usr/bin/rsyncへの権限付与では解消しないケースがあり、sshd-keygen-wrapperへの権限付与が必要な点は覚えておくと役立ちます。
Claude Codeの導入・活用をサポートします
株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。複数PC環境の構築、カスタムスキルの設計、チームへの展開など、「何から始めればいいかわからない」という段階からご支援いたします。





