はじめに
こんにちは、@mellbrother です。
みなさん、PRテンプレを一箇所で管理できればメンテが簡単なのにと思ったことはないでしょうか?
複数のリポジトリを取り扱う際、同じようなPRテンプレを各リポジトリに追加しているケースも多いかと思います。
頻繁に更新するものではないのですが、いざ更新するとなるとリポジトリの数だけPRテンプレを最新化する必要があり、結構面倒です。
また、PRテンプレ更新のたびに、全てのリポジトリのPRテンプレをしっかり更新していれば、各リポジトリの更新作業が同じになるので、多少作業は減りますが(それでも面倒ですが...)、更新できていないリポジトリがあると差分がどこかをチェックする必要があり、より面倒です。
今回はこの手間をなくすためにPRテンプレを一箇所で管理し、各リポジトリでそれぞれPRテンプレをメンテしなくて良いような構成を考えてみました。
興味のある方は読んでみてください。
この記事の対象者
- 複数のリポジトリで同じPRテンプレを使用している人
- PRテンプレを一箇所で管理したい人
設定手順
PRテンプレを管理するリポジトリを作成
まずは、PRテンプレを管理するリポジトリを作成しましょう。
このリポジトリにマークダウン形式のPRテンプレを追加していくことになります。
今回はPR-Templateという名前でリポジトリを作成しました。
PRテンプレとしてはtemplate1.mdというファイルを作成し、追加しています。
(テンプレが複数ある場合は複数置いてしまって大丈夫です)
開発用リポジトリでPRテンプレを使用できるように設定
続いて、開発用のリポジトリで先ほど作成したPRテンプレを使用できるように設定をしていきましょう。
開発用リポジトリを作成
開発用のリポジトリがない場合は新規に作成します。
(作成した場合は、クローンをしておいてください)
今回はpr-template-shareという名前でリポジトリを作成しました。
(作成時点では空のフォルダで大丈夫です)
git subtreeでPRテンプレを追加
開発用のリポジトリにPRテンプレを追加していきましょう。
まずはリモートリポジトリの登録です
先ほどクローンしたフォルダを開き、ターミナルで以下のコマンドを実行します(gitパスは画像の部分です)。
git remote add <任意の名前(今回はPR-Template)> <PR-Templateのgitパス>
正しく登録できたかはこちらのコマンドで確認できます。
git remote -v
続いて、git subtreeを使ってPRテンプレを追加します。
git subtree add --prefix=.github/PULL_REQUEST_TEMPLATE PR-Template main
.github/PULL_REQUEST_TEMPLATE
フォルダの下 に template1.md
があればOKです。
実際に使ってみる
それではPRテンプレが使えるのか確認してみましょう。。
まず、開発用のリポジトリでブランチを切り、何らかの変更を加えてPUSHします。
その後githubで開発用のリポジトリを開き、PRを作成していきます
github の画面に表示される Compare & pull request、または New pull request を押してください (その後に表示される下記画像のCreate pull request は押下しないでください)。
この時点でPRテンプレは表示されていないと思いますが、この画面のURLにクエリパラメータを付与すればPRテンプレを適用することができます。
今表示している画面のURLの後ろに?expand=1&template=template1.md
を追加して Enter を押してみてください。
PRテンプレが適用されていることがわかると思います。
クエリパラメータの設定を自動化する
上に記載した内容でPRテンプレの適用は完了しましたが、毎回クエリパラメータを付与するのは面倒ですよね。
そのため、今回はchrome拡張を利用して、クエリパラメータの付与を自動化してみようと思います。
まず、chrome の拡張機能のRequestlyを入れましょう(リダイレクトができれば他のものでも大丈夫です)。
その後、Requestlyで
/https://github.com/[アカウント名]/([0-9a-zA-Z._/\-]+)/compare/([0-9a-zA-Z._/\-]+)/
を
https://github.com/[アカウント名]/$1/compare/$2?expand=1&template=template1.md
にリダイレクトさせるように設定しましょう(アカウント名は適宜変えてください)。
これで設定は完了です。
※ 特定のリポジトリのみリダイレクトさせたい場合などは、正規表現の値を調整してください
Requestlyの設定後にPRを作成してみる
先ほどと同じようにPRを作成しましょう。
- 開発用のリポジトリでブランチを切り、何かしら変更を加え、PUSHする
- githubで開発用のリポジトリを開き、Compare & pull request、または New pull request を押す
今回はクエリパラメータを追加していないのにPRテンプレ適用済みのPRが作成されたと思います。
さいごに
いかがだったでしょうか?
このようにするとPRテンプレを一箇所で管理できるため、修正の際に複数のPRテンプレを更新しなくてよくなります。
管理しているPRテンプレを更新した際は、各リポジトリで最新化する必要がありますが、コマンドを実行するだけで済むので、修正コストもそこまでかからないと思います。
もし同じ悩みを抱えている方がいましたら、この方法を検討してみてください。
ではまたの機会に
作業していて気づいたこと
作業していて、注意したほうがいいなと思った点などを簡単に記載します。
- PRテンプレを管理するリポジトリに対する PUSH 権限が必要です
- 権限がない場合は、権限をもらうか、fork したリポジトリ等を利用してください
-
pull_request_template.md
は使用しないでください-
pull_request_template.md
があるとクエリパラメータを付与してもPULL_REQUEST_TEMPLATE
フォルダのPRテンプレが使用できないようです
-
-
git subtree add --prefix=.github/PULL_REQUEST_TEMPLATE template-share-repository main
実行時に、git の差分があるとfatal: working tree has modifications. Cannot add.
というエラーが発生するので、commit/stash などでファイル差分をなくしておいてください -
git subtree
と似た機能にgit submodule
がありますが、こちらではうまくいきませんでした- おそらくPRテンプレの実体が開発用リポジトリに存在しないため、PRテンプレの適用が正常に実行されないのだと思います