Git のソースコード管理の除外指定する .gitignore。ときどき気になるのが Thumbs.db や .DS_Store などの指定がプロダクトの .gitignore ファイルに含まれているケース。開発者固有の設定、どこにしたらよいでしょう?

開発者固有のファイルはプロダクトのソースコード管理からは除外したいです。とはいえ OS が自動で作ったThumbs.dbや.DS_Storeなどは、いつの間にかソースコード管理に紛れ込んでしまうことも。それを避けるために .gitignore があるのですが、Thumbs.dbなどの除外指定がプロダクトの.gitignoreファイルに書かれているといつもモヤっとします。
プロダクトとしてThumbs.dbや.DS_Storeが生成物であり、かつ管理不要だとしたらわかります。しかし、多くのケースはプロダクトの生成物ではありません。開発者固有といえるでしょう。このようなファイルの除外指定はどうするのが良いのか調べたのでまとめます。
gitignore.io での扱い
以前、本ブログで紹介した「.gitignore は、生成サービス gitignore.io を使って作ろう!」のgitignore.ioは、さまざまな環境の .gitignore に対応しています。
たとえばWindows の定義では[Dd]esktop.iniなどが設定されています。もちろんmacOS 版もありますし、Linux 版もあります。また Java のビルドツールMavenや、IDE のVisual Studioなどといったツールに関するものもあります。
ただし、これらをどのように使うのかにつて言及したドキュメントはありませんでした。
GitHub の gitignore リポジトリ
gitignore.io 発祥の元となる GitHub のgithub/gitignoreリポジトリを見てみます。このリポジトリは GitHub で新しいリポジトリを作成する際の [Add .gitignore] で使われるテンプレートです。
このリポジトリで気になるのがGlobalディレクトリです。OS や IDE/エディター の設定が、このGlobalディレクトリにあります。
そして、以下のドキュメントへのリンクがあります。色々説明がありますが OS 固有のファイルなどは global .gitignore を作り、そちらに設定するようにとのことです。
つまり、このGlobalディレクトリにあるような定義はプロダクトの.gitignoreではなく、グローバル側(ユーザーのホームディレクトリ以下) に設定するとしています。
Git のドキュメント
GitHub で答えが出たように思いますが、最後に Git 公式では、どのように考えられているのか確認します。
.gitignore に関するドキュメント「Git - gitignore Documentation」があります。
まず.gitignore自体について以下のように書かれています。
“Patterns which should be version-controlled and distributed to other repositories via clone (i.e., files that all developers will want to ignore) should go into a .gitignore file. -gitignore Documentation“
そして、もうひとつ。
“Patterns which a user wants Git to ignore in all situations (e.g., backup or temporary files generated by the user’s editor of choice) generally go into a file specified by core.excludesFile in the user’s ~/.gitconfig. -gitignore Documentation“
ざっくり意訳すると「すべての開発者が無視したいファイルをバージョン管理して、クローン先の他リポジトリへ配布するパターンとして.gitignoreファイルを使うべき」で「ユーザーのエディターが生成したバックアップや一時ファイルは、~/.gitconfigのcore.excludesFileで指定したファイルに入れる」といった感じでしょうか。
全開発者で共有する内容に.gitignoreを使うべき(should be)で、ユーザー固有の設定はcore.excludesFileで指定したファイルにするのが一般的(generally)であると。
ここでも OS 固有の設定は.gitignoreではなく、グローバル側(ユーザーのホームディレクトリ以下) に作るとしています。
まとめ
Git 公式ドキュメントや、GitHub の説明から考えるとThumbs.dbや.DS_Storeなどの OS 固有の設定は、~/.gitconfigのcore.excludesFile指定ファイルがよいといえるでしょう。
ただし使っている単語がshould be / generallyであり、mustではないので絶対ダメまではいかずとも、固有設定を.gitignoreに入れるのだとしたら、よく考えてからやりましょう、といったところでしょうか。(RFC ではないし、全大文字でもないですがRFC 2119 - IPAに倣って)
※core.excludesFileのデフォルトは、以下の順で見つけたファイルを使います。そのためcore.excludesFileは明示的に設定せず、下記2番目の~/.config/git/ignoreファイルを作って使うのが簡単です。
$XDG_CONFIG_HOME/git/ignore$HOME/.config/git/ignore(=~/.config/git/ignore)
これで、モヤっとしていたのがスッキリしました。
OS 固有の設定は~/.config/git/ignoreにしていきたいと思います。
では IDE/エディターの設定は?
“すべての開発者が無視したいファイル” か?、と考えると、やはり固有の設定といえるので~/.config/git/ignoreですね。OSS ではなく、クローズドなプロジェクトの場合は.gitignoreでよいかもしれませんが、いつ「すべての開発者」が変わるかもしれないと考えると~/.config/git/ignoreがよいと思います。

