.gitignoreの使い方:追跡対象から除外したいファイルの管理法
これまでの記事で、GitとGitHubを使った基本的な操作を学んできました。しかし、実際のプロジェクトで`git status`を実行すると、OSが自動生成するファイル(Macの`.DS_Store`など)や、パスワードなどの機密情報、あるいは大量の依存関係ファイル(`node_modules`など)まで表示されてしまい、「これら全部を管理する必要あるの?」と戸惑った経験はありませんか?
この記事では、そうした**Gitの管理下に置く必要がない、あるいは置くべきではないファイルやフォルダを、意図的に追跡対象から除外する**ための「`.gitignore`」ファイルの使い方を詳しく解説します。`.gitignore`を正しく使うことで、リポジトリをクリーンに保ち、安全にプロジェクトを管理できるようになります。
.gitignoreとは?なぜファイルを除外する必要があるのか
`.gitignore`とは、その名の通り、Gitに「無視(ignore)してほしい」ファイルやフォルダのリストを記述するための、ただのテキストファイルです。このファイルをプロジェクトのルートディレクトリに置いておくことで、Gitはそこに書かれたパターンに一致するファイルを、`git status`での表示や`git add`の対象から除外してくれます。
では、なぜファイルを除外する必要があるのでしょうか?主な理由は3つあります。
- 1. 機密情報の混入防止: データベースのパスワードやAPIキーなどが書かれた設定ファイル(`.env`など)を、誤ってGitHubの公開リポジトリにアップロードしてしまうと、深刻なセキュリティ事故に繋がります。
- 2. 自動生成されるファイルの除外: OSやエディタが自動で生成する設定ファイル(`.DS_Store`, `.vscode/`)、`npm install`などで生成される膨大な依存関係フォルダ(`node_modules/`)、ビルド時に生成されるファイル(`dist/`)などは、他の環境でも自動で再生成できるため、バージョン管理に含める必要はありません。
- 3. リポジトリをクリーンに保つ: バージョン管理の対象を、人間が書いた本質的なソースコードのみに絞ることで、リポジトリがすっきりと見通し良くなり、他の人がプロジェクトに参加しやすくなります。
.gitignoreの基本的な書き方とルール
`.gitignore`の書き方は非常にシンプルです。プロジェクトのルート(`.git`フォルダがある場所)に`.gitignore`という名前のファイルを作成し、除外したいファイル名やフォルダ名を1行に1つずつ書いていくだけです。
基本的な書き方の例:
# 「#」で始まる行はコメントとして扱われます
# 特定のファイル名を指定して除外
debug.log
config_secret.php
# 特定のディレクトリを丸ごと除外(末尾のスラッシュはあってもなくてもOK)
node_modules/
dist
# 特定の拡張子を持つすべてのファイルを除外
*.log
*.tmp
# 例外ルール:「!」を使う
# logsディレクトリ内のすべてを無視するが、important.logだけは追跡対象に含める
logs/
!logs/important.log
ワイルドカード(`*`)も使えるため、柔軟な設定が可能です。どのプロジェクトでも共通で除外すべきファイルのリストは、gitignore.ioのようなサイトで簡単に生成できるので、活用してみるのも良いでしょう。
実践!`.gitignore`を作成してファイルを無視させる手順
それでは、実際に`.gitignore`を作成して、不要なファイルが追跡されなくなる様子を確認してみましょう。
ステップ1: `.gitignore`ファイルを作成する
まず、プロジェクトのルートディレクトリに`.gitignore`ファイルを作成します。ファイル名の先頭がドットで始まるため、GUIのファイルエクスプローラーでは作りにくい場合があります。ターミナル(またはGit Bash)で以下のコマンドを実行するのが確実です。
touch .gitignore
ステップ2: 除外したいファイルやフォルダを記述する
作成した`.gitignore`ファイルをテキストエディタで開き、Web開発で一般的に除外される項目を記述してみましょう。
# OS / Editor Files
.DS_Store
.vscode/
# Dependencies
node_modules/
# Log files
*.log
npm-debug.log*
# Environment variables
.env
ファイルを編集したら、忘れずに保存してください。
ステップ3: `.gitignore`自体をコミットする
この「除外ルール」自体は、チームメンバー全員で共有すべき重要な設定です。そのため、`.gitignore`ファイル自身は、Gitの管理対象に含めてコミットします。
git add .gitignore
git commit -m "Add .gitignore file"
ステップ4: 動作を確認する
本当にファイルが無視されるか確認してみましょう。無視リストに書いた`debug.log`というファイルを作成します。
echo "This is a debug log." > debug.log
この状態で`git status`を実行してみてください。
git status
どうでしょうか?`debug.log`は「Untracked files」の一覧に表示されず、完全に無視されているはずです。これで成功です!
注意点:一度コミットしてしまったファイルはどうする?
初心者が陥りがちなのが、「重要なファイルをコミットしてしまった後に、慌てて`.gitignore`に追記する」というケースです。しかし、`.gitignore`は、まだ一度もGitで追跡されていないファイルにしか効果がありません。
もし、すでに追跡対象になっているファイル(例: `secret-key.php`)をGitの管理から外したい場合は、以下のコマンドでGitの追跡リスト(インデックス)から削除する必要があります。
git rm --cached [ファイル名]
このコマンドは、PC上からファイル自体を削除するのではなく、あくまで「Gitの追跡対象から外す」だけの操作なので安全です。実行後、忘れずに`.gitignore`の変更と合わせてコミットしておきましょう。
git commit -m "Stop tracking secret-key.php"