abe

giboとgit configでスマートな.gitignoreを生成する

.gitignoreをプロジェクトの度手書きしていませんか?
毎度毎度 *.DS_Store や Thumbs.db をignoreファイルに含めていませんか?

地味に面倒くさいけどプロジェクトの最初だけだからまぁいいかとなりがちなgitignoreファイルをスマートに生成・管理しましょう。

gibo: git ignore boilerplate

フレームワーク固有・ディストリビューション固有のgitignoreの内容はほとんどの場合同一です。
GitHubが公開しているgitignoreのテンプレート集(github/gitignore: A collection of useful .gitignore templates)に使っているフレームワークなどがあれば、必要なテンプレートを選んでコピペすればOKです。

しかし、いちいちブラウザでこのページを開いたり、cloneするのも少し面倒です。
そんな面倒くさがりの我々のためにあるのが表題のgibo(simonwhitaker/gibo: A shell script for easily accessing gitignore boilerplates)です。
boilerplateは鋳型という意味から文例集・決まり文句というような意味がありますが、まさにgitignoreファイルの文例集といえるでしょう。

このツールはコマンドラインで利用します。
MacOS環境ではHomebrewを使って、Windows環境ではscoopやリポジトリのクローン、もしくはbatファイルから直接インストールします。
インストール方法はリポジトリを参考にしてください。

実際にgiboコマンドを叩いてみます。引数なしで実行するとusageが出力されます。
MacOS X Sierraで実行したのが以下のブロックです。

 $ gibo
gibo 1.0.4 by Simon Whitaker <sw@netcetera.org>
https://github.com/simonwhitaker/gibo

Fetches gitignore boilerplates from github.com/github/gitignore

Usage:
    gibo [options]
    gibo [boilerplate boilerplate...]

Example:
    gibo Python TextMate >> .gitignore

Options:
    -l, --list          List available boilerplates
    -u, --upgrade       Upgrade list of available boilerplates
    -h, --help          Display this help text
    -v, --version       Display current script version

GitHubのテンプレート集にあるフレームワークや言語、ディストリビューションの名前を指定(複数可)すると、出力されます。
ただ、コンソールに出力してもしょうがないので出力をリダイレクトしましょう。Exampleにあるように、 >>で.gitignoreに出力します。
>が2回なのはすでに.gitignoreに何かが記入されていても上書きせずファイルの末尾に追記するためです。
詳しいことは標準出力とリダイレクトで調べてみてください。

もしどういうファイルを無視するかを確認したい場合はリダイレクトせずにそのまま出力すればいいですね。
リストを確認するときは $ gibo -l、中身を更新するときは $ gibo -u を実行します。

実際のプロジェクト、例えばLaravelを使う場合、 $ gibo Laravel を実行します。
2017年8月16日現在では以下のような出力です。

### https://raw.github.com/github/gitignore/690a433b668348c33087d34fafe2155ebe8bb4cf/laravel.gitignore

vendor/
node_modules/
npm-debug.log

# Laravel 4 specific
bootstrap/compiled.php
app/storage/

# Laravel 5 & Lumen specific
public/storage
public/hot
storage/*.key
.env.*.php
.env.php
.env
Homestead.yaml
Homestead.json

# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/

ここに必要があれば記述を足していきましょう。
たとえばLaravel Mixを利用する場合、吐き出したCSS・JSファイルをignoreしておくべきでしょう。

ユーザーのデフォルトで無視するファイル・ディレクトリを設定する

ついついMacやWindows、エディタの設定ファイルなどをプロジェクトのgitignoreファイルに入れてしまうかもしれませんが、プロジェクト固有のものではありませんよね。
プロジェクトの.gitignoreをあまり太らせず、ユーザーそれぞれが自分の環境に応じて無視するファイルを設定しておくほうがよいでしょう。
目安としては、$ gibo -lを実行した際にGlobalの項に表示されるものはプロジェクトに入れるべきではないと思っています。

2018/5/10更新 章の下部に追記あり

まずは自分の環境に合わせたgitignoreファイルを作成しましょう。
例えば、MacOSユーザーでSublime Textを使っている場合とします。
~/.gitignore_globalというファイルを作成して、$ gibo macOS SublimeText >> ~/.gitignore_globalを実行します。

※区別のためにglobalをつけていますが、自分がわかるようであれば.gitignoreで構いません。

次に、Gitのユーザーレベルのconfigを編集します(参考:Git - 最初のGitの構成)。
~/.gitconfigに以下のように記述してください。

[core]
    excludesfile = ~/.gitignore_global

これで自分が操作するGitリポジトリの全てで~/.gitignore_globalで記述されたファイル・ディレクトリがignoreされます。
コマンドでもconfigは操作可能ですので、manコマンドやヘルプを参考にしてください。

以下追記

まだ .gitconfig に core.excludesfile を設定しているの?
こちらの記事にあるように、上記で作成した~/.gitignore_global~/.config/git/configにリネーム&移動することで~/.gitconfigへの追記が必要なくなります。

追記終わり

プロジェクトの参加メンバーが同じように設定していないと地獄をみることになるので、プロジェクト内で足並みを揃えることをお忘れなく。

Git2.7系で便利になった.gitignoreについてはこの記事をどうぞ

Git 2.7 で .gitignore が便利になっている

git archiveコマンドで差分納品ファイルをつくるにはこの記事もどうぞ

git コマンドで差分納品 zipを作る (かつ、不要ファイルは含めないようにしたい)

ではでは。

参考:

新しいウェブ体験を作ろう TAMのPWA開発
お問い合わせはこちら