何が起きたか

Qiitaに、空のディレクトリをGitのコミットに含める方法を説明する記事が掲載された。記事は、.gitkeepと.gitignoreの使い分けや、コンパイル結果の出力先ディレクトリを管理対象にする際の注意点を取り上げている。

本紙の見方

この記事が扱うのは、空ディレクトリを残すための記法そのものより、そこに後から生じるファイルをどう扱うかという管理方針の違いである。.gitkeepを置く場合は、現時点では空でも、利用者が追加するファイルを追跡する意図を示す。一方、.gitignoreを置く場合は、ログやキャッシュのように、その場所に生成されるファイルを管理対象にしない意図を示す。したがって、両者は単なる代替手段ではなく、ディレクトリの用途と成果物の扱いをリポジトリ上で表す選択肢と読める。 この区別は、開発用ディレクトリを共有する際の設計にも関わる。記事が例に挙げるデータベースのmigration用ディレクトリは、初期状態でファイルがなくても、利用者が作成したファイルを管理する用途を想定する。それに対し、ログやキャッシュの置き場では、生成物を追跡しない方針が示されている。同じ「空のディレクトリを残す」要望でも、後から入るファイルの性質が異なれば、適切な方法も変わるという整理である。 コンパイル出力先についての記事の指摘は、拡張子だけで除外できるか、出力先のディレクトリ名が共通認識として定まっているか、という二つの条件に分けて読める。記事はC++やJavaでは拡張子を指定する例を挙げ、TypeScriptでは.jsを他の用途にも使うことや、出力先の名称に一般的な共通認識がないことを理由に、単純な拡張子指定やディレクトリ除外に注意を促している。これは、除外ルールを広く設定すると、管理したいファイルまで対象外にする可能性があるという構造を示す。 ただし、記事が挙げる例から、個々のプロジェクトでどの方法が常に適切かまでは決められない。出力先を共有する必要性、そこに置かれるファイルの種類、既存の.gitignore設定を確認して選ぶ必要がある。記事本文の具体例や説明の詳細は原典を参照されたい。

なぜ重要か

空ディレクトリを残すかどうかだけでなく、その場所に後から追加されるファイルを追跡するかが、.gitkeepと.gitignoreの選択を分ける。特にコンパイル出力先では、記事が指摘する拡張子やディレクトリ名の条件に応じて、除外ルールが管理対象のファイルに及ばないかを確認する必要がある。