diff --git a/.claude/commands/sync-template.md b/.claude/commands/sync-template.md index 2f0cac8..831ad86 100644 --- a/.claude/commands/sync-template.md +++ b/.claude/commands/sync-template.md @@ -6,81 +6,85 @@ --- あなたはテンプレート同期の担当者です. -テンプレートリポジトリ(`template` リモート)から最新の変更を取り込み,必要に応じてプロジェクトのコードを修正してください. +テンプレートリポジトリから最新の変更を取り込み,必要に応じてプロジェクトのコードを修正してください. + +テンプレート URL: `https://github.com/rintoHasegawa/programming-template.git` ## ステップ 1: 事前確認 -以下を確認する: +`git status` でワーキングツリーがクリーンか確認する. -1. `git remote -v` で `template` リモートが登録されているか確認する -2. `git status` でワーキングツリーがクリーンか確認する - -**`template` リモートが未登録の場合:** - -「⚠ `template` リモートが登録されていません. -GUIDE_01 の環境構築手順に従って `template` リモートを登録してください. -登録後,再度 `/sync-template` を実行してください.」 - -→ ここで処理を中断する. - -**ワーキングツリーにコミットされていない変更がある場合:** +**コミットされていない変更がある場合:** 「⚠ コミットされていない変更があります. 先に変更をコミットするか,stash してから再度 `/sync-template` を実行してください.」 → ここで処理を中断する. -## ステップ 2: テンプレートの変更を取り込む +## ステップ 2: テンプレートを一時ディレクトリにクローン 以下を実行する: -1. `git fetch template` で最新の変更を取得する -2. `git log HEAD..template/main --oneline` で未取り込みの変更を確認する +```bash +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) +``` -**変更がない場合:** +## ステップ 3: 変更ファイルの特定 -「テンプレートに新しい変更はありません.既に最新です.」 +`.claude/template-sync-sha` の有無で処理を分岐する: -→ ここで処理を終了する. +**ファイルが存在する場合(2 回目以降の同期):** -**変更がある場合:** +```bash +LAST_SHA=$(cat .claude/template-sync-sha) +``` -取り込み予定の変更一覧をユーザーに表示する: +- `NEW_SHA == LAST_SHA` の場合: + `rm -rf "$TEMP_DIR"` で一時ディレクトリを削除し,「テンプレートに新しい変更はありません.既に最新です.」と報告して終了する. + +- `NEW_SHA != LAST_SHA` の場合: + ```bash + git -C "$TEMP_DIR" diff --name-only "$LAST_SHA" HEAD + ``` + で変更されたファイル一覧を取得する. + +**ファイルが存在しない場合(初回同期):** + +テンプレートの全ファイルを対象とする. + +## ステップ 4: 変更一覧をユーザーに提示 + +取り込み対象のファイル一覧と,各ファイルの変更概要をユーザーに提示する: 「**テンプレートに以下の変更があります:** -{変更一覧(コミットログ)} +{ファイル一覧} 取り込みを開始します.」 -## ステップ 3: ブランチ作成とマージ +## ステップ 5: ブランチ作成とファイルコピー 1. `git checkout -b chore/sync-template` でブランチを作成する - 既に同名のブランチが存在する場合は削除してから作り直す -2. `git merge template/main --no-edit` でマージを実行する - - 初回(共通の祖先がない場合)は `--allow-unrelated-histories` を付与する +2. 対象ファイルをテンプレートからプロジェクトにコピーする(既存ファイルは上書き) +3. `echo "$NEW_SHA" > .claude/template-sync-sha` で同期済み SHA を記録する +4. `rm -rf "$TEMP_DIR"` で一時ディレクトリを削除する -**コンフリクトが発生した場合:** +## ステップ 6: 変更内容の分析 -1. コンフリクトの箇所と内容をユーザーに報告する -2. 各コンフリクトについて,テンプレート側の意図とプロジェクト側の変更を分析する -3. 解決方針を提示し,ユーザーの確認を得てから解決する -4. すべてのコンフリクトを解決したら `git add` でステージングし,`git commit --no-edit` でマージコミットを完了する +コピーされた変更を以下のカテゴリに分類する: -## ステップ 4: 変更内容の分析 +- **ルール変更**: コーディング規約,Git 運用ルール,テスト方針等の変更 +- **ドキュメント更新**: 手順書やガイドの改善 +- **設定変更**: CLAUDE.md や .claude/ 配下の変更 +- **その他**: 上記に該当しない変更 -マージ完了後,取り込まれた変更を分析する: +## ステップ 7: ルール変更に伴うコード修正 -1. `git diff HEAD~1..HEAD` で実際に取り込まれた変更を確認する -2. 変更内容を以下のカテゴリに分類する: - - **ルール変更**: コーディング規約,Git 運用ルール,テスト方針等の変更 - - **ドキュメント更新**: 手順書やガイドの改善 - - **設定変更**: CLAUDE.md や .claude/ 配下の変更 - - **その他**: 上記に該当しない変更 - -## ステップ 5: ルール変更に伴うコード修正 - -ステップ 4 で「ルール変更」に該当するものがある場合: +ステップ 6 で「ルール変更」に該当するものがある場合: 1. 変更されたルールの内容を要約してユーザーに報告する 2. そのルール変更がプロジェクトの既存コードに影響するか分析する @@ -91,7 +95,7 @@ 「ルール変更に伴うコード修正は不要です.」 -## ステップ 6: 結果報告 +## ステップ 8: 結果報告 すべての作業が完了したら,結果を報告する: @@ -99,13 +103,12 @@ - ブランチ: `{ブランチ名}` - 取り込んだ変更: {変更の要約} -- コンフリクト解決: {あり/なし} - コード修正: {あり(内容)/なし} `/commit push` でプッシュと PR 作成ができます.」 ## 注意事項 -- テンプレートリポジトリへの push は行わない(fetch のみ) -- コンフリクト解決時はプロジェクト固有の変更を優先し,テンプレートの意図を損なわないよう注意する +- テンプレートリポジトリへの push は行わない - コード修正はユーザーの確認なしに実行しない +- ファイルコピーによりプロジェクト固有の変更が上書きされる場合は,`git diff` で確認してユーザーに報告する diff --git "a/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" "b/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" index feeb84c..52eae79 100644 --- "a/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" +++ "b/docs/01_GUIDE/GUIDE_01_\343\203\227\343\203\255\343\202\270\343\202\247\343\202\257\343\203\210\347\253\213\343\201\241\344\270\212\343\201\222\343\203\225\343\203\255\343\203\274.md" @@ -40,10 +40,7 @@ - `gh` — GitHub CLI(PR 作成・マージ等に使用) - **リポジトリ作成時の注意**: - デフォルトブランチを `main` にするため,リポジトリの初期化には `git init -b main` を使用すること. - - テンプレートの更新を受け取るため,テンプレートリポジトリをリモートに登録すること.テンプレートの変更は `/sync-template` で取り込む. - ```bash - git remote add template https://github.com/rintoHasegawa/programming-template.git - ``` + - テンプレートの更新を受け取るには `/sync-template` を実行する(git リモートの登録は不要). - **基本方針**: 環境の再現性を重視し,手順書だけに頼らず構築を自動化・コード化できる方法を優先する(例: Docker,Dev Containers,Windows Sandbox,IaC ツール等). - **人間が決めること**: 開発マシンの選定,クラウドサービスのアカウント作成,環境構築方法の選択 - **AI に依頼できること**: 環境構築手順書の作成,設定ファイルの生成,`.gitignore` の作成,Dockerfile や devcontainer.json 等の構築用ファイルの作成