| name | local-flow |
| description | GitHub API を使わずローカルファイルで Issue / PR を管理する開発フロー。デモ・オフライン環境向け。github-flow の代替として使用する。 |
Local Flow 開発ガイド
GitHub API(gh CLI)を使用せず、リポジトリ内の Markdown ファイルで Issue と PR を管理する開発フローを定義する。
ブランチ運用・コミット規約は github-flow スキルと共通。
github-flow との差分
| 操作 | github-flow | local-flow |
|---|
| Issue 作成 | gh issue create | issues/<番号>-<説明>.md を作成 |
| Issue コメント | gh issue comment | Issue ファイルの末尾にセクション追記 |
| PR 作成 | gh pr create --draft | pull-requests/<番号>-<説明>.md を作成 |
| PR コメント | gh pr comment | PR ファイルの末尾にセクション追記 |
| リモート Push | git push -u origin | 不要(ローカルのみ) |
| マージ | GitHub 上で Squash Merge | git merge --squash をローカル実行 |
上記以外(ブランチ命名、Conventional Commits、ビルド・テスト確認、テスト作成義務)は github-flow スキルに従う。
ディレクトリ構成
<repo-root>/
issues/
001-add-search.md
002-fix-pagination.md
pull-requests/
001-feat-add-search.md
issues/ — 仕様書・タスクを管理する
pull-requests/ — 実装の変更内容とレビュー記録を管理する
- 番号は 3 桁ゼロ埋め連番とする(
001, 002, ...)
1. Issue の作成
採番ルール
issues/ ディレクトリ内の既存ファイルから最大番号を取得し、+1 する。
ディレクトリが空または存在しない場合は 001 から開始する。
$maxNum = (Get-ChildItem issues/*.md -ErrorAction SilentlyContinue |
ForEach-Object { if ($_.Name -match '^(\d+)') { [int]$Matches[1] } } |
Measure-Object -Maximum).Maximum
$next = "{0:D3}" -f (($maxNum ?? 0) + 1)
ファイル命名規則
issues/<番号>-<短い説明(kebab-case)>.md
Issue テンプレート
# <タイトル>
| 項目 | 値 |
|------|-----|
| 番号 | <番号> |
| ステータス | open |
| 作成日 | <YYYY-MM-DD> |
---
<本文: 仕様書の内容をここに記述>
---
## コメント
ステータス は open / closed のいずれか
## コメント セクション以降にエージェントや人間のコメントを追記する
作成コマンド例
create-specification スキルの gh issue create の代わりに以下を実行する:
$number = "001"
$slug = "add-search"
$path = "issues/${number}-${slug}.md"
New-Item -ItemType Directory -Path "issues" -Force
# ファイルを作成し、テンプレートの内容を書き込む
2. Issue へのコメント追記
Issue ファイルの ## コメント セクション以降に、以下のフォーマットで追記する。
フォーマット
---
### [エージェント名] -- Step N.N: ステップ名
Phase N / レビューサイクル N回目
<YYYY-MM-DDThh:mm:ss>
<コメント本文>
追記コマンド例
gh issue comment <番号> --body "..." の代わりに:
$issuePath = "issues/001-add-search.md"
$comment = @"
---
### [Reviewer] -- Step 1.2: 仕様レビュー
Phase 1 / レビューサイクル 1回目
$(Get-Date -Format "yyyy-MM-ddTHH:mm:ss")
## レビュー結果
- **BLOCKER**: 受け入れ基準 #3 が曖昧です
**REQUEST CHANGES**
"@
Add-Content -Path $issuePath -Value $comment -Encoding UTF8
3. PR の作成
前提
- feature ブランチでの実装・ビルド・テストが完了していること
github-flow スキルのコミット規約に従っていること
採番ルール
Issue と同様に pull-requests/ 内の最大番号 +1 とする。
Issue 番号と PR 番号は独立した連番とする。
ファイル命名規則
pull-requests/<番号>-<type>-<短い説明(kebab-case)>.md
PR テンプレート
# <PR タイトル(Conventional Commits 形式)>
| 項目 | 値 |
|------|-----|
| 番号 | <番号> |
| ブランチ | feature/<issue番号>-<説明> → main |
| 関連 Issue | <Issue 番号> |
| ステータス | draft |
| 作成日 | <YYYY-MM-DD> |
---
## 概要
<変更の目的と背景>
## 変更内容
- <変更点 1>
- <変更点 2>
## 確認事項
- [ ] `dotnet build <YourSolution>.slnx` が成功する
- [ ] `dotnet test <YourSolution>.slnx` が成功する
- [ ] 新規・変更したビジネスロジックに単体テストがある
---
## コメント
ステータス は draft / review / merged / closed のいずれか
4. PR へのコメント追記
Issue と同じフォーマットで ## コメント セクション以降に追記する。
gh pr comment <番号> --body "..." の代わりに:
$prPath = "pull-requests/001-feat-add-search.md"
$comment = @"
---
### [Developer] -- Step 3.1: 実装
Phase 3 / レビューサイクル 1回目
$(Get-Date -Format "yyyy-MM-ddTHH:mm:ss")
## 実装完了
- ブランチ: feature/001-add-search
- 変更ファイル: 8 ファイル
- ユニットテスト: 5 テスト追加、全パス
- ビルド: 成功
"@
Add-Content -Path $prPath -Value $comment -Encoding UTF8
5. ステータス更新
Issue または PR のステータスを変更する場合、ファイル冒頭のメタデータテーブルを直接編集する。
| 操作 | github-flow | local-flow |
|---|
| PR を Ready for Review に変更 | GitHub UI | ステータス を draft → review に編集 |
| Issue をクローズ | gh issue close | ステータス を open → closed に編集 |
| PR をマージ済みに変更 | GitHub Squash Merge | ステータス を review → merged に編集 |
6. マージ(ローカル Squash Merge)
GitHub 上の Squash Merge の代わりに、ローカルで同等の操作を行う。
git switch main
git merge --squash feature/<issue番号>-<説明>
git commit -m "feat(<scope>): 変更内容の説明
Refs #<issue番号>"
git branch -d feature/<issue番号>-<説明>
マージ後
- PR ファイルの
ステータス を merged に更新する
- 関連 Issue ファイルの
ステータス を closed に更新する
クイックリファレンス
git switch main
git switch -c feature/<issue番号>-<説明>
git add .
git commit -m "feat(<scope>): 変更内容の説明"
cd src && dotnet build <YourSolution>.slnx && dotnet test <YourSolution>.slnx
git switch main
git merge --squash feature/<issue番号>-<説明>
git commit -m "feat(<scope>): 変更内容の説明"
git branch -d feature/<issue番号>-<説明>