GitHubでは既存のRepositoryをTemplateとして、新しいRepositoryを作成することができる

こんにちは、CX事業本部の夏目です。

本日はGitHubで面白い機能を見つけたので共有します。

Repository Template

Generate new repositories with repository templates

Sharing boilerplate code across codebases is a constant pattern in software development. Bootstrapping a new project with our favorite tools and directory structures helps programmers go from idea to "Hello world!" more efficiently and with less manual configuration. Today, we're excited to introduce repository templates to make boilerplate code management and distribution a first-class citizen on GitHub.

GitHubの既存のRepositoryをTemplateとし、Templateを元に新規Repositoryを作成できる機能です。

端的に言うと、Repositoryの複製を作成することのできる機能です。

forkとの違い

複製を作るならforkがあるじゃないかと思うかもしれません。
しかし、forkとは明確な違いがあります。

  • 一つのRepositoryからいくつでも複製を作成することができる
  • 元となったRepositoryのCommit履歴を継承しない
  • Templateとして利用できるのは自分がPushできるRepositoryのみ

forkでは1つのuser/organizationにおいて一つの複製しか作成できません。
しかし、Template Repositoryではいくらでも複製を作成できます。

forkでは元RepositoryのCommit履歴を持っていますが、Template Repositoryでは複製元のRepositoryのCommit履歴は持たず、新しいリポジトリとして作成されます。

forkでは他人のRepositoryを複製して自分のRepositoryにすることができますが、Template Repositoryではできません。
もちろん、他人のRepositoryをforkして自分のものにした後であればTemplate Repositoryで使用できます。

どう使う?

ボイラープレートとして使用するのかなぁと思います。

最近は様々なCLIツールでボイラープレートを吐き出せますが、自分で好きなボイラープレートを簡単に作成することができそうです。

使い方

RepositoryをTemplateとして使えるようにする

TemplateにしたいRepositoryのSetting タブ選択して、Template repositoryのチェックボックスをチェックします。
これだけで、Templateとして使用できるようになります。

Templateから新規Repositoryを作成する。

Repositoryの新規作成画面において、Repository templateから使用したいTemplateを選択します。
あとは、いつものようにRepository名を入力してRepositoryを作成します。

Tips

ファイルはすべてTemplateのものを使用することになる

先程のRepository作成画面をよく見ると、いくつかの項目がなくなっていることに気づくと思います。
Readmeの追加や、.gitignoreファイルとライセンスの選択が、Templateを指定すると使用することができません。

ライセンスとか.gitignoreをテンプレートと別にしたければ、Repository作成後変更しましょう。

シンボリックリンクは参照先を書いたテキストファイルになる

Repositoryの中でシンボリックリンクを使うことがたまにあると思いますが、シンボリックリンクがあるRepositoryをTemplateとするとシンボリックリンクは失われてしまいます。
シンボリックリンクがあったところには参照先を書いたテキストファイルに変わっているのです。

そのため、クローンしてきた後 再度シンボリックリンクを張る必要があります。

まとめ

いかがでしょうか?

Templateを作成することで、好きなボイラープレートを作成することができます。
とりあえず自分はサーバーレス開発のためのボイラープレートを作ってみようと思います。
みなさんもなにか作ってみてはいかがでしょうか?