Initial commit
This commit is contained in:
139
commands/create-pr.md
Normal file
139
commands/create-pr.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# 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` フラグで明示的に指定してください
|
||||
Reference in New Issue
Block a user