Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

私が最近知ったGitHubのいくつかの便利機能

こんにちは。Webシステム開発や各種ソフトウェア開発において GitHub を利用する場面は多いかと思いますが、私が最近知った便利な機能をメモがてらいくつか紹介しようと思います。

Issue を Pull Request と関連付けて自動的にクローズさせる

docs.github.com

ある issue に対して Pull Request(以下PR)を作るというのは良くあることですが、PRを作る際に特定のキーワード(close, fix, resolve など詳しくはドキュメント参照)と対象のissue番号を書いておくと issue と PR が関連付けられます(画像1枚目, 2枚目)。右側のメニューに Linked issues という項目がありここに関連付けた issue が表示されます。

https://i.gyazo.com/127c48c1a7bca3d72a4cad2116f584e9.png

https://i.gyazo.com/9ef90b15d73400345557309a7e835826.png

この状態でPRがマージされると関連付けた issue が自動的にクローズされます!(画像3枚目, 4枚目) issue にはどのPRによってクローズされたかが明記され、また Linked pull requests という項目でも記録されます。

https://i.gyazo.com/7a17aecedf9402194ae3ff72c10fe416.png

https://i.gyazo.com/4ab694db3a239d4f47ac3c72b7a38fdc.png

これまではマージして自分で(もしくは他の誰かが) issue をクローズするという一手間がありましたが、自動化されるので楽できますね。あとは明示的に issue と特定のPRが関連しているというのが示されるのも後々振り返るときに便利だと思います。

複数の issue テンプレート作成

docs.github.com

レポジトリの issue テンプレートを複数作成できる機能について紹介します。

レポジトリの Settings から Features という項目内の Set up templates ボタンをクリック。 https://i.gyazo.com/281d63ceb5001edc6b8b9a1d6b6bfc5b.png

いくつかテンプレートの種類が用意されています。今回は既存のテンプレートを全て有効にしました。

https://i.gyazo.com/e04c26578dc5f7e13a029d233cdcd20a.png

https://i.gyazo.com/39e99649edcd760385f984e4f3de3204.png

Propose changes ボタンをクリックするとコミット操作メニューが表示されます。設定がレポジトリのコードとして含まれることが予想されます。

https://i.gyazo.com/bfd14a5edb297b07774e7bbe4e4670eb.png

上記のメニューからコミットしたところ、 .github/ISSUE_TEMPLATE というディレクトリができておりその中にはテンプレートごとのmarkdownファイルが生成されていました。このファイルを編集するとテンプレートの内容を変更できました。

https://i.gyazo.com/7bb8a410c4192ec8421486d3bc473e89.png

この状態で新しく issue を作成すると以下のようにテンプレートを選択できるようになっていました。リストの下には小さく open blank issue というリンクがあり、これまで同様の空の issue 編集ページに飛ぶことも可能です。

https://i.gyazo.com/82b32767dc1e4e4c979a052c69d21fa5.png

試しに Feature request というテンプレートを選択すると予め決められたフォーマットで文言がセットされた状態の編集ページが表示されました。

https://i.gyazo.com/910d5c796c02647a59a9279698e69a61.png

issue の体裁がある程度決まっているとメンテナンスする人にとっては情報を把握しやすくなり、issue を報告した人とのコミュニケーションの質が高まるため良いプラクティスだと思っています。テンプレート自体は以前から機能としてあったと思いますが、複数種類のテンプレートを用意できるのは助かるケースも多いのかなと思います。技術コミュニティの運営で issue を使って管理することがあり meetup を開催するに当たって毎回テンプレート的な issue をいくつか作成するため、こういう使い方にも応用できそうだなと思います。

コミット署名の必須化

docs.github.com

ブランチの保護に関してコミットに署名が付いたもののみマージを許可する設定が可能です。

レポジトリの Settings > Branches から Branch protection rules を追加します。Branch name patternは必須だったので、一旦ワイルドカードにして Require signed commits にチェックをいれ更新します。

https://i.gyazo.com/a89682b1650588061485083e4d98d5bb.png

この設定後、これまで通りローカルで新しいブランチを作成後コミット、プッシュしてPRを作成したところマージがブロックされました。

https://i.gyazo.com/d1a9ab7f82b8cbc3edc59f67bc9617b2.png

ということで署名方法の一つであるGPGを使ってコミットしてみます。GPGについては詳しくありませんので作成方法等は以下のドキュメントを参照してください。

docs.github.com

GPGを設定してコミットを行いPRを作成しました。コミットには verify マークが付与され、またマージもできるようになりました。

https://i.gyazo.com/c8e3ae20579f0037485eded28a92c52f.png

コミット署名によってコミットのなりすまし・偽装を防ぐことが期待されます。ぱっと見でこのユーザーのコミットだから信頼できると感じることはあるので署名によって担保しておくのは仕組みとして良いと思います。ローカルで署名の設定が少し手間取った(個人の感想)のでプロジェクトに導入する際はメンバー内で合意が取れているのと周知が必要になりそうです。

まとめ

GitHubに備わっているいくつかの便利な機能を紹介しました。使っていてちょっと不便というか自動化されてたら嬉しいということがいつの間にか実装されていてとてもありがたいです。いつも通り使っていても新しい機能や改善に気付かないこともあるので、自らに管理権限のあるレポジトリを作成して気が向いたときにいろいろ動かしてみることをオススメします。

今回調査のために作ったレポジトリです。 github.com