作業ブランチ初期化スキル
セットアップYAMLファイルを入力として、開発に必要な環境を自動構築します。
設計原則:
- •
git clone+git submodule init && git submodule updateだけで同等の開発環境が再現できること- •setup.yaml が Single Source of Truth (SSOT) - 全ての基本情報は setup.yaml に集約
ユーザー向け手順
1. テンプレートの準備
プロジェクトルートに配置されている setup-template.yaml をコピーして編集します:
# テンプレートをコピー cp setup-template.yaml setup.yaml # 内容を編集 # - task_name: タスク名を設定 # - ticket_id: チケットIDを設定 # - description: 階層化された説明を記述 # - overview: 概要 # - purpose: 目的 # - background: 背景 # - requirements: 要件(機能/非機能) # - acceptance_criteria: 受け入れ条件 # - scope: 対象範囲 # - out_of_scope: 対象外 # - notes: 補足 # - target_repositories: 修正対象リポジトリを設定 # - related_repositories: 参照用リポジトリを設定(任意)
2. スキルの実行
YAMLファイルの準備が完了したら、このスキル(init-work-branch)を実行してください:
init-work-branch を実行して setup.yaml で初期化
3. 成果物
スキル実行後、以下が自動生成されます:
- •
feature/{ticket_id}ブランチ - •サブモジュール(submodules/配下)
- •設計ドキュメント(docs/{ticket_id}.md)- setup.yaml の description から動的に埋め込み
このスキルの目的
- •ブランチ管理 - チケットIDに基づいたfeatureブランチを作成
- •依存リポジトリ管理 - 関連・修正対象リポジトリをサブモジュールとして追加
- •ドキュメント準備 - setup.yaml の description を基に設計ドキュメントを生成
入力ファイル
セットアップYAMLファイルのパスをユーザーから取得してください。
テンプレート配置場所:
- •プロジェクトルート:
/setup-template.yaml(ユーザー用コピー元) - •スキル内参照:
/.claude/skills/development/init-work-branch/references/setup-template.yaml
処理フロー
1. YAMLファイルのバリデーション
# YAMLファイルの存在確認
test -f "{yaml_path}" || echo "ファイルが見つかりません: {yaml_path}"
以下の必須フィールドを確認:
- •
ticket_id- チケットID(必須) - •
task_name- タスク名(必須) - •
target_repositories- 修正対象リポジトリ(少なくとも1つ必須)
オプションフィールド:
- •
description- タスクの説明(階層化構造) - •
related_repositories- 関連リポジトリ一覧 - •
options- オプション設定
2. 現在のブランチからfeatureブランチを作成
# 現在のブランチを取得
CURRENT_BRANCH=$(git branch --show-current)
# チケットIDを使用してfeatureブランチを作成
FEATURE_BRANCH="feature/{ticket_id}"
git checkout -b "$FEATURE_BRANCH"
echo "ブランチ作成完了: $FEATURE_BRANCH (元ブランチ: $CURRENT_BRANCH)"
3. サブモジュールディレクトリの準備
# サブモジュールディレクトリを作成(デフォルト: submodules)
SUBMODULES_DIR="{options.submodules_dir:-submodules}"
mkdir -p "$SUBMODULES_DIR"
4. 関連リポジトリをサブモジュールとして追加
related_repositories に定義された各リポジトリに対して実行:
# サブモジュールとして追加
git submodule add "{repository.url}" "$SUBMODULES_DIR/{repository.name}"
# 特定ブランチが指定されている場合
if [ -n "{repository.branch}" ]; then
cd "$SUBMODULES_DIR/{repository.name}"
git checkout "{repository.branch}"
cd -
fi
5. 修正対象リポジトリをサブモジュールとして追加
target_repositories に定義された各リポジトリに対して実行:
# リポジトリ名
REPO_NAME="{repository.name}"
BASE_BRANCH="{repository.base_branch:-main}"
FEATURE_BRANCH="feature/{ticket_id}"
# サブモジュールとして追加(存在しない場合)
if [ ! -d "$SUBMODULES_DIR/$REPO_NAME" ]; then
git submodule add "{repository.url}" "$SUBMODULES_DIR/$REPO_NAME"
fi
# サブモジュール内でfeatureブランチを作成
cd "$SUBMODULES_DIR/$REPO_NAME"
git fetch origin
git checkout "$BASE_BRANCH"
git pull origin "$BASE_BRANCH"
git checkout -b "$FEATURE_BRANCH"
cd -
echo "サブモジュール追加完了: $SUBMODULES_DIR/$REPO_NAME (ブランチ: $FEATURE_BRANCH)"
6. 設計変更ドキュメントの作成(setup.yaml から動的埋め込み)
設計ドキュメントテンプレートを使用し、setup.yaml の description から各セクションを動的に埋め込み:
DOCS_DIR="{options.design_document_dir:-docs}"
mkdir -p "$DOCS_DIR"
TEMPLATE_PATH="/.claude/skills/development/init-work-branch/references/design-document-template.md"
OUTPUT_PATH="$DOCS_DIR/{ticket_id}.md"
置換対象プレースホルダー(SSOT対応):
| プレースホルダー | 置換内容 |
|---|---|
{{TICKET_ID}} | setup.yaml の ticket_id |
{{TASK_NAME}} | setup.yaml の task_name |
{{CREATED_DATE}} | 現在日付(YYYY-MM-DD形式) |
{{AUTHOR}} | git の user.name |
{{DESCRIPTION_OVERVIEW}} | setup.yaml の description.overview |
{{DESCRIPTION_PURPOSE}} | setup.yaml の description.purpose |
{{DESCRIPTION_BACKGROUND}} | setup.yaml の description.background |
{{REQUIREMENTS_FUNCTIONAL}} | setup.yaml の description.requirements.functional(リスト形式) |
{{REQUIREMENTS_NON_FUNCTIONAL}} | setup.yaml の description.requirements.non_functional(リスト形式) |
{{DESCRIPTION_SCOPE}} | setup.yaml の description.scope(リスト形式) |
{{DESCRIPTION_OUT_OF_SCOPE}} | setup.yaml の description.out_of_scope(リスト形式) |
{{ACCEPTANCE_CRITERIA}} | setup.yaml の description.acceptance_criteria(リスト形式) |
{{DESCRIPTION_NOTES}} | setup.yaml の description.notes |
リスト形式の変換例:
# setup.yaml
description:
requirements:
functional:
- "ユーザーが○○を実行できること"
- "結果が△△形式で出力されること"
↓ 変換後
- ユーザーが○○を実行できること - 結果が△△形式で出力されること
7. 初期コミット
# 変更をステージング
git add .
# コミット
git commit -m "feat: {ticket_id} 開発環境を初期化
- featureブランチを作成: feature/{ticket_id}
- サブモジュールを追加
- 設計ドキュメントを作成: docs/{ticket_id}.md"
8. 初期化完了レポート
処理完了後、以下の情報を表示:
## 初期化完了 ✅
### ブランチ情報
- 作成ブランチ: feature/{ticket_id}
- 元ブランチ: {current_branch}
### 追加されたサブモジュール
- submodules/{repo_name1}
- submodules/{repo_name2} (feature/{ticket_id})
### 作成されたドキュメント
- docs/{ticket_id}.md
### SSOT情報
setup.yaml の description から以下のセクションが埋め込まれました:
- 概要 (overview)
- 目的 (purpose)
- 背景 (background)
- 要件 (requirements)
- スコープ (scope)
- 受け入れ条件 (acceptance_criteria)
### 環境の再構築方法
```bash
git clone {repository_url}
cd {repository_name}
git submodule init && git submodule update
次のステップ
- •
docs/{ticket_id}.mdを開いて内容を確認 - •dev-investigation スキルで調査を実施(setup.yaml の description.background を参照)
- •dev-design スキルで設計を実施(setup.yaml の description.requirements を参照)
## エラーハンドリング ### YAMLパースエラー
エラー: YAMLファイルのパースに失敗しました ファイル: {yaml_path} 原因: {error_message}
setup-template.yaml を参考に修正してください。
### 必須フィールド不足
エラー: 必須フィールドが不足しています 不足フィールド: {missing_fields}
YAMLファイルを修正してください。
### description の旧形式検出
警告: description が旧形式(文字列)で記載されています。 新形式(階層化)への移行を推奨します。
旧形式: description: | 説明文...
新形式: description: overview: | 概要... purpose: | 目的... ...
旧形式の場合は overview として処理を続行します。
### サブモジュール追加失敗
警告: サブモジュールの追加に失敗しました リポジトリ: {repository_url} 原因: {error_message}
処理を続行しますか? [y/N]
## 注意事項 - 既存のfeatureブランチがある場合は確認を求める - サブモジュールが既に存在する場合はスキップして処理を続行 - YAMLファイルのパスは絶対パスまたは相対パスで指定可能 - git設定(user.name, user.email)が必要 - **description が旧形式(文字列)の場合は overview として処理** ## 参照ファイル - テンプレートYAML: `/setup-template.yaml`(プロジェクトルート) - 設計ドキュメントテンプレート: `/.claude/skills/development/init-work-branch/references/design-document-template.md` ## 典型的なワークフロー
[YAML読み込み] --> YAMLをパースしてバリデーション | [ブランチ作成] --> feature/{ticket_id} ブランチを作成 | [サブモジュール追加] --> related_repositories をサブモジュールとして追加 | [修正対象追加] --> target_repositories をサブモジュールとして追加、featureブランチ作成 | [ドキュメント生成] --> setup.yaml の description から動的埋め込みで {ticket_id}.md を作成 | [初期コミット] --> 変更をコミット | [完了レポート] --> 初期化結果を表示