.githubリポジトリでGitHubのPull Requestやissueのテンプレートをアカウント全体に適用する方法


## もっと早くに知りたかった `.github` リポジトリの効果
　Twitterで知った超絶お役立ち情報。1週間前の自分に教えてあげたい…
　
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">.githubリポジトリ作ればorganization全体にpull request template等を全体適応できるのを知った<a href="https://t.co/DNu5Falkae">https://t.co/DNu5Falkae</a></p>&mdash; 1coin (@1coin178) <a href="https://twitter.com/1coin178/status/1315880335033339904?ref_src=twsrc%5Etfw">October 13, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

　元々リポジトリの中に`.github`ディレクトリを作ると、そのリポジトリに対してPull Requestのテンプレートやissueのテンプレートを作ったりすることができる機能があるのは知っていました。

　今回紹介するのは、その機能をさらに拡張させて`.github`リポジトリを作成することで、アカウント全体（Organizationの場合はOrganization全体）にテンプレートの適用範囲を拡大する方法です。

　このテクニックは知りませんでした。正確には「絶対あるに違いない」とは思って探したことはあるのですが、探しきれずに諦めていました。

　公式のドキュメントは以下参照ください。

[デフォルトのコミュニティ健全性ファイルを作成する](https://docs.github.com/ja/free-pro-team@latest/github/building-a-strong-community/creating-a-default-community-health-file)

[リポジトリ用のプルリクエストテンプレートの作成](https://docs.github.com/ja/free-pro-team@latest/github/building-a-strong-community/creating-a-pull-request-template-for-your-repository)

　ポイントは以下です。

- `.github`リポジトリのPR, issue, Contributionのテンプレートがアカウント全体（Organization全体）に適用できる
- リポジトリに`.github`ディレクトリで別のテンプレートが設定されている場合は、`.github`リポジトリのテンプレートより、各リポジトリの`.github`ディレクトリのテンプレートが優先される
- `.github`リポジトリはpublic設定にする必要がある

　使い方としては、`.github`リポジトリにアカウント全体（Organization)のデフォルトとなるようなテンプレートを作成。そこから外れるようなテンプレートを使いたい場合は、各リポジトリで`.github`ディレクトリ作って設定個別設定するという使い方になると思います。

　`.github`リポジトリを公開設定にしないといけないのは、要注意ポイントです。会社で、外部に公開せずにOrganizationを使っていて、テンプレートを外に公開したくない場合は使えないですね。OSSの開発をしていて`Contribution`の仕方などを外に公開することを想定した仕様なのだと思います。

## `.github`リポジトリを作ってみた
　作ってみたリポジトリは以下です。

<a href="https://github.com/karaage0703/.github"><img src="https://github-link-card.s3.ap-northeast-1.amazonaws.com/karaage0703/.github.png" width="460px"></a>

　作り方は、普通に`.github`というリポジトリを新規作成するだけです。最初に`.`があるのが少し不安ですが、普通に作れます。

![github_repo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/8ace775a-b963-48e8-a673-2d2191b9dabe.png)

　とりあえず、PRのテンプレートを作ってみました。

```md
## Purpose

Purpose of Pull Request

## Effect

Effect of Pull Request

## Test

Test command

## Test Environment

### Hardware

ex: PC(Windows) / PC(Mac) / Raspberry Pi/ Jetson Nano

### Software(Library)

ex: TensorFlow==1.15.3...

## Memo

```

参考：[Pull Request のフォーマットを決めるとレビューの効率が3倍よくなる](https://engineering.crocos.jp/post/98455177675/pull-request-%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B%E3%81%A8%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E5%8A%B9%E7%8E%87%E3%81%8C3%E5%80%8D%E3%82%88%E3%81%8F%E3%81%AA%E3%82%8B)

　これを適用した状態で、自分のアカウントで新たなリポジトリ作って、試しに自分でPRしてみました。

　先ほど設定したPRのテンプレートが適用されています！

![PR_Template.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/81919/152e9822-987b-f624-cc4d-781f9ac86c22.png)

　同じ要領で、issueのテンプレートなども設定できます。

## まとめ
　`.github`リポジトリでPull Requestやissueのテンプレートをアカウント全体に適用する方法を紹介しました。たくさんリポジトリある人にとっては便利ですね。私も自分のリポジトリ100を超えているので、一気にデフォルトのテンプレートを設定できるのは助かりますね。

　PRとかテンプレートを作成しておくと、PRする人も、レビューする人もポイントを抑えられるので、お互い手間が少し減るかもしれません。仕事でGitHubのOrganizationを使っている人とかにも便利そうですが、`.github`リポジトリを公開(public)設定しないといけないのがネックですね。

　頑張って100以上のリポジトリにテンプレートを追加しようとしている人のために書きました。他に、オススメのPRやissueのテンプレートありましたら是非おしえてください。

## 関連記事
https://karaage.hatenadiary.jp/entry/2018/01/19/073000