【GitHub】GitHubのプルリクエストテンプレートを作ってくれと言われる前に知っておくべきこと


※2025年1月27日にアドベントカレンダーとして登録

## この記事のポイント

- プルリクエストとは何かについて説明しているよ
- GitHubのプルリクエストテンプレートについて書いているよ
- GitHubのプルリクエストテンプレートにはさまざまな作り方があるよ

## はじめに

この記事では以下の記事を参考に基本的なプルリクエストテンプレートの作り方について説明しています。

[参考：リポジトリ用のプルリクエストテンプレートの作成 - GitHub Docs](https://docs.github.com/ja/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository)

さまざまな作り方があるため、その中でも基本となる作り方についてついて見ていきます。ひょっとすると「そこから解説するのか」と記事を読み始めると思いますが、入門みたいなところがあるのでご容赦ください。

## そもそもプルリクエスト（プルリク）とは

本題の前にプルリクエストとはなんでしょうか。よくエンジニア同士の会話で「それ、プルリク送っといて」あるいは「プルリク作っておいて」という感じで言葉が飛び交います。このプルリクという言葉は簡単に説明すると変更要望または修正提案のことです。

由来はきっと諸説あるとは思いますが、実際のところ言葉通りではあると思います。
成果物をPull（引用）して変更をRequest（要求）するというニュアンスが個人的にはしっくりきます。（Forkというアクションを考慮しても）

ちなみに実務においてはPRと訳されることが多いです。（多いってかもはやそれが普通ですらあります。）
なお、GitHub以外でも`プルリク`という言葉は使われることがあります。

### 余談：マージリクエスト（マジリクと言ってる人もいる）

GitHubにおいては変更要望または修正提案のことをプルリクエストと呼称しますが、GitLabではマージリクエスト（マジリク）と読んだりします。少なくともGitHubを使っている場合においてはマージリクエストという言葉は使いません。

もっと詳しく知りたい方は以下のリンクをチェックしていただければと思います。

[マージリクエスト | GitLab](https://gitlab-docs.creationline.com/ee/user/project/merge_requests/)

ちなみにお気づきの人もいるとは思いますが、略称はMRです。GitLab公式でもMRと省略されています。

## プルリク、どういうときに使う

たとえば、以下のようなときに使います。

- バグを修正する（バグフィックス）
- 機能を追加・削除

他にもリポジトリによってはサービスのロードマップ管理として使われることがあります。
私がQiitaでよく紹介しているAWSはサービスの追加要望をGitHubで管理していたりします。
※たとえば、AWS AmplifyなどはGitHubで管理されています。

- [aws-amplify](https://github.com/aws-amplify)

ともかくプルリクは主に機能の管理に使われることが多いです。

## プルリクエストテンプレートとは

ではプルリクエストテンプレートとはなんでしょうか。
プルリクは変更要望を送るものなので文面で自身の要求を伝える必要がありますが、自由に記載されてもリポジトリのオーナーあるいはプルリクをレビューする人が困ってしまいます。

つまり、プルリクエストテンプレートとは簡単に説明すると変更要望を送るときのフォーマットです。

## プルリクエストテンプレートはどう作ればいい

- リポジトリのルートディレクトリにテンプレートをおく
- リポジトリ内に`docs`ディレクトリを作ってテンプレートをおく
- リポジトリ内に`.github`ディレクトリを作ってテンプレートをおく

他にも`.github`や`docs`ディレクトリ内でフォルダを作成してプルリクエストテンプレートを用途によって分けたり、クエリ文字列（URLの`?`から後ろの文字列、クエリパラメータ）で制御することもできます。

## 作り方の使い分け

作り方が複数あるとわかったところでどう使い分けていけば良いでしょうか。ここでは個人の見解レベルでそれぞれのプルリクエストテンプレートの作り方についてどういうときに利用できるかを見ていきます。

### リポジトリのルートディレクトリにテンプレートをおく

一番最初に思いつく方法でもっともシンプルな方法です。`pull_request_template.md`という名前でリポジトリに保存します。`pull_request_template.md`という名前で保存するので複数のテンプレートを保存できません。

![スクリーンショット 2025-01-17 6.51.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/70336e04-31a8-244a-5be1-58babcab40d5.png)

### リポジトリ内に`docs`ディレクトリを作ってテンプレートをおく

ルートディレクトリに置かず、`docs`フォルダにテンプレートを置きます。フォルダが変わっただけでこの方法においても置けるテンプレートは1つだけです。
※`pull_request_template.md`という名前で保存するため

![スクリーンショット 2025-01-17 6.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/3f367c3c-01fd-3de5-8032-9f047c3b5fae.png)

フォルダを切っておくことでだいぶ整理された形になると思います。

### リポジトリ内に`.github`ディレクトリを作ってテンプレートをおく

この方法はプルリクエストテンプレートを隠しフォルダに保存します。`docs`フォルダと異なるのは隠すところであり、この場合においても`pull_request_template.md`という名前で保存するため、置けるテンプレートは1つだけです。

（とはいえ、実際のところ隠しフォルダを表示する設定にしている人にはだいだいが見えているので隠しきれていない）

![スクリーンショット 2025-01-17 6.51.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/54eb6b2e-2363-ef57-e094-5ed7578dd00e.png)

この方法においてはクエリパラメータを使ってテンプレートを変えることも可能です。

## まとめ

今回はGitHubのプルリクエストテンプレートを作る方法について確認しました。
ISSUEテンプレートにさまざまな作り方があることは知っていたんですが、プルリクエストテンプレートの作り方は知りませんでした。

（とはいえ、有名なOSSのソースコードを読んでいると複数の作り方があることに気づく。）

他にもプルリクエストを送るためのURLに対して決まった形式でクエリ文字列を送ると
決まった形でテンプレートが作成できます。うまく活用していきましょう。