diff --git a/.claude/commands/setup.md b/.claude/commands/setup.md index d1444ea..9e42dde 100644 --- a/.claude/commands/setup.md +++ b/.claude/commands/setup.md @@ -17,9 +17,15 @@ ## 前提確認 (Pre-check) -1. CLAUDE.md の「開発進捗」を確認し,どのフェーズから再開するか判断する -2. 初回の場合はフェーズ 1 から開始する -3. プロジェクト名を確認する: $ARGUMENTS +1. CLAUDE.md がテンプレート初期状態(タイトルが `# プロジェクト名` のまま)か確認する +2. **初期状態の場合(新規プロジェクト立ち上げ):** + - プロジェクト名を確定する(引数 `$ARGUMENTS` があればそれを使用,なければユーザーに確認) + - プロジェクト概要(1〜2 行)をユーザーに確認する + - CLAUDE.md の以下を書き換える: + - 1 行目の `# プロジェクト名` → `# {確定したプロジェクト名}` + - 3 行目の `` → 概要テキスト +3. CLAUDE.md の「開発進捗」を確認し,どのフェーズから再開するか判断する +4. 初回の場合はフェーズ 1 から開始する ## フェーズ 1〜6: 各フェーズの実行 diff --git a/.claude/commands/sync-template.md b/.claude/commands/sync-template.md index 831ad86..59733a8 100644 --- a/.claude/commands/sync-template.md +++ b/.claude/commands/sync-template.md @@ -8,6 +8,8 @@ あなたはテンプレート同期の担当者です. テンプレートリポジトリから最新の変更を取り込み,必要に応じてプロジェクトのコードを修正してください. +実行環境: bash(Git Bash または Unix シェル)が必要.`mktemp`, `rm -rf`, `cat`, シェル変数展開を使用する. + テンプレート URL: `https://github.com/rintoHasegawa/programming-template.git` ## ステップ 1: 事前確認 @@ -47,31 +49,78 @@ - `NEW_SHA != LAST_SHA` の場合: ```bash - git -C "$TEMP_DIR" diff --name-only "$LAST_SHA" HEAD + # A=追加, M=変更, D=削除, R=リネーム の種別付きで取得 + CHANGED_ENTRIES=$(git -C "$TEMP_DIR" diff --name-status "$LAST_SHA" HEAD) ``` - で変更されたファイル一覧を取得する. + で変更されたファイルを種別付きで取得する. **ファイルが存在しない場合(初回同期):** -テンプレートの全ファイルを対象とする. +テンプレートの全ファイルを「追加(A)」として対象に含める: + +```bash +CHANGED_ENTRIES=$(cd "$TEMP_DIR" && find . -type f -not -path "./.git/*" | sed 's|^\./||' | awk -v OFS='\t' '{print "A", $0}') +``` ## ステップ 4: 変更一覧をユーザーに提示 -取り込み対象のファイル一覧と,各ファイルの変更概要をユーザーに提示する: +取り込み対象のファイル一覧を種別ごとに整理してユーザーに提示する: 「**テンプレートに以下の変更があります:** -{ファイル一覧} +- 追加 (A): {ファイル一覧} +- 変更 (M): {ファイル一覧} +- 削除 (D): {ファイル一覧} +- リネーム (R): {旧名 → 新名} 取り込みを開始します.」 -## ステップ 5: ブランチ作成とファイルコピー +## ステップ 5: ブランチ作成とファイル反映 1. `git checkout -b chore/sync-template` でブランチを作成する - 既に同名のブランチが存在する場合は削除してから作り直す -2. 対象ファイルをテンプレートからプロジェクトにコピーする(既存ファイルは上書き) -3. `echo "$NEW_SHA" > .claude/template-sync-sha` で同期済み SHA を記録する -4. `rm -rf "$TEMP_DIR"` で一時ディレクトリを削除する + +2. 追加・変更・リネーム先を反映する: + + ```bash + 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 + ``` + +3. 削除候補(D およびリネーム元)を抽出する: + + ```bash + DELETIONS=$(echo "$CHANGED_ENTRIES" | awk -F'\t' '$1 == "D" {print $2} $1 ~ /^R/ {print $2}') + ``` + +4. `$DELETIONS` が空でない場合,ユーザーに確認を求める: + + 「**以下のファイルはテンプレートから削除されています:** + + {削除候補一覧} + + プロジェクトからも削除してよいですか?(残したいファイルがあれば指定してください)」 + + ユーザー確認後,対象ファイルを `rm` で削除する.プロジェクトが独自に残したいファイルは削除対象から除外する. + +5. 同期済み SHA を記録し,一時ディレクトリを削除する: + + ```bash + echo "$NEW_SHA" > .claude/template-sync-sha + rm -rf "$TEMP_DIR" + ``` ## ステップ 6: 変更内容の分析 @@ -112,3 +161,4 @@ - テンプレートリポジトリへの push は行わない - コード修正はユーザーの確認なしに実行しない - ファイルコピーによりプロジェクト固有の変更が上書きされる場合は,`git diff` で確認してユーザーに報告する +- `chore/sync-template` ブランチは他の作業ブランチと混ぜず,作成後は速やかにマージすること.複数の作業ブランチで `/sync-template` を実行すると `.claude/template-sync-sha` がコンフリクトする.コンフリクト時は新しい(HEAD 側の)SHA を採用すること. 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 52eae79..b3b8893 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" @@ -38,9 +38,26 @@ - **前提条件**: 以下のツールは全プロジェクト共通で導入する. - `git` — バージョン管理([GUIDE_04](GUIDE_04_Git運用ルール.md) で運用ルールを定義) - `gh` — GitHub CLI(PR 作成・マージ等に使用) -- **リポジトリ作成時の注意**: - - デフォルトブランチを `main` にするため,リポジトリの初期化には `git init -b main` を使用すること. - - テンプレートの更新を受け取るには `/sync-template` を実行する(git リモートの登録は不要). +- **テンプレートからのプロジェクト作成**: + 以下の手順でテンプレートをコピーし,履歴を引き継がない新規リポジトリとして初期化する. + + ```bash + # 1. プロジェクトディレクトリを作成して移動 + mkdir + cd + + # 2. カレントディレクトリにテンプレートをクローン(末尾の . に注意) + git clone https://github.com/rintoHasegawa/programming-template.git . + + # 3. 現在のテンプレート SHA を記録(以降の /sync-template で差分同期するため) + git rev-parse HEAD > .claude/template-sync-sha + + # 4. テンプレートの git 履歴を削除し,新しいリポジトリとして初期化 + rm -rf .git + git init -b main + ``` + + 以降,テンプレートの更新を取り込むときは `/sync-template` を実行する. - **基本方針**: 環境の再現性を重視し,手順書だけに頼らず構築を自動化・コード化できる方法を優先する(例: Docker,Dev Containers,Windows Sandbox,IaC ツール等). - **人間が決めること**: 開発マシンの選定,クラウドサービスのアカウント作成,環境構築方法の選択 - **AI に依頼できること**: 環境構築手順書の作成,設定ファイルの生成,`.gitignore` の作成,Dockerfile や devcontainer.json 等の構築用ファイルの作成