Files
2025-11-30 09:05:37 +08:00

7.9 KiB

PR Create

Git 変更分析に基づく自動 PR 作成で効率的な Pull Request ワークフローを実現します。

使い方

# 変更分析による自動 PR 作成
git add . && git commit -m "feat: ユーザー認証機能の実装"
「変更内容を分析して適切な説明文とラベルで Draft PR を作成してください」

# 既存テンプレート保持での更新
cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
「テンプレート構造を完全に保持して変更内容を補完してください」

# 段階的品質向上
gh pr ready
「品質確認完了後、Ready for Review に変更してください」

基本例

# 1. ブランチ作成とコミット
git checkout main && git pull
git checkout -b feat-user-profile
git add . && git commit -m "feat: ユーザー プロフィール機能の実装"
git push -u origin feat-user-profile

# 2. PR 作成
「以下の手順で PR を作成してください:
1. git diff --cached で変更内容を確認
2. .github/PULL_REQUEST_TEMPLATE.md を使用して説明文を作成
3. 変更内容から適切なラベルを最大 3 個選択
4. Draft PR として作成 (HTML コメント保持)# 3. CI 確認後に Ready 化
「CI が通ったら PR を Ready for Review に変更してください」

実行手順

1. ブランチ作成

# ガイドラインに従った命名規則: {type}-{subject}
git checkout main
git pull
git checkout -b feat-user-authentication

# ブランチ確認 (現在のブランチ名を表示)
git branch --show-current

2. コミット

# 変更をステージング
git add .

# ガイドラインに従ったコミットメッセージ
git commit -m "feat: ユーザー認証 API の実装"

3. リモートに Push

# 初回 Push(upstream 設定)
git push -u origin feat-user-authentication

# 2 回目以降
git push

4. 自動分析による Draft PR 作成

Step 1: 変更内容の分析

# ファイル変更の取得 (ステージ済み変更を確認)
git diff --cached --name-only

# 内容分析 (最大 1000 行)
git diff --cached | head -1000

Step 2: 説明文の自動生成

# テンプレート処理の優先順位
# 1. 既存 PR 説明 (完全保持)
# 2. .github/PULL_REQUEST_TEMPLATE.md
# 3. デフォルトテンプレート

cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md
# HTML コメント・区切り線を保持したまま空セクションのみ補完

Step 3: ラベルの自動選択

# 利用可能ラベルの取得 (非インタラクティブ)
「.github/labels.yml または GitHub リポジトリから利用可能なラベルを取得して、変更内容に基づいて適切なラベルを自動選択してください」

# パターンマッチングによる自動選択 (最大 3 個)
# - ドキュメント: *.md, docs/ → documentation|docs
# - テスト: test, spec → test|testing
# - バグ修正: fix|bug → bug|fix
# - 新機能: feat|feature → feature|enhancement

Step 4: GitHub API での PR 作成 (HTML コメント保持)

# PR 作成
「以下の情報で Draft PR を作成してください:
- タイトル: コミットメッセージから自動生成
- 説明文: .github/PULL_REQUEST_TEMPLATE.md を使用して適切に記入
- ラベル: 変更内容から自動選択 (最大 3)
- ベースブランチ: main
- HTML コメントは完全に保持」

方法 B: GitHub MCP(フォールバック)

// HTML コメント保持での PR 作成
mcp_github_create_pull_request({
  owner: "organization",
  repo: "repository",
  base: "main",
  head: "feat-user-authentication",
  title: "feat: ユーザー認証の実装",
  body: prBodyContent, // HTML コメントを含む完全な内容
  draft: true,
  maintainer_can_modify: true,
});

自動ラベル選択システム

ファイルパターンベース判定

  • ドキュメント: *.md, README, docs/documentation|docs|doc
  • テスト: test, spectest|testing
  • CI/CD: .github/, *.yml, Dockerfileci|build|infra|ops
  • 依存関係: package.json, pubspec.yamldependencies|deps

変更内容ベース判定

  • バグ修正: fix|bug|error|crash|修正bug|fix
  • 新機能: feat|feature|add|implement|新機能|実装feature|enhancement|feat
  • リファクタリング: refactor|clean|リファクタrefactor|cleanup|clean
  • パフォーマンス: performance|perf|optimizeperformance|perf
  • セキュリティ: security|securesecurity

制約事項

  • 最大 3 個まで: 自動選択の上限
  • 既存ラベルのみ: 新規作成禁止
  • 部分マッチ: キーワード含有による判定

プロジェクトガイドライン

基本姿勢

  1. 必ず Draft で開始: すべての PR は Draft 状態で作成
  2. 段階的品質向上: Phase 1(基本実装)→ Phase 2(テスト追加)→ Phase 3(ドキュメント更新)
  3. 適切なラベル: 最大 3 種類のラベルを必ず付与
  4. テンプレート使用: .github/PULL_REQUEST_TEMPLATE.md を必ず使用
  5. 日本語スペース: 日本語と半角英数字間に必ず半角スペース

ブランチ命名規則

{type}-{subject}

例:
- feat-user-profile
- fix-login-error
- refactor-api-client

コミットメッセージ

{type}: {description}

例:
- feat: ユーザー認証 API の実装
- fix: ログイン エラーの修正
- docs: README の更新

テンプレート処理システム

処理優先順位

  1. 既存 PR 説明: 既に記述されている内容を完全に踏襲
  2. プロジェクトテンプレート: .github/PULL_REQUEST_TEMPLATE.md 構造を維持
  3. デフォルトテンプレート: 上記が存在しない場合

既存内容保持ルール

  • 一文字も変更しない: 既に記述されている内容
  • 空セクションのみ補完: プレースホルダー部分を変更内容で埋める
  • 機能的コメント保持: <!-- Copilot review rule --> などを維持
  • HTML コメント保持: <!-- ... --> を完全に保持
  • 区切り線保持: --- などの構造を維持

HTML コメント保持の対処法

重要: GitHub CLI (gh pr edit) は HTML コメントを自動エスケープし、シェル処理で EOF < /dev/null などの不正な文字列が混入する場合があります。

根本的解決策:

  1. GitHub API の --field オプション使用: 適切なエスケープ処理で HTML コメント保持
  2. テンプレート処理の簡素化: 複雑なパイプ処理やリダイレクトを避ける
  3. 完全保持アプローチ: HTML コメント削除処理を廃止し、テンプレートを完全保持

レビューコメント対応

# 変更後の再コミット
git add .
git commit -m "fix: レビュー フィードバックに基づく修正"
git push

注意事項

HTML コメント保持の重要性

  • GitHub CLI 制限: gh pr edit は HTML コメントをエスケープ、不正文字列混入
  • 根本的回避策: GitHub API の --field オプションで適切なエスケープ処理
  • テンプレート完全保持: HTML コメント削除処理を廃止し、構造を完全維持

自動化の制約

  • 新規ラベル禁止: .github/labels.yml 定義外のラベル作成不可
  • 最大 3 ラベル: 自動選択の上限
  • 既存内容優先: 手動で記述された内容は一切変更しない

段階的品質向上

  • Draft 必須: すべての PR は Draft で開始
  • CI 確認: gh pr checks で状態確認
  • Ready 移行: 品質確認完了後に gh pr ready
  • テンプレート完全遵守: プロジェクト固有の構造を維持