あなたはテンプレート同期の担当者です. テンプレートリポジトリから最新の変更を取り込み,必要に応じてプロジェクトのコードを修正してください.
実行環境: bash(Git Bash または Unix シェル)が必要.mktemp, rm -rf, cat, シェル変数展開を使用する.
テンプレート URL: https://github.com/rintoHasegawa/programming-template.git
git status でワーキングツリーがクリーンか確認する.
コミットされていない変更がある場合:
「⚠ コミットされていない変更があります.
先に変更をコミットするか,stash してから再度 /sync-template を実行してください.」
→ ここで処理を中断する.
以下を実行する:
TEMPLATE_URL="https://github.com/rintoHasegawa/programming-template.git" TEMP_DIR=$(mktemp -d) git clone "$TEMPLATE_URL" "$TEMP_DIR" NEW_SHA=$(git -C "$TEMP_DIR" rev-parse HEAD)
.claude/template-sync-sha の有無で処理を分岐する:
ファイルが存在する場合(2 回目以降の同期):
LAST_SHA=$(cat .claude/template-sync-sha)
NEW_SHA == LAST_SHA の場合:
rm -rf "$TEMP_DIR" で一時ディレクトリを削除し,「テンプレートに新しい変更はありません.既に最新です.」と報告して終了する.
NEW_SHA != LAST_SHA の場合:
# A=追加, M=変更, D=削除, R=リネーム の種別付きで取得 CHANGED_ENTRIES=$(git -C "$TEMP_DIR" diff --name-status "$LAST_SHA" HEAD)
で変更されたファイルを種別付きで取得する.
ファイルが存在しない場合(初回同期):
テンプレートの全ファイルを「追加(A)」として対象に含める:
CHANGED_ENTRIES=$(cd "$TEMP_DIR" && find . -type f -not -path "./.git/*" | sed 's|^\./||' | awk -v OFS='\t' '{print "A", $0}')
取り込み対象のファイル一覧を種別ごとに整理してユーザーに提示する:
「テンプレートに以下の変更があります:
取り込みを開始します.」
git checkout -b chore/sync-template でブランチを作成する
追加・変更・リネーム先を反映する:
echo "$CHANGED_ENTRIES" | while IFS=$'\t' read -r status file newfile; do
[ -z "$status" ] && continue
case "$status" in
A|M)
mkdir -p "$(dirname "$file")"
cp "$TEMP_DIR/$file" "$file"
;;
R*)
# file=旧パス, newfile=新パス
mkdir -p "$(dirname "$newfile")"
cp "$TEMP_DIR/$newfile" "$newfile"
;;
esac
done
削除候補(D およびリネーム元)を抽出する:
DELETIONS=$(echo "$CHANGED_ENTRIES" | awk -F'\t' '$1 == "D" {print $2} $1 ~ /^R/ {print $2}')
$DELETIONS が空でない場合,ユーザーに確認を求める:
「以下のファイルはテンプレートから削除されています:
{削除候補一覧}
プロジェクトからも削除してよいですか?(残したいファイルがあれば指定してください)」
ユーザー確認後,対象ファイルを rm で削除する.プロジェクトが独自に残したいファイルは削除対象から除外する.
同期済み SHA を記録し,一時ディレクトリを削除する:
echo "$NEW_SHA" > .claude/template-sync-sha rm -rf "$TEMP_DIR"
コピーされた変更を以下のカテゴリに分類する:
ステップ 6 で「ルール変更」に該当するものがある場合:
影響がない場合:
「ルール変更に伴うコード修正は不要です.」
すべての作業が完了したら,結果を報告する:
「テンプレート同期が完了しました.
{ブランチ名}/commit push でプッシュと PR 作成ができます.」
git diff で確認してユーザーに報告するchore/sync-template ブランチは他の作業ブランチと混ぜず,作成後は速やかにマージすること.複数の作業ブランチで /sync-template を実行すると .claude/template-sync-sha がコンフリクトする.コンフリクト時は新しい(HEAD 側の)SHA を採用すること.