Files
gh-nanasess-eccube-dev-agen…/commands/create-pr.md
2025-11-30 08:41:46 +08:00

140 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PR作成コマンド
このコマンドは、現在のブランチからPull Requestを作成します。
PRテンプレートが存在する場合は自動的に適用し、remoteとの同期状態を確認してからPRを作成します。
## 手順
1. 現在のブランチとgit状態を確認
2. remoteとの比較を行い、pushが必要な場合は確認
3. PRテンプレートの存在を確認.github/pull_request_template.md など)
4. $ARGUMENTSからリポジトリ、ベースブランチを解析
5. ブランチの変更履歴を分析してPR説明を生成
6. PRテンプレートがある場合は、テンプレートの構造に沿って説明を生成
7. `gh pr create`でPRを作成
## 引数
$ARGUMENTS (オプション) - 以下の形式で指定可能:
- `--repo owner/repo` または `-R owner/repo`: フォーク先リポジトリを指定
- `--base branch` または `-B branch`: ベースブランチを指定(デフォルト: main/master
- `--draft`: ドラフトPRとして作成
- その他のテキスト: PR作成の追加コンテキストとして使用
例:
- `--repo upstream/repo --base develop`
- `--draft`
- `-R upstream/repo -B main`
## 実装詳細
### 1. 初期確認
1. `git status` で現在の状態を確認
2. `git branch --show-current` で現在のブランチ名を取得
3. ブランチ名からベースブランチを推測main/master/develop など)
### 2. Remote同期確認
1. `git rev-parse HEAD` でローカルの最新コミットを取得
2. `git fetch origin <branch>` でリモートの情報を更新し、`git rev-parse origin/<branch>` でリモートの最新コミットを取得(`git ls-remote origin <branch>` でも取得可能だが、出力からSHAを抽出する必要があるため、`git rev-parse`の方が直接的)
3. `git rev-list origin/<branch>..HEAD` でpush待ちのコミット数を確認
4. push待ちのコミットがある場合
- コミット一覧を表示
- AskUserQuestion ツールでpushの確認を求める
- 承認された場合のみ `git push -u origin <branch>` を実行
### 3. PRテンプレート確認
以下の場所を順番に確認:
1. `.github/pull_request_template.md`
2. `.github/PULL_REQUEST_TEMPLATE.md`
3. `.github/PULL_REQUEST_TEMPLATE/` ディレクトリ内の各ファイル
4. `docs/pull_request_template.md`
テンプレートが見つかった場合:
- テンプレートの内容を読み込む
- テンプレートのセクション構造を解析(## で始まる見出し)
- 各セクションに適切な内容を生成して埋める
### 4. $ARGUMENTS解析
1. `--repo` または `-R` フラグからリポジトリを抽出
2. `--base` または `-B` フラグからベースブランチを抽出
3. `--draft` フラグの有無を確認
4. その他のテキストは追加コンテキストとして保持
### 5. 変更内容の分析
1. ベースブランチを特定(引数 > mainブランチの検出
2. `git log <base>..HEAD --oneline` でコミット履歴を取得
3. `git diff <base>...HEAD` で変更内容を分析
4. `git diff <base>...HEAD --name-only` で変更ファイル一覧を取得
### 6. PR説明の生成
#### テンプレートがない場合:
デフォルトの構造で生成:
```markdown
## Summary
<変更内容の要約を箇条書きで記述>
## Changes
<主要な変更点を詳細に記述>
## Test plan
<テスト方法のチェックリスト>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
```
#### テンプレートがある場合:
テンプレートのセクション構造を保持し、各セクションに適切な内容を生成:
- **## Summary** / **## 概要**: コミット履歴から変更の要約を生成
- **## Changes** / **## 変更内容**: 主要な変更点を箇条書きで記述
- **## Test plan** / **## テスト計画**: テスト項目のチェックリストを生成
- **## Related issues**: 関連するIssue番号を検出コミットメッセージから
- **## Screenshots**: 必要に応じて画像追加を促す
- その他のセクション: テンプレートの指示に従って記述
### 7. PR作成
1. タイトル生成:
- 最新のコミットメッセージをベースにする
- 複数コミットの場合は、変更内容を要約したタイトルを生成
- Conventional Commits形式を尊重
2. `gh pr create` コマンド実行:
```bash
gh pr create \
--title "タイトル" \
--body "$(cat <<'EOF'
生成されたPR説明
EOF
)" \
[--repo owner/repo] \
[--base branch] \
[--draft]
```
3. PR URLを表示
## エラーハンドリング
- **ブランチが存在しない**: エラーメッセージを表示し、`git branch -a`で利用可能なブランチを表示
- **コミットがない**: ベースブランチとの差分がない場合は警告
- **push失敗**: エラーメッセージを表示し、権限やネットワークを確認するよう促す
- **PR作成失敗**: GitHub CLIのエラーメッセージを表示
- 認証エラー: `gh auth login` を案内
- すでにPRが存在: 既存のPR URLを表示
- リポジトリが見つからない: リポジトリ名を確認するよう促す
## 注意事項
- PRテンプレートは自動的に検出・適用されますが、カスタマイズが必要な場合は手動で編集してください
- ドラフトPRとして作成する場合は `--draft` フラグを使用してください
- フォークからのPRの場合は `--repo` フラグで上流リポジトリを指定してください
- ベースブランチが main/master 以外の場合は `--base` フラグで明示的に指定してください