Sync shared rules and skills from shared-claude-code repository - detect missing symlinks and create them
shared-claude-codeリポジトリの共通ルール・スキルを現在のプロジェクトに同期する。未取り込みのシンボリックリンクを検出し、ユーザー確認の上で作成する。
.claude/rules/shared/ および .claude/skills/ 配下のシンボリックリンクを探索する
見つかったシンボリックリンクの readlink 結果からshared-claude-codeリポジトリのパスを解決する
../../../shared-claude-code/rules/conventions.md → shared-claude-code のパスを抽出../../shared-claude-code/skills/git-pr-create → shared-claude-code のパスを抽出シンボリックリンクが1つも見つからない場合 → エラーを表示して終了する:
エラー: shared-claude-codeへのシンボリックリンクが見つかりません。
最初のセットアップはREADMEの手順に従って手動で行ってください。
解決したパスに rules/ と ディレクトリが存在することを検証する
skills/rules/ 配下の .md ファイル一覧を取得するskills/ 配下で SKILL.md を含むディレクトリ一覧を取得する.claude/rules/shared/<name>.md にシンボリックリンクが存在しないもの.claude/skills/<name> にシンボリックリンクが存在しないものすべて同期済みの場合 → 以下を表示して終了する:
すべてのルール・スキルは同期済みです。
未取り込みがある場合、以下の形式で表示する:
## 未同期の項目
### ルール
- conventions.md
- security.md
### スキル
- git-branch-cleanup
- git-issue-create
上記の項目を同期しますか?除外したい項目があればお知らせください。
ユーザーの回答に応じて分岐する:
git branch --show-current で現在のブランチを確認するgit status --porcelain で未コミット変更を確認する
変更がある場合 → エラーを表示して終了する:
エラー: mainブランチに未コミットの変更があります。変更をコミットまたはスタッシュしてから再実行してください。
git branch --list chore/sync-claude-rules で同名ブランチの存在を確認する
git checkout -b chore/sync-claude-rules でブランチを作成するgit checkout -b chore/sync-claude-rules-YYYYMMDD(当日日付)でブランチを作成する.claude/rules/shared/ ディレクトリが存在しない場合は mkdir -p で作成するreadlink 結果からプレフィックスを取得し、同じパターンで新しいシンボリックリンクを作成する../../../shared-claude-code/rules/conventions.md なら、新規も ../../../shared-claude-code/rules/<name>.md で作成readlink 結果からプレフィックスを取得し、同じパターンで新しいシンボリックリンクを作成する../../shared-claude-code/skills/git-pr-create なら、新規も ../../shared-claude-code/skills/<name> で作成Step 5で新規スキルが同期された場合のみ実行する。ルールのみの同期時はスキップする。
.claude/skills/README.md が存在するか確認する
skills/<name>/SKILL.md フロントマターから description を取得する| \<name>` | `/<name>` | <description> |` の行を追記するgit add .claude/skills/README.md でステージするdocs/ja-JP/skills/README.md が存在するか確認する
CLAUDE.md にスキル一覧(テーブルやリスト等)が記載されているか確認する
git add CLAUDE.md でステージするCLAUDE.md が存在しない場合、またはスキル一覧が含まれていない場合: スキップshared-claude-codeリポジトリの hooks/shared-hooks.json を読み取る
プロジェクトの .claude/settings.json を読み取る
{} として扱うshared-hooks.json の各hookエントリについて、3つの状態で重複チェックを行う:
settings.json の hooks セクションと同じ形式で、各hookエントリに _id・_description・_detect_by のメタデータフィールドが付与されているmatcher が設定されているエントリ: 同一イベントキー + matcher の既存hookを検索するmatcher がないエントリ(Stopなど): 同一イベントキーの既存hookすべてを対象にするcommand 文字列が _detect_by の正規表現パターンにマッチする場合:
command と共通hookの command を比較する追加対象または変更対象があれば、ユーザーに提示して確認する:
## 未同期の Hooks
### 追加
- block-force-push (PreToolUse/Bash): Block git force push
### 変更
- notify-stop (Stop): macOS notification on task completion
Before: osascript -e 'display notification "...(旧コマンド)..."'
After: REPO=$(basename ...); osascript -e "display notification \"$REPO の作業が完了しました\" ..."
上記の hooks を同期しますか?除外したい項目があればお知らせください。
すべての hooks は同期済みです。 と表示して Step 7 へ進む承認されたhooksを .claude/settings.json に反映する:
_id・_description・_detect_by フィールドを除去するhooks オブジェクトにマージする(既存エントリは上書きしない)command で上書きする.claude/settings.json が存在しない場合 → hooksのみの構造で新規作成するhooks キーが存在しない場合 → 追加するファイルをステージする: git add .claude/settings.json
git add -A や git add . は使わない):
git add .claude/rules/shared/<name>.mdgit add .claude/skills/<name>settings.json はそのまま含まれるgit commit -m "chore: sync shared claude rules and skills" でコミットする同期結果を以下の形式で表示する:
## 同期完了
- ブランチ: <ブランチ名>(新規作成 / 既存)
- コミット: <コミットハッシュ短縮>
- 同期したルール: X件
- <ファイル名1>
- <ファイル名2>
- 同期したスキル: X件
- <スキル名1>
- <スキル名2>
- 同期した hooks: X件
- <hook ID1> (追加)
- <hook ID2> (変更)
- 更新したREADME: <更新ファイル一覧>
`/git-pr-create` でPRを作成できます。
/git-pr-create でPRを作成できます。」を表示する(追加) または (変更) を付記する