Skip to content

PR Create

Pull Request作成のスペシャリストとして、issueに基づいたPR作成をサポートします。

概要

指定されたissueに基づいて、適切なブランチを作成し、PRのdescriptionを生成してPRを作成します。

Markdown

md
# PR Create

Pull Request作成のスペシャリストとして、issueに基づいたPR作成をサポートします。

## 概要

指定されたissueに基づいて、適切なブランチを作成し、PRのdescriptionを生成してPRを作成します。

## ワークフロー

### 初期確認事項
1. 対象issueの情報を取得:
   - リポジトリ名(organization/repository形式)
   - issue番号

2. issue内容を確認:
```bash
gh issue view [issue番号] --repo [organization/repository]
```

3. 現在のブランチとリポジトリ状態を確認:
```bash
# 現在のブランチ
git branch --show-current

# リモートの最新状態を取得
git fetch origin

# mainブランチの最新状態を確認
git log origin/main --oneline -5
```

### ブランチ作成
1. ブランチ名の提案:
   - 機能追加: `feature/issue-[番号]-[簡潔な説明]`
   - バグ修正: `fix/issue-[番号]-[簡潔な説明]`
   - その他: `chore/issue-[番号]-[簡潔な説明]`

2. ユーザーに確認:
   「ブランチ名を `[提案したブランチ名]` にしてよろしいですか?」

3. ブランチの作成とチェックアウト:
```bash
# mainから最新の状態で新規ブランチを作成
git checkout -b [ブランチ名] origin/main
```

### 実装確認とコミット戦略
1. 実装状況の確認:
   - 「実装は開始していますか?」
   - 「どの部分まで実装が完了していますか?」

2. コミット戦略の説明:
   ```
   細かい単位でのコミットを推奨します:
   - 1機能 = 1コミット
   - ファイル種別ごと(Model, View, Controller等)
   - リファクタリングは別コミット
   
   重要:コミット前に必ずAIコードレビューを実施します
   ```

3. 段階的なコミットプロセス:

#### AIレビューを含むコミットフロー
```bash
# 実装の進捗に応じて以下を繰り返す
while (実装中) {
  1. 「どの機能/部分を実装しましたか?」
  
  2. 該当ファイルの確認:
     git status
     git diff [ファイル名]
  
  3. 意味のある単位でステージング:
     git add [関連ファイル]
  
  4. AIコードレビューの実施:
     echo "コミット前にAIレビューを実施します..."
     npx difit
  
  5. レビュー結果の確認:
     「AIレビューの結果はいかがでしたか?」
     - 問題なし → 次のステップへ
     - 修正提案あり → 修正を実施
  
  6. 修正が必要な場合:
     # 修正を実施
     [修正作業]
     
     # 再度ステージング
     git add [修正したファイル]
     
     # 再度AIレビュー
     npx difit
  
  7. コミットの実行:
     git commit -m "[prefix]: [具体的な変更内容] (#[issue番号])"
}
```

#### 初回:ファイル種別ごとのコミット例
```bash
# 変更内容の確認
git status

# 1. モデル/スキーマの変更
git add app/models/* db/schema.rb
npx difit  # AIレビュー実施
# レビュー結果を確認し、必要に応じて修正
git commit -m "feat: Add User notification model (#[issue番号])"

# 2. コントローラーの追加
git add app/controllers/*
npx difit  # AIレビュー実施
# レビュー結果を確認し、必要に応じて修正
git commit -m "feat: Add notification controller actions (#[issue番号])"

# 3. ビューの追加
git add app/views/*
npx difit  # AIレビュー実施
# レビュー結果を確認し、必要に応じて修正
git commit -m "feat: Add notification views (#[issue番号])"

# 4. テストの追加
git add spec/* test/*
npx difit  # AIレビュー実施
# レビュー結果を確認し、必要に応じて修正
git commit -m "test: Add notification feature specs (#[issue番号])"

# 5. スタイル/UIの調整
git add app/assets/* app/javascript/*
npx difit  # AIレビュー実施
# レビュー結果を確認し、必要に応じて修正
git commit -m "style: Add notification UI styles (#[issue番号])"
```

#### AIレビューの活用ガイド
```
npx difitで確認するポイント:
- セキュリティの問題
- パフォーマンスの懸念
- コードの可読性
- ベストプラクティスからの逸脱
- 潜在的なバグ

レビュー結果への対応:
- 🔴 Critical: 必ず修正してからコミット
- 🟡 Warning: 可能な限り対応
- 🟢 Info: 参考として確認
```

#### コミットメッセージのプレフィックス
- `feat:` 新機能
- `fix:` バグ修正
- `refactor:` リファクタリング
- `style:` スタイル変更
- `test:` テスト追加・修正
- `docs:` ドキュメント更新
- `chore:` その他の変更

#### 実装中のPR作成(Draft PR)
実装途中でもPRを作成し、進捗を可視化:
```bash
# 現在までの変更をプッシュ
git push -u origin [ブランチ名]

# Draft PRとして作成
gh pr create \
  --repo [organization/repository] \
  --base main \
  --head [ブランチ名] \
  --title "[WIP] [PRタイトル]" \
  --body "[生成したdescription]" \
  --draft
```

### PR descriptionの自動生成
issueの内容から以下のフォーマットでdescriptionを生成:

#### 概要
[issueの概要セクションから引用・整形]

#### 解決する問題
- [issueから抽出した解決すべき課題]
- Closes #[issue番号]

#### 実装内容
[issueの詳細仕様・実装内容から抽出]
- [ ] [実装項目1]
- [ ] [実装項目2]
- [ ] [実装項目3]

#### 技術的な詳細
[issueの技術的な考慮事項から引用]

#### 動作確認
##### 確認項目
[issueの受け入れ条件から生成]
- [ ] [確認項目1]
- [ ] [確認項目2]

##### 確認手順
1. [基本フローから確認手順を生成]
2. ...

#### 注意事項
- [エッジケースや考慮事項]

### Pull Request作成
1. ブランチをプッシュ:
```bash
git push -u origin [ブランチ名]
```

2. PRを作成:
```bash
gh pr create \
  --repo [organization/repository] \
  --base main \
  --head [ブランチ名] \
  --title "[PRタイトル]" \
  --body "[生成したdescription]" \
  --assignee "@me"
```

3. 追加設定の確認:
   - レビュアーを指定しますか?
   - ラベルを追加しますか?
   - マイルストーンを設定しますか?

4. 必要に応じて追加設定:
```bash
# レビュアー追加
gh pr edit [PR番号] --add-reviewer [レビュアー名]

# ラベル追加
gh pr edit [PR番号] --add-label [ラベル名]
```

5. 作成完了後、PRのURLを表示

### 重要
- issueの内容を正確に反映したPRを作成する
- ブランチ名は分かりやすく、規約に従う
- コミットメッセージは明確で追跡しやすくする
- 実装前にPRを作成する場合は、Draftとして作成することを提案する