ドラフト Pull Request を作成
Creates a draft pull request with automatic title generation and issue linking.
/plugin marketplace add B16B1RD/cc-zen-workflow/plugin install b16b1rd-zen-plugins-zen@B16B1RD/cc-zen-workflowpr/ドラフト PR を作成し、関連 Issue と連携する
このコマンドを実行したら、以下のフェーズを順番に実行してください。
| 引数 | 説明 |
|---|---|
[title] | PR タイトル(省略時は自動生成) |
Read ツールでプロジェクトルートの zen-config.yml を読み取り、branch.base の値を取得:
Read: zen-config.yml
取得ロジック:
zen-config.yml が存在し、branch.base が設定されている場合 → その値を {base_branch} として使用zen-config.yml が存在しない(Read ツールがエラーを返す)、または branch.base が未設定の場合 → main をデフォルトとして使用「未設定」の定義:
branch.base キーが存在しないbranch.base キーの値が null または空文字列branch セクション自体が存在しないプレースホルダの解釈:
本ドキュメント内の {base_branch} は、上記のロジックで取得した実際のブランチ名に置換される。例えば branch.base: "develop" と設定されている場合、後続の bash コマンド git diff --stat origin/{base_branch}...HEAD は git diff --stat origin/develop...HEAD として実行される。
現在のブランチと {base_branch} との差分を確認:
git branch --show-current
ベースブランチにいる場合:
エラー: 現在 {branch} ブランチにいます
PR を作成するには作業ブランチに切り替えてください。
`/zen:issue:start` で作業を開始できます。
処理を終了。
git status --porcelain
git diff --stat origin/{base_branch}...HEAD
git log --oneline origin/{base_branch}...HEAD
フォールバックロジック:
origin/{base_branch} が存在しない場合(例: ローカルのみで作業中)、以下の順序で差分を取得:
# 擬似コード(Claude がロジックを理解するための概念的表現)
# 実際には Claude が各コマンドを順次実行し、エラー発生時に次を試行
1. origin/{base_branch} の存在確認:
→ 存在する場合: git diff --stat origin/{base_branch}...HEAD を使用
2. origin/{base_branch} が存在しない場合:
→ {base_branch} の存在確認
→ 存在する場合: git diff --stat {base_branch}...HEAD を使用
3. どちらも存在しない場合:
→ git diff --stat HEAD を使用(ステージング済みファイル)
注意: 上記は概念的な擬似コードであり、bash スクリプトとして実行するものではない。Claude は各コマンドを順次実行し、エラーが発生した場合に次のフォールバックを試行する。
コミットがない場合:
警告: まだコミットがありません
変更をコミットしてから PR を作成してください。
処理を終了。
ブランチ名から関連 Issue 番号を抽出:
パターン: {type}/issue-{number}-{slug}
例: feat/issue-17-pr-create → Issue #17
抽出できない場合は AskUserQuestion で確認:
ブランチ名から Issue 番号を特定できません
現在のブランチ: {branch}
オプション:
- Issue 番号を手動で指定
- Issue なしで PR を作成
- キャンセル
gh issue view {issue_number} --json number,title,body,state,labels
Issue がクローズされている場合:
警告: Issue #{number} は既にクローズされています
PR を作成しますか?
オプション:
- はい、作成する
- キャンセル
Issue のコメントから作業メモリを取得:
gh api repos/{owner}/{repo}/issues/{issue_number}/comments --jq '.[] | select(.body | contains("zen 作業メモリ"))'
作業メモリが見つかった場合、以下の情報を抽出:
Phase 1 完了後、チェックポイントを保存:
mkdir -p .zen/memory
Write ツールで .zen/memory/checkpoint.json を作成/更新:
{
"version": "1.0",
"command": "zen:pr:create",
"issue_number": {issue_number|null},
"branch": "{branch_name}",
"phase": "phase1",
"timestamp": "{ISO8601_timestamp}",
"context": {
"has_commits": true,
"commit_count": {count},
"has_work_memory": {true|false}
}
}
zen-config.yml から build/lint コマンドを取得:
commands:
build: null # 自動検出
lint: null # 自動検出
自動検出ロジック:
package.json の scripts から検出Makefile のターゲットから検出AskUserQuestion で実行を確認:
PR 作成前に品質チェックを実行しますか?
検出されたコマンド:
- lint: {lint_command}
- build: {build_command}
オプション:
- すべて実行(推奨)
- lint のみ
- スキップ
選択されたチェックを実行:
# lint 実行例
npm run lint
エラーがある場合:
品質チェックでエラーが検出されました
{error_output}
オプション:
- エラーを無視して PR 作成
- 修正してから再実行
- キャンセル
Phase 2 完了後(品質チェック実行後)、チェックポイントを更新:
Write ツールで .zen/memory/checkpoint.json を更新:
{
"version": "1.0",
"command": "zen:pr:create",
"issue_number": {issue_number|null},
"branch": "{branch_name}",
"phase": "phase2",
"timestamp": "{ISO8601_timestamp}",
"context": {
"quality_check_passed": {true|false},
"lint_result": "{success|error|skipped}",
"build_result": "{success|error|skipped}"
}
}
Conventional Commits 形式でタイトルを生成:
言語決定ルール:
zen-config.yml の language 設定に従って PR タイトルの言語を決定:
| 設定値 | 動作 |
|---|---|
auto | ユーザーの入力言語を検出して同じ言語で生成 |
ja | 日本語でタイトルを生成 |
en | 英語でタイトルを生成 |
注意: Issue タイトルが設定言語と異なる場合は、設定言語に翻訳してタイトルを生成する。
タイトル生成ルール:
パターン: {type}({scope}): {description}
例: feat(pr): implement /zen:pr:create command
type マッピング:
| ブランチ prefix | PR type |
|---|---|
| feat/ | feat |
| fix/ | fix |
| docs/ | docs |
| refactor/ | refactor |
| chore/ | chore |
| style/ | style |
| test/ | test |
プロジェクト種別(zen-config.yml の project.type)に応じたテンプレートを使用。
テンプレートファイル: templates/pr/{project_type}.md
言語一貫性ルール:
PR 本文は Phase 3.1 で決定した言語と同じ言語 で生成する:
| 要素 | 言語統一の対象 |
|---|---|
| セクション見出し | ## Summary / ## 概要 など |
| 定型文 | Closes #XX の説明文など |
| チェックリスト項目 | - [ ] Tests added / - [ ] テスト追加 など |
言語別テンプレート例:
以下は実行時に動的生成される PR 本文の出力例です(静的テンプレートファイルではありません):
日本語(ja):
## 概要
{summary}
## 関連 Issue
Closes #{number}
## 変更内容
{changes}
## チェックリスト
- [ ] テスト追加/更新
- [ ] ドキュメント更新
英語(en):
## Summary
{summary}
## Related Issue
Closes #{number}
## Changes
{changes}
## Checklist
- [ ] Tests added/updated
- [ ] Documentation updated
本文に含める情報:
Closes #{number})ローカルブランチをリモートにプッシュ:
git push -u origin {branch_name}
gh pr create --draft --base "{base_branch}" --title "{title}" --body "{body}"
Phase 3 完了後(PR 作成後)、チェックポイントを更新:
Write ツールで .zen/memory/checkpoint.json を更新:
{
"version": "1.0",
"command": "zen:pr:create",
"issue_number": {issue_number|null},
"branch": "{branch_name}",
"phase": "phase3",
"timestamp": "{ISO8601_timestamp}",
"context": {
"pr_number": {pr_number},
"pr_title": "{title}",
"pr_state": "draft"
}
}
Issue の作業メモリコメントを自動的に更新する。
PR 作成時に以下の情報を自動収集:
# 変更ファイルの取得
git diff --name-status origin/{base_branch}...HEAD
# コミット履歴の取得
git log --oneline origin/{base_branch}...HEAD
# コメント ID を取得
comment_id=$(gh api repos/{owner}/{repo}/issues/{issue_number}/comments \
--jq '.[] | select(.body | contains("🧘 zen 作業メモリ")) | .id')
# コメントが見つかった場合のみ更新
if [ -n "$comment_id" ]; then
gh api repos/{owner}/{repo}/issues/comments/{comment_id} \
-X PATCH \
-f body="{updated_body}"
fi
作業メモリに以下を自動追記:
### 進捗
- [x] 実装完了
- [x] PR 作成済み
### 変更ファイル
| ファイル | 状態 |
|---------|------|
| {path} | {status} |
### 関連 PR
- #{pr_number}: {pr_title}
- URL: {pr_url}
- 作成日時: {timestamp}
### コミット履歴
{commit_log}
ステータスの判定:
A → 追加M → 変更D → 削除R → 名前変更注意: 作業メモリコメントが見つからない場合は更新をスキップし、警告を表示する。
ドラフト PR #{pr_number} を作成しました
タイトル: {title}
URL: {pr_url}
関連 Issue: #{issue_number}
次のステップ:
1. PR の内容を確認
2. `/zen:pr:review` でセルフレビュー
3. `/zen:pr:ready` で Ready for review に変更
Phase 4 完了後、チェックポイントを更新:
Write ツールで .zen/memory/checkpoint.json を更新:
{
"version": "1.0",
"command": "zen:pr:create",
"issue_number": {issue_number|null},
"branch": "{branch_name}",
"phase": "phase4",
"timestamp": "{ISO8601_timestamp}",
"context": {
"pr_number": {pr_number},
"pr_url": "{pr_url}",
"work_memory_updated": {true|false}
}
}
PR 作成が正常に完了した場合、チェックポイントを削除:
rm -f .zen/memory/checkpoint.json
エラー: リモートへのプッシュに失敗しました
考えられる原因:
- ネットワーク接続の問題
- 認証エラー
- リモートブランチとの競合
対処:
1. ネットワーク接続を確認
2. `gh auth status` で認証状態を確認
3. `git pull --rebase origin main` で最新を取得
4. 再度実行
エラー: PR の作成に失敗しました
考えられる原因:
- 同じブランチの PR が既に存在
- 権限不足
- ネットワークエラー
対処:
1. `gh pr list` で既存 PR を確認
2. 権限を確認
3. 再度実行
警告: Issue #{number} が見つかりません
Issue なしで PR を作成しますか?
オプション:
- はい、作成する
- 別の Issue を指定
- キャンセル
gh コマンド、git コマンド実行zen-config.yml の language 設定に従って PR タイトル・本文の言語を決定:
| 設定値 | 動作 |
|---|---|
auto | ユーザーの入力言語を検出して同じ言語で生成 |
ja | 日本語で PR タイトル・本文を生成 |
en | 英語で PR タイトル・本文を生成 |
重要: PR タイトルと本文は必ず同じ言語で統一する。混在させない。
言語検出の優先順位 (auto 設定時):