【ITニュース解説】Create a Pull request into another repository using github actions.

2025年09月06日に「Dev.to」が公開したITニュース「Create a Pull request into another repository using github actions.」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

GitHub Actionsで、あるリポジトリから別のリポジトリへPull Requestを自動作成する方法を紹介。Qoomon Access Tokensを使い、一時的なトークンを発行。リポジトリごとのポリシーを設定し、トークン権限を管理。ワークフロー内でトークンを利用し、PR作成を自動化する。

ITニュース解説

この解説では、GitHub Actionsを使って、あるリポジトリから別のリポジトリへプルリクエストを自動的に作成する方法を説明する。具体的には、mkdotenvプロジェクトで必要になった、Homebrew tapリポジトリへの自動リリースを例に、その手順と設定を詳しく解説する。

従来、GitHub Actionsの標準機能であるGITHUB_TOKENでは、リポジトリを跨いでのプルリクエスト作成が難しい場合があった。また、個人アクセストークン(PAT)をリポジトリのシークレットとして保存する方法は、セキュリティ上のリスクがある。そこで、Qoomon Access Tokens for GitHub ActionsというGitHub Appを利用することで、より安全かつ柔軟な権限管理を実現する。

このAppの導入には、GitHub Marketplaceからインストールする必要がある。インストール自体は無料だが、Appの権限設定のために、標準的なGitHubの購入フロー(0ドル)を経由する必要がある。

Qoomon Access Tokens for GitHub Actionsを利用する上で重要なのが、トークンポリシーの設定だ。ポリシーには、グローバルポリシーとローカルポリシーの2種類がある。

グローバルポリシーは、.github-access-tokenという名前のリポジトリにaccess-token.yamlファイルを作成して定義する。このファイルでは、どのリポジトリがトークンをリクエストできるか、どのような操作が許可されるかといった、組織全体またはユーザー全体のマスターポリシーを定義する。例えば、originフィールドでポリシーの適用範囲となるリポジトリを指定し、allowed-repository-permissionsセクションで、トークンが持つことのできる最大の権限(actions, contents, pull-requestsなど)を設定する。statementsセクションでは、どのワークフローやブランチがトークンをリクエストできるか、そしてそれらにどのような権限を与えるかを定義する。

ローカルポリシーは、プルリクエストを受け入れる側のリポジトリ(ターゲットリポジトリ)の.github/access-token.yamlファイルに定義する。このファイルは、グローバルポリシーで設定されたルールを、特定のリポジトリに対して明示的に許可するためのものだ。ここでもoriginフィールドでポリシーの適用範囲となるリポジトリを指定し、statementsセクションで、どのリポジトリからのアクションを許可するか、そしてどのような権限(contents, pull-requestsなど)を与えるかを指定する。

具体的なGitHub Actionsのワークフローの実装例を見てみよう。この例では、test_homebrewというジョブで、Homebrew tapリポジトリへのプルリクエストを作成している。

まず、actions/checkout@v4を使ってリポジトリをチェックアウトし、actions/download-artifact@v4でHomebrewのformulaファイルをダウンロードする。

次に、qoomon/actions--access-token@v3アクションを使って、GitHub Appトークンを生成する。この時、repositoryフィールドでターゲットリポジトリ(Homebrew tapリポジトリ)を指定し、permissionsフィールドで必要な権限(contents: write, pull_requests: write)を設定する。

生成されたトークンは、後続のステップで環境変数GH_PATとして利用する。Gitの設定を行い、Homebrew tapリポジトリをクローンする際には、HTTPS URLにトークンを埋め込むことで認証を行う。

git clone https://x-access-token:${GH_PAT}@github.com/pc-magas/homebrew-mkdotenv.git

その後、新しいブランチを作成し、formulaファイルをコピーまたは修正し、変更をコミットしてプッシュする。

最後に、GitHub APIを使ってプルリクエストを作成する。この際、AuthorizationヘッダーにBearerトークンとして生成されたトークンを渡す。

curl --fail-with-body -X POST https://api.github.com/repos/pc-magas/homebrew-mkdotenv/pulls \
  -H "Authorization: Bearer $GH_PAT" \
  ...
  -d '{"title": "Update formula...", "head": "...", "base": "...", "body": "..."}'

--fail-with-bodyオプションをcurlコマンドに含めることで、APIがエラーを返した場合にワークフロー全体が失敗し、プルリクエストの作成が成功したかどうかをより確実に確認できる。

この方法を用いることで、GitHub Actionsから別のリポジトリへのプルリクエストを、安全かつ自動的に作成することが可能になる。