ClaudeCodeを複数端末で使うときのメモリ・設定同期方法|Mac+Raspberry Pi連携
この記事でわかること
- ClaudeCodeのメモリはどこに保存されているか
- 解決策:~/.claude/ をGitで管理する
- 1. git init と .gitignore の設定
- 2. GitHubにprivateリポジトリを作成してpush
- 3. Raspberry Pi側でclone
- 4. 日常の同期手順
ClaudeCodeを複数端末で使うときのメモリ・設定同期方法|Mac+Raspberry Pi連携
ClaudeCodeのメモリは端末ごとに独立して保存されています。MacとRaspberry Piで同じアカウントを使っていても、それぞれ別のメモリを持っています。この記事では、複数端末間でメモリと設定を同期する方法と、Obsidian・WordPressとの連携まで含めた実践的な構成を紹介します。
ClaudeCodeのメモリはどこに保存されているか
ClaudeCodeのメモリは ~/.claude/projects/*/memory/ にローカルファイルとして保存されています。Anthropicのサーバーには同期されません。
つまり、同じアカウントでログインしていても端末が違えばメモリは共有されないということです。
Mac: ~/.claude/projects/.../memory/MEMORY.md
Raspberry Pi: ~/.claude/projects/.../memory/MEMORY.md(別物)
解決策:~/.claude/ をGitで管理する
~/.claude/ をGitリポジトリにして、GitHubのprivateリポジトリで管理します。
1. git init と .gitignore の設定
cd ~/.claude
git init
セッションログやキャッシュは同期不要なので .gitignore で除外します。
# セッション・キャッシュ系
sessions/
session-env/
backups/
cache/
file-history/
telemetry/
ide/
shell-snapshots/
history.jsonl
.DS_Store
settings.local.json
plugins/marketplaces/
# セッションログ・ツール結果
projects/**/*.jsonl
projects/**/tool-results/
projects/**/subagents/
同期するのはこれだけです:
projects/*/memory/(メモリファイル)settings.json(設定)plugins/installed_plugins.json(プラグインリスト)
2. GitHubにprivateリポジトリを作成してpush
cd ~/.claude
git add .
git commit -m "Initial commit: memory files and settings"
gh repo create claude-config --private
git remote add origin https://github.com/ユーザー名/claude-config.git
git push -u origin main
3. Raspberry Pi側でclone
# 既存の ~/.claude があればバックアップ
mv ~/.claude ~/.claude.bak
# cloneして展開
git clone https://github.com/ユーザー名/claude-config.git ~/.claude
4. 日常の同期手順
Mac側で更新したら:
cd ~/.claude
git add -A
git commit -m "update memory"
git push
Pi側で取り込む:
cd ~/.claude && git pull
ツールもPiにコピーする
メモリを同期しても、スクリプト類がPiにない場合はエラーになります。
scp でまとめてコピーします。
# Macのターミナルで実行
scp -r ~/obsidian-to-wp/ casio@192.168.50.24:~/obsidian-to-wp/
これでPiからもWordPress投稿スクリプトが使えるようになります。
Piから投稿した記事をMacのObsidianに取り込む
Piから投稿した記事はMacのObsidianには自動では入りません。そこでWordPress→Obsidian逆インポートスクリプトを作成します。
wp_to_obsidian.py の仕組み
- WordPress REST APIで全公開記事を取得
- Obsidianのフォルダにある記事のスラッグと照合
- Obsidianにない記事だけをmarkdown形式で保存
#!/usr/bin/env python3
import requests
import html2text
from pathlib import Path
WP_BASE = "https://example.com/wp-json/wp/v2"
WP_USER = "your_user"
WP_PASS = "your_app_password"
AUTH = (WP_USER, WP_PASS)
OBSIDIAN_DIR = Path("/Users/casio/Documents/Obsidian/13_投稿する記事")
h2t = html2text.HTML2Text()
h2t.body_width = 0
def fetch_all_posts():
posts, page = [], 1
while True:
resp = requests.get(f"{WP_BASE}/posts", auth=AUTH,
params={"per_page": 100, "page": page, "status": "publish"})
batch = resp.json()
if not batch: break
posts.extend(batch)
if len(batch) < 100: break
page += 1
return posts
def existing_slugs():
import re
slugs = set()
for f in OBSIDIAN_DIR.glob("*.md"):
text = f.read_text(encoding="utf-8")
m = re.search(r'^slug:\s*"?([^"\n]+)"?', text, re.MULTILINE)
slugs.add(m.group(1).strip() if m else f.stem)
return slugs
def save_post(post):
import html, re
title = html.unescape(post["title"]["rendered"])
slug = post["slug"]
body_md = h2t.handle(post["content"]["rendered"]).strip()
fm = f'---\ntitle: "{title}"\nslug: "{slug}"\ndate: {post["date"][:10]}\nwp_id: {post["id"]}\nwp_url: "{post["link"]}"\n---'
safe = re.sub(r'[\\/:*?"<>|]', '', title)[:80]
(OBSIDIAN_DIR / f"{safe}.md").write_text(f"{fm}\n\n# {title}\n\n{body_md}\n", encoding="utf-8")
posts = fetch_all_posts()
known = existing_slugs()
for post in posts:
if post["slug"] not in known:
save_post(post)
print(f"保存: {post['slug']}")
cronで1時間おきに自動実行
crontab -e
以下を追加:
0 * * * * /Users/casio/obsidian-to-wp/venv/bin/python /Users/casio/obsidian-to-wp/wp_to_obsidian.py >> /Users/casio/obsidian-to-wp/wp_to_obsidian.log 2>&1
これでPiから投稿した記事は最大1時間以内にMacのObsidianに自動で取り込まれます。
構成まとめ
【スマホ → Pi → WordPress】
スマホ(Termius) → SSH → Pi → ClaudeCode → WordPress投稿
【Mac側で自動同期(毎時)】
WordPress → wp_to_obsidian.py → Obsidian(Mac)
【メモリ同期(手動push/pull)】
Mac ~/.claude/ ⇄ GitHub(private) ⇄ Pi ~/.claude/
この構成により、どの端末から投稿してもWordPressとObsidianが完全一致した状態を維持できます。
関連記事
TAG
