Gitignore でファイルを無視する

GitBeginner
オンラインで実践に進む

はじめに

ソフトウェア開発では、プロジェクトフォルダーに共有すべきでないファイルが増えて、乱雑になることがあります。たとえば、次のようなファイルです。

  • 一時ファイル:エディターや OS が生成するファイル(例:.DS_Store)。
  • ビルド成果物:コンパイル済みのコード(例:.exe、.class)。
  • ログ:プログラムの実行内容を記録するファイル(例:debug.log)。
  • 秘密情報:API キーやパスワード(これらは絶対にコミットしないでください)。

Git には .gitignore という機能があります。これは「追跡しない」ファイルを指定する単純なルール一覧です。この一覧のルールに一致するファイルは、デフォルトで Git の追跡対象になりません。

これは、作業ツリーに対するポリシーを定義する仕組みです。追跡されていないファイルのうち、追加対象のソースファイルではなく、通常の作業上発生する不要なファイルとして扱うものを Git に伝えます。

これは単に整理整頓のためだけではありません。適切な .gitignore を設定すると、不要なファイルによるノイズ、リポジトリの肥大化、秘密情報やマシン固有の不要ファイルの誤コミットを防ぐのに役立ちます。

この実験では、次の操作を行います。

  1. 無視したい「不要な」ファイルを作成します。
  2. .gitignore ファイルを設定します。
  3. Git が不要なファイルを正常に無視することを確認します。

ログファイルを作成する

まず、「不要な」データを表すファイルを作成します。アプリケーションが実行されるたびにログファイルを生成すると想像してください。このファイルはデバッグのためにローカルマシンには残しておきたい一方で、チームと共有したり、履歴に保存したりする必要はありません。

プロジェクトディレクトリに移動します。

cd ~/project

ダミーの内容を含む debug.log という名前のファイルを作成します。

echo "System started at $(date)" > debug.log

ファイルが存在することを確認します。

ls

この時点で git status を実行すると、Git はこのファイルを「Untracked」として検出し、追加するよう繰り返し求めます。

これは、Git が検出したものの、まだ無視対象になっていないファイルに対する通常の動作です。Git は、そのファイルをリポジトリの一部にするかどうかを確認しています。

.gitignore ファイルを作成する

特定のファイルについて Git が通知しないようにするには、.gitignore という特別な設定ファイルが必要です。

プロジェクトのルートディレクトリにファイルを作成します。

touch .gitignore

ファイルが作成されたことを確認します(先頭がドットのため隠しファイルとして扱われることに注意してください)。

ls -a

.gitignore ファイルは単なるテキストファイルです。通常、.gitignore ファイル自体はコミットします。そうすれば、チーム全員が同じ無視ルールを共有できます。

ここは重要な違いです。無視対象のファイルは通常、ローカルで生成される成果物ですが、.gitignore 自体は通常、プロジェクトの設定ファイルであり、バージョン管理に含めます。

無視ルールを設定する

次に、すべてのログファイルを無視するルールを追加します。

ワイルドカード * を使うと、「.log で終わる任意の名前」を指定できます。

.gitignore ファイルにパターン *.log を追加します。

echo "*.log" > .gitignore

ファイルの内容を確認します。

cat .gitignore

出力:

*.log

この 1 行は、名前が .log で終わるファイルであれば、このディレクトリおよびすべてのサブディレクトリにあるものを Git が無視するよう指示します。

無視ルールは、1 つのファイルだけを対象にした指示ではなく、パターンに基づいて適用されます。そのため、短い .gitignore ファイルでも、生成されたファイルや不要なファイルの多くの種類をまとめて管理できます。

無視の状態を確認する

ルールが機能しているかテストします。

git status を実行します。

git status

出力を確認します。

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    .gitignore

debug.log はどこにあるでしょうか。

一覧から消えています。これは、Git が debug.log を正常に無視していることを意味します。Git が表示しているのは .gitignore 自体だけです。このファイルは最終的にコミットする必要がありますが、debug.log は Git から見えない状態になっています。

これが 追跡されていない(Untracked) ファイルと 無視されている(Ignored) ファイルの実際の違いです。追跡されていないファイルは追加候補として提示されますが、無視されているファイルは意図的にその対象から除外されます。

さらに確実に確認したい場合は、check-ignore コマンドを使って「なぜこのファイルが無視されているのか」を確認できます。

git check-ignore -v debug.log

出力:

.gitignore:1:*.log debug.log

これは、.gitignore の 1 行目にあるルール *.log によって、ファイル debug.log が無視されているという意味です。

まとめ

この実験では、リポジトリを整理された状態に保つ方法を学びました。

重要なポイント:

  1. **.gitignore**:Git が無視するパターンを一覧にしたテキストファイルです。
  2. ワイルドカード:* を使うと、複数のファイルに一致させられます(例:*.log)。
  3. 追跡されていないファイルと無視されているファイルの違い:無視されたファイルは、Git のバージョン管理上は存在しないかのように扱われます(ただし、ディスク上には存在します)。

この単純なファイルには大きな効果があります。一時ファイル、バイナリ、機密性の高いキーを誤ってコミットするのを防ぎ、プロジェクトをプロフェッショナルで安全な状態に保てます。