作成日: 2026-02-14
対象: .specify/scripts/bash/ ディレクトリ内のスクリプト
.specify/scripts/bash/ ディレクトリには、SpecKit ワークフローを自動化する Bash スクリプトが含まれています。これらのスクリプトは、機能の作成、ドキュメントの準備、AI エージェントへのコンテキスト提供などを効率化します。
| スクリプト名 | 目的 |
|---|---|
common.sh |
共通関数とユーティリティの提供 |
create-new-feature.sh |
新規機能ブランチとディレクトリの作成 |
setup-plan.sh |
実装計画ファイルのセットアップ |
check-prerequisites.sh |
必要なファイルと前提条件の確認 |
update-agent-context.sh |
AI エージェント向けコンテキストファイルの更新 |
他のすべてのスクリプトから利用される共通関数を提供するライブラリです。Git/非Git 環境の両方に対応し、柔軟なパス解決を実現します。
get_repo_root()git rev-parse --show-toplevel を使用get_current_branch()SPECIFY_FEATUREspecs/ ディレクトリ内の最新機能(番号順)"main"has_git()check_feature_branch(branch, has_git_repo)###-feature-name(例: 001-user-auth)find_feature_dir_by_prefix(repo_root, branch_name)004-fix-bug と 004-add-feature)specs/ 内で数値プレフィックスが一致するディレクトリを検索get_feature_paths()REPO_ROOT='/path/to/repo'
CURRENT_BRANCH='001-feature-name'
HAS_GIT='true'
FEATURE_DIR='/path/to/repo/specs/001-feature-name'
FEATURE_SPEC='/path/to/repo/specs/001-feature-name/spec.md'
IMPL_PLAN='/path/to/repo/specs/001-feature-name/plan.md'
TASKS='/path/to/repo/specs/001-feature-name/tasks.md'
RESEARCH='/path/to/repo/specs/001-feature-name/research.md'
DATA_MODEL='/path/to/repo/specs/001-feature-name/data-model.md'
QUICKSTART='/path/to/repo/specs/001-feature-name/quickstart.md'
CONTRACTS_DIR='/path/to/repo/specs/001-feature-name/contracts'
check_file(path, label): ファイルの存在確認と表示check_dir(path, label): ディレクトリの存在確認と表示(内容あり)# 他のスクリプトから読み込む
source "$SCRIPT_DIR/common.sh"
# パスを取得して環境変数に設定
eval $(get_feature_paths)
# ブランチをチェック
check_feature_branch "$CURRENT_BRANCH" "$HAS_GIT" || exit 1
新しい機能の開発を開始するための初期セットアップを自動化します。ブランチ作成、ディレクトリ作成、仕様ファイルの初期化を行います。
機能番号の自動採番
specs/ ディレクトリとブランチを調査001、002、003...(3桁ゼロパディング)ブランチ名の生成
--short-name オプションで指定###-meaningful-nameGit ブランチ作成
git checkout -b ###-feature-nameディレクトリとファイルの初期化
specs/###-feature-name/ ディレクトリを作成spec-template.md をコピーして spec.md を作成環境変数の設定
SPECIFY_FEATURE 環境変数を設定(現在のセッション用)| オプション | 説明 |
|---|---|
--json |
JSON 形式で結果を出力 |
--short-name <name> |
カスタム短縮名を指定(2-4語) |
--number N |
ブランチ番号を手動指定(自動検出を上書き) |
--help, -h |
ヘルプメッセージを表示 |
# 自動でブランチ名を生成
./create-new-feature.sh "Add user authentication system"
# 結果: 001-user-authentication-system
# カスタム短縮名を使用
./create-new-feature.sh "Implement OAuth2 integration for API" --short-name "oauth-api"
# 結果: 002-oauth-api
# 番号を手動指定
./create-new-feature.sh "Add logging" --number 5
# 結果: 005-add-logging
# JSON 出力
./create-new-feature.sh "New feature" --json
# {"BRANCH_NAME":"003-new-feature","SPEC_FILE":"/path/to/specs/003-new-feature/spec.md","FEATURE_NUM":"003"}
番号決定のロジック:
# Git ブランチから最大番号を取得
get_highest_from_branches()
# specs/ ディレクトリから最大番号を取得
get_highest_from_specs()
# 両方の最大値 + 1
BRANCH_NUMBER = max(branches, specs) + 1
ブランチ名のクリーニング:
# 大文字を小文字に変換
# 非英数字をハイフンに変換
# 連続するハイフンを1つに
# 先頭/末尾のハイフンを削除
GitHub の制限対応:
実装計画フェーズの準備として、plan.md ファイルを作成します。
環境確認
common.sh から機能パスを取得ディレクトリ作成
FEATURE_DIR が存在しない場合は作成計画ファイルの初期化
plan-template.md) をコピーして plan.md を作成| オプション | 説明 |
|---|---|
--json |
JSON 形式で結果を出力 |
--help, -h |
ヘルプメッセージを表示 |
# 通常の使用
./setup-plan.sh
# JSON 出力
./setup-plan.sh --json
テキスト形式:
Copied plan template to /path/to/specs/001-feature/plan.md
FEATURE_SPEC: /path/to/specs/001-feature/spec.md
IMPL_PLAN: /path/to/specs/001-feature/plan.md
SPECS_DIR: /path/to/specs/001-feature
BRANCH: 001-feature
HAS_GIT: true
JSON 形式:
{
"FEATURE_SPEC": "/path/to/specs/001-feature/spec.md",
"IMPL_PLAN": "/path/to/specs/001-feature/plan.md",
"SPECS_DIR": "/path/to/specs/001-feature",
"BRANCH": "001-feature",
"HAS_GIT": "true"
}
実装の各フェーズで必要なファイルと前提条件が満たされているかを検証します。
必須ファイルの確認
plan.md の存在(常に必須)tasks.md の存在(--require-tasks 指定時)オプションファイルの検出
research.mddata-model.mdcontracts/ ディレクトリ(内容あり)quickstart.mdtasks.md(--include-tasks 指定時)複数の出力モード
| オプション | 説明 |
|---|---|
--json |
JSON 形式で出力 |
--require-tasks |
tasks.md の存在を必須とする |
--include-tasks |
利用可能ドキュメントリストに tasks.md を含める |
--paths-only |
パス変数のみ出力(検証なし) |
--help, -h |
ヘルプメッセージを表示 |
# タスク生成の前提条件をチェック(plan.md 必須)
./check-prerequisites.sh --json
# 実装の前提条件をチェック(plan.md + tasks.md 必須)
./check-prerequisites.sh --json --require-tasks --include-tasks
# パスのみ取得(検証なし)
./check-prerequisites.sh --paths-only
テキスト形式:
FEATURE_DIR:/path/to/specs/001-feature
AVAILABLE_DOCS:
✓ research.md
✓ data-model.md
✗ contracts/
✓ quickstart.md
JSON 形式:
{
"FEATURE_DIR": "/path/to/specs/001-feature",
"AVAILABLE_DOCS": ["research.md", "data-model.md", "quickstart.md"]
}
パスのみモード:
REPO_ROOT: /path/to/repo
BRANCH: 001-feature
FEATURE_DIR: /path/to/specs/001-feature
FEATURE_SPEC: /path/to/specs/001-feature/spec.md
IMPL_PLAN: /path/to/specs/001-feature/plan.md
TASKS: /path/to/specs/001-feature/tasks.md
/speckit.specify を先に実行するよう促すplan.md が見つからない → /speckit.plan を先に実行するよう促すtasks.md が必須だが見つからない → /speckit.tasks を先に実行するよう促すplan.md から技術情報を抽出し、AI エージェント向けのコンテキストファイル(CLAUDE.md、GEMINI.md など)を更新します。
環境検証
plan.md の存在確認plan.md からのデータ抽出
**Language/Version**: Python 3.11 などを抽出**Primary Dependencies**: FastAPI などを抽出**Storage**: SQLite などを抽出**Project Type**: single などを抽出エージェントファイルの作成または更新
複数の AI エージェント対応
CLAUDE.md)GEMINI.md).github/agents/copilot-instructions.md).cursor/rules/specify-rules.mdc)QWEN.md)| 引数 | 説明 |
|---|---|
[agent_type] |
更新する特定のエージェント(省略時は全エージェント) |
対応エージェント: claude, gemini, copilot, cursor-agent, qwen, opencode, codex, windsurf, kilocode, auggie, roo, codebuddy, qoder, amp, shai, q, bob
# すべての既存エージェントファイルを更新
./update-agent-context.sh
# Claude のみを更新
./update-agent-context.sh claude
# Gemini のみを更新
./update-agent-context.sh gemini
extract_plan_field() {
local field_pattern="$1"
local plan_file="$2"
# "**Field**: value" 形式の行を検索
grep "^\*\*${field_pattern}\*\*: " "$plan_file" | \
sed "s|^\*\*${field_pattern}\*\*: ||" | \
# "NEEDS CLARIFICATION" と "N/A" を除外
grep -v "NEEDS CLARIFICATION" | \
grep -v "^N/A$"
}
テンプレートのプレースホルダーを実際の値に置換:
[PROJECT NAME] → リポジトリ名[DATE] → 現在の日付[EXTRACTED FROM ALL PLAN.MD FILES] → 技術スタック[ACTUAL STRUCTURE FROM PLANS] → プロジェクト構造[ONLY COMMANDS FOR ACTIVE TECHNOLOGIES] → コマンド[LANGUAGE-SPECIFIC...] → 言語規約[LAST 3 FEATURES...] → 最近の変更## Active Technologies
- Python 3.11 + FastAPI (001-user-auth) ← 新規追加
- SQLite (001-user-auth) ← 新規追加
## Recent Changes
- 001-user-auth: Added Python 3.11 + FastAPI ← 新規追加(最上部)
- 002-old-feature: Added... ← 既存(保持)
- 003-older-feature: Added... ← 既存(保持)
- 004-ancient-feature: Added... ← 削除(最新3つのみ保持)
言語に応じたビルド/テストコマンドを自動生成:
cd src && pytest && ruff check .cargo test && cargo clippynpm test && npm run lintINFO: Parsing plan data from /path/to/specs/001-feature/plan.md
INFO: Found language: Python 3.11
INFO: Found framework: FastAPI
INFO: Found database: SQLite
INFO: Updating Claude Code context file: /path/to/repo/CLAUDE.md
✓ Updated existing Claude Code context file
Summary of changes:
- Added language: Python 3.11
- Added framework: FastAPI
- Added database: SQLite
# 1. 新規機能を作成
./create-new-feature.sh "Add user authentication"
# → ブランチ: 001-user-authentication
# → ディレクトリ: specs/001-user-authentication/
# → ファイル: specs/001-user-authentication/spec.md
# 2. 仕様を編集(手動または /speckit.specify コマンド)
# spec.md にユーザーストーリー、要件、成功基準を記述
# 3. 計画をセットアップ
./setup-plan.sh
# → ファイル: specs/001-user-authentication/plan.md
# 4. 計画を編集(手動または /speckit.plan コマンド)
# plan.md に技術スタック、プロジェクト構造を記述
# 5. AI エージェントコンテキストを更新
./update-agent-context.sh
# → CLAUDE.md などが更新される
# 6. タスク生成前の前提条件チェック
./check-prerequisites.sh --json
# → plan.md が存在することを確認
# 7. タスクを生成(/speckit.tasks コマンド)
# → ファイル: specs/001-user-authentication/tasks.md
# 8. 実装前の前提条件チェック
./check-prerequisites.sh --json --require-tasks --include-tasks
# → plan.md と tasks.md が存在することを確認
# 9. 実装を開始(/speckit.implement コマンドまたは手動)
# ブランチが自動作成される
./create-new-feature.sh "New feature"
# → git checkout -b 001-new-feature
# ブランチから機能を自動検出
./update-agent-context.sh
# → 現在のブランチ名を使用
# ブランチ作成はスキップされる(警告表示)
./create-new-feature.sh "New feature"
# Warning: Git repository not detected; skipped branch creation
# 環境変数で機能を指定
export SPECIFY_FEATURE="001-new-feature"
./update-agent-context.sh
# → SPECIFY_FEATURE を使用
SpecKit のスクリプトは、仕様駆動開発ワークフローを効率化する強力なツールセットです。
これらのスクリプトを活用することで、一貫性のある高品質なソフトウェア開発が可能になります。