Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:41:46 +08:00
commit 10fc322311
21 changed files with 1465 additions and 0 deletions

139
commands/create-pr.md Normal file
View 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` フラグで明示的に指定してください