はじめに
私はClaude Codeの~/.claude/CLAUDE.mdやスキル(~/.claude/skills)などをdotfilesリポジトリで管理しています。
しかし、Claude Codeに作業の振り返りからCLAUDE.mdやスキルを自己改善させていると、ホーム側のファイルが頻繁に書き換わり、dotfilesリポジトリとの差分がどんどん溜まっていって、同期が面倒です。
そこで、~/.claude/CLAUDE.mdと~/.claude/skillsをdotfilesリポジトリへ定期的にpushする仕組みをつくっていたので、紹介します。
仕組み
やっていることは次の2つだけです。
- ホーム側の
CLAUDE.mdとスキルをdotfilesリポジトリへ取り込み、コミット・pushするスクリプトをつくる - そのスクリプトを定期実行する(私はMacなので、launchdを使っている)
同期スクリプト
#!/usr/bin/env bash
set -exuo pipefail
dotfiles_dir="${HOME}/dotfiles" # dotfilesリポジトリのパス
cd "${dotfiles_dir}"
git switch main
git pull
# ホーム側のファイルをdotfilesリポジトリへ取り込む
cp ~/.claude/CLAUDE.md .claude/CLAUDE.md
rsync -a --delete ~/.claude/skills/ .claude/skills/
git add .claude/CLAUDE.md .claude/skills
if git diff --cached --quiet; then
echo 'No changes to commit'
exit 0
fi
git commit -m "${1:-Update claude config}"
git push
取り込む対象は、dotfilesの管理方法に合わせる必要があるので注意です。(例えば、APMなどを使ってスキルを追加している場合は、自分で管理したい対象のみを同期するようにしてください)
定期実行する
好きなタイミングで定期実行をするようにします。
私は1時間おきにスクリプトを自動で走らせるようにし、実行時のログをファイルに保存するようにしています。
launchdの設定ファイルはClaude Codeに書かせるのが楽で良いです。
注意点
Claude Codeが書き換えた内容がmainにpushされるので、意図しない情報がpushされる恐れがあります。
リポジトリをプライベートにするなどで、万が一pushされても外部に公開されないようにしておくのがおすすめです。
