• #claude-code
  • #windows
  • #git
  • #junction
開発メモ

複数プロジェクトで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-ItemReparsePoint属性を見る
  • Git管理は二重になるが、どちらからでも履歴確認・復元できるメリットがある