AgentSkillsCN

init-work-branch

初始化工作分支的技能。以设置 YAML 作为输入,创建功能分支、添加子模块、生成设计文档。“初始化工作分支”“init-work-branch”“开发环境搭建”“创建功能分支”等关键词均可触发此技能。

SKILL.md
--- frontmatter
name: init-work-branch
description: 作業ブランチ初期化スキル。セットアップYAMLを入力として、featureブランチ作成、サブモジュール追加、設計ドキュメント生成を行う。「作業ブランチを初期化」「init-work-branch」「開発セットアップ」「featureブランチを作成」などのフレーズで発動。

作業ブランチ初期化スキル

セットアップYAMLファイルを入力として、開発に必要な環境を自動構築します。

設計原則:

  • git clone + git submodule init && git submodule update だけで同等の開発環境が再現できること
  • setup.yaml が Single Source of Truth (SSOT) - 全ての基本情報は setup.yaml に集約

ユーザー向け手順

1. テンプレートの準備

プロジェクトルートに配置されている setup-template.yaml をコピーして編集します:

bash
# テンプレートをコピー
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)を実行してください:

code
init-work-branch を実行して setup.yaml で初期化

3. 成果物

スキル実行後、以下が自動生成されます:

  • feature/{ticket_id} ブランチ
  • サブモジュール(submodules/配下)
  • 設計ドキュメント(docs/{ticket_id}.md)- setup.yaml の description から動的に埋め込み

このスキルの目的

  1. ブランチ管理 - チケットIDに基づいたfeatureブランチを作成
  2. 依存リポジトリ管理 - 関連・修正対象リポジトリをサブモジュールとして追加
  3. ドキュメント準備 - setup.yaml の description を基に設計ドキュメントを生成

入力ファイル

セットアップYAMLファイルのパスをユーザーから取得してください。

テンプレート配置場所:

  • プロジェクトルート: /setup-template.yaml(ユーザー用コピー元)
  • スキル内参照: /.claude/skills/development/init-work-branch/references/setup-template.yaml

処理フロー

1. YAMLファイルのバリデーション

bash
# YAMLファイルの存在確認
test -f "{yaml_path}" || echo "ファイルが見つかりません: {yaml_path}"

以下の必須フィールドを確認:

  • ticket_id - チケットID(必須)
  • task_name - タスク名(必須)
  • target_repositories - 修正対象リポジトリ(少なくとも1つ必須)

オプションフィールド:

  • description - タスクの説明(階層化構造)
  • related_repositories - 関連リポジトリ一覧
  • options - オプション設定

2. 現在のブランチからfeatureブランチを作成

bash
# 現在のブランチを取得
CURRENT_BRANCH=$(git branch --show-current)

# チケットIDを使用してfeatureブランチを作成
FEATURE_BRANCH="feature/{ticket_id}"
git checkout -b "$FEATURE_BRANCH"

echo "ブランチ作成完了: $FEATURE_BRANCH (元ブランチ: $CURRENT_BRANCH)"

3. サブモジュールディレクトリの準備

bash
# サブモジュールディレクトリを作成(デフォルト: submodules)
SUBMODULES_DIR="{options.submodules_dir:-submodules}"
mkdir -p "$SUBMODULES_DIR"

4. 関連リポジトリをサブモジュールとして追加

related_repositories に定義された各リポジトリに対して実行:

bash
# サブモジュールとして追加
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 に定義された各リポジトリに対して実行:

bash
# リポジトリ名
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 から各セクションを動的に埋め込み

bash
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

リスト形式の変換例:

yaml
# setup.yaml
description:
  requirements:
    functional:
      - "ユーザーが○○を実行できること"
      - "結果が△△形式で出力されること"

↓ 変換後

markdown
- ユーザーが○○を実行できること
- 結果が△△形式で出力されること

7. 初期コミット

bash
# 変更をステージング
git add .

# コミット
git commit -m "feat: {ticket_id} 開発環境を初期化

- featureブランチを作成: feature/{ticket_id}
- サブモジュールを追加
- 設計ドキュメントを作成: docs/{ticket_id}.md"

8. 初期化完了レポート

処理完了後、以下の情報を表示:

markdown
## 初期化完了 ✅

### ブランチ情報
- 作成ブランチ: 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

次のステップ

  1. docs/{ticket_id}.md を開いて内容を確認
  2. dev-investigation スキルで調査を実施(setup.yaml の description.background を参照)
  3. dev-design スキルで設計を実施(setup.yaml の description.requirements を参照)
code

## エラーハンドリング

### YAMLパースエラー

エラー: YAMLファイルのパースに失敗しました ファイル: {yaml_path} 原因: {error_message}

setup-template.yaml を参考に修正してください。

code

### 必須フィールド不足

エラー: 必須フィールドが不足しています 不足フィールド: {missing_fields}

YAMLファイルを修正してください。

code

### description の旧形式検出

警告: description が旧形式(文字列)で記載されています。 新形式(階層化)への移行を推奨します。

旧形式: description: | 説明文...

新形式: description: overview: | 概要... purpose: | 目的... ...

旧形式の場合は overview として処理を続行します。

code

### サブモジュール追加失敗

警告: サブモジュールの追加に失敗しました リポジトリ: {repository_url} 原因: {error_message}

処理を続行しますか? [y/N]

code

## 注意事項

- 既存の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 を作成 | [初期コミット] --> 変更をコミット | [完了レポート] --> 初期化結果を表示

code