Back

プッシュごとに自動的にプルリクエストを作成する

プッシュごとに自動的にプルリクエストを作成する

Gitの自動化により、開発ワークフローを大幅に合理化できます。このガイドでは、様々なツールとアプローチを使用して、コードがリポジトリにプッシュされるたびに自動的にプルリクエストを作成する方法を探ります。

重要なポイント

  • PRの自動作成には3つの方法があります:GitHub Actions、GitHub CLI、CI/CDツール
  • 適切な認証と権限を使用して、安全な自動化を実装する
  • 自動化されたプルリクエストを管理するためのベストプラクティスを理解する
  • ブランチ保護と条件付きPR作成ロジックを設定する

方法1:GitHub Actionsを使用する(推奨)

GitHub Actionsは、PRの作成を自動化するためのネイティブで信頼性の高い方法を提供します。設定方法は以下の通りです。

ステップ1:GitHub Actionsワークフローを作成する

  1. リポジトリに.github/workflows/ディレクトリがない場合は作成します
  2. auto-pr.ymlという名前の新しいファイルを作成します
  3. 以下の設定を追加します:
name: Auto PR on Push

on:
  push:
    branches:
      - 'feature/**'    # feature/*ブランチにマッチ
      - 'bugfix/**'     # bugfix/*ブランチにマッチ
      # 必要に応じてブランチパターンを追加

jobs:
  create-pull-request:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 適切なブランチ比較に必要

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: ""Auto-created PR from ${{ github.ref_name }}""
          title: ""Auto PR: ${{ github.ref_name }}""
          body: |
            Automated pull request created from push to ${{ github.ref_name }}
            
            Branch: ${{ github.ref_name }}
            Triggered by: ${{ github.actor }}
          branch: ${{ github.ref_name }}
          base: main
          labels: |
            automated-pr
            needs-review

ステップ2:リポジトリ設定を構成する

  1. リポジトリの「Settings → Actions → General」に移動します
  2. 「Workflow permissions」で「Read and write permissions」を選択します
  3. 変更を保存します

方法2:GitHub CLIを使用する

ローカルでの自動化を好むデベロッパーには、GitHub CLIがシンプルなソリューションを提供します。

ステップ1:GitHub CLIをインストールする

プラットフォームを選択してください:

  • macOS:brew install gh
  • Ubuntu/Debian:sudo apt install gh
  • Windows:winget install GitHub.cliまたは <https://cli.github.com> からダウンロード
  • その他のLinux:<https://github.com/cli/cli#installation> の手順に従ってください

ステップ2:GitHub CLIを認証する

gh auth login

ステップ3:プッシュ後のフックを設定する

プッシュ後のフックを作成・設定します:

#!/bin/bash

# 現在のブランチ名を取得
BRANCH=$(git rev-parse --abbrev-ref HEAD)

# main/masterブランチにはPRを作成しない
if [[ ""$BRANCH"" == ""main"" ]] || [[ ""$BRANCH"" == ""master"" ]]; then
    exit 0
fi

# PRがすでに存在するかチェック
PR_EXISTS=$(gh pr list --head ""$BRANCH"" --json number --jq length)

if [ ""$PR_EXISTS"" -eq 0 ]; then
    # PRが存在しない場合は作成
    gh pr create 
        --base main 
        --head ""$BRANCH"" 
        --title ""Auto PR: $BRANCH"" 
        --body ""Automated pull request created from $BRANCH"" 
        --label ""automated-pr""
fi

方法3:CI/CDツールを使用する

他のCI/CDプラットフォームを使用しているチームでは、GitHubのREST APIを使用してPRの自動化を実装する方法を以下に示します。

Jenkinsパイプラインの例

pipeline {
    agent any
    
    environment {
        GITHUB_TOKEN = credentials('github-token')
    }
    
    stages {
        stage('Create PR') {
            steps {
                script {
                    def branchName = sh(
                        returnStdout: true, 
                        script: 'git rev-parse --abbrev-ref HEAD'
                    ).trim()
                    
                    // main/masterにはPRを作成しない
                    if (branchName != 'main' && branchName != 'master') {
                        def response = sh(
                            returnStdout: true,
                            script: """"""
                                curl -X POST 
                                    -H 'Authorization: token ${GITHUB_TOKEN}' 
                                    -H 'Accept: application/vnd.github.v3+json' 
                                    https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/pulls 
                                    -d '{
                                        ""title"": ""Auto PR: ${branchName}"",
                                        ""head"": ""${branchName}"",
                                        ""base"": ""main"",
                                        ""body"": ""Automated pull request created from Jenkins pipeline""
                                    }'
                            """"""
                        )
                    }
                }
            }
        }
    }
}

ベストプラクティスとセキュリティに関する考慮事項

  • メインブランチにブランチ保護ルールを有効にする
  • 標準化されたPRテンプレートを作成する
  • 自動化されたPRを区別するためにラベルを使用する
  • 自動レビュアー割り当てを設定する
  • リポジトリシークレットを使用してトークンを安全に保存する
  • 必要な範囲にトークンの権限を制限する
  • 認証トークンを定期的にローテーションする
  • 機密データの漏洩を防ぐために、自動化されたPR設定をレビューする

結論

プルリクエストの作成を自動化することで、一貫したコードレビュープロセスを確保し、手動の作業を減らすことができるため、開発ワークフローを大幅に改善できます。GitHub Actions、GitHub CLI、CI/CDツールのいずれを選択しても、これらの自動化手法を実装することで、開発プロセスを合理化し、より良いコード品質管理を維持するのに役立ちます。

よくある質問

PRの作成を自動化すると、コードレビュープロセスの一貫性が確保され、時間が節約され、人為的ミスが減り、コード変更の明確な履歴を維持できます。特に、複数の機能を同時に開発しているチームに役立ちます。

GitHub Actionsは、GitHubとのネイティブ統合、最小限のセットアップ、堅牢な機能を提供するため、ほとんどのユーザーに推奨されます。ただし、ローカルでの自動化を好む場合はGitHub CLIが良い代替手段であり、CI/CDツールは複雑なエンタープライズ環境に適しています。

提供されたスクリプトには、重複PRを防止するためのチェックが含まれています。GitHub CLIでは、新しいPRを作成する前に既存のPRをチェックします。GitHub Actionsでは、`peter-evans/create-pull-request`アクションを使用すると、これが自動的に処理されます。

はい、どの方法でもbodyパラメータを変更することでPRテンプレートをカスタマイズできます。ラベルについては、GitHub Actionsワークフローまたは CLIコマンドで追加できます。リポジトリ全体のPRテンプレートを設定することもできます。

トークンの保存にはリポジトリシークレットを使用し、適切な権限スコープを実装し、定期的に認証情報をローテーションします。GitHub Actionsでは、可能な限り組み込みのGITHUB_TOKENを使用します。CLIおよびCI/CDツールでは、必要最小限の権限を持つ専用のアクセストークンを作成します。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers