開発メモ
複数プロジェクトでClaude Code設定を共有する方法
結論
Windowsジャンクションを使えば、複数プロジェクトで.claudeディレクトリを共有できる。PowerShellで作成するのが確実。
New-Item -ItemType Junction -Path 'C:\path\to\project\.claude' -Target 'C:\path\to\source\.claude'
背景・課題
あるプロジェクト(mdx-playground)で作成したClaude Codeの設定(commands、skills、rulesなど)を、別のプロジェクト(税理士業務)でも使いたかった。
選択肢として:
- ユーザーレベル(
~/.claude/)に登録する → 全プロジェクトに適用されてしまう - プロジェクトごとにコピーする → 同期が面倒
- シンボリックリンク/ジャンクションで共有する → 今回採用
ジャンクション vs シンボリックリンク
| 項目 | ジャンクション (/J) | シンボリックリンク (/D) |
|---|---|---|
| 管理者権限 | 不要 | 必要 |
| 対象 | ディレクトリのみ | ファイル・ディレクトリ両方 |
| 相対パス | 使えない(絶対パスのみ) | 使える |
| ネットワークドライブ | 使えない | 使える |
ローカル開発ならジャンクションで十分。
試行錯誤
Git Bashからmklinkを使うとパスが壊れる
最初、Git Bashから以下を実行した:
cmd //c "mklink /J .claude \"C:\path\to\source\.claude\""
結果、ターゲットパスが C:\C:\path\to\... のように壊れた。Git Bashのパス変換が原因。
解決策:PowerShellを使う
PowerShellのNew-Itemを使えば問題なく作成できる:
New-Item -ItemType Junction -Path 'C:\path\to\project\.claude' -Target 'C:\path\to\source\.claude'
リンクの確認方法
PowerShellで確認
Get-Item '.claude' | Select-Object Name, Attributes, Target
出力例:
Name Attributes Target
---- ---------- ------
.claude Directory, ReparsePoint {C:\path\to\source\.claude}
ReparsePointがあればジャンクション/シンボリックリンク。
VS Codeでの確認
VS Codeのファイルエクスプローラーはジャンクションを視覚的に区別しない。ターミナルで確認するしかない。

Windowsエクスプローラーでも、ジャンクションには矢印マークがつかないことが多い(ショートカット.lnkとは異なる)。
Git管理の方針
二重管理を許容する
当初は.gitignoreで除外する予定だったが、以下の理由で追跡することにした。
追跡するメリット:
- このプロジェクトで作業中に
.claude/が変更されたら、このリポジトリの履歴で戻せる - いちいち元のリポジトリに移動しなくていい
- Claude Codeが誤って編集した場合もすぐに
git restoreできる
二重管理のデメリット(許容):
- 両方のリポジトリでコミットが必要
- ただし、どうせ作業後にコミットするなら手間は同じ
運用
# 変更を確認
git diff .claude/
# 誤った変更を戻す
git restore .claude/path/to/file.md
# 変更をコミット(このプロジェクトで)
git add .claude/ && git commit -m "Update .claude settings"
# 元のリポジトリでも同様にコミット(必要に応じて)
まとめ
- Windowsジャンクションで
.claudeディレクトリを共有できる - Git Bashからmklinkを使うとパスが壊れる → PowerShellを使う
- リンクの確認は
Get-ItemでReparsePoint属性を見る - Git管理は二重になるが、どちらからでも履歴確認・復元できるメリットがある