.gitignoreの使い方:追跡対象から除外したいファイルの管理法
これまでの記事で、GitとGitHubを使った基本的な操作を学んできました。しかし、実際のプロジェクトで`git status`を実行すると、OSが自動生成するファイル(Macの`.DS_Store`など)や、パスワードなどの機密情報、あるいは大量の依存関係ファイル(`node_modules`など)まで表示されてしまい、「これら全部を管理する必要あるの?」と戸惑った経験はありませんか?
この記事では、そうした**Gitの管理下に置く必要がない、あるいは置くべきではないファイルやフォルダを、意図的に追跡対象から除外する**ための「`.gitignore`」ファイルの使い方を詳しく解説します。`.gitignore`を正しく使うことで、リポジトリをクリーンに保ち、安全にプロジェクトを管理できるようになります。
先に確認:.gitignoreは「GitHubに上げないもの」を決めるファイル
`.gitignore`は、サーバーへアップロードしない設定ではありません。あくまでGitの管理対象から外すためのルールです。本番用の設定ファイルやバックアップは、GitHubには上げず、必要ならサーバー上には別管理で残す、という考え方で分けます。
- 追加とコミットの基本は git add / commit の使い方
- 誤って変更したときは Gitで変更を取り消す方法
- GitHubへ送る流れは GitHubへpushする方法
何を.gitignoreに入れる?判断表
| ファイルの種類 | Gitに入れる? | 理由 |
|---|---|---|
| ソースコード | 入れる | 変更履歴を残すべき中心ファイル。 |
| `.env` や本番DB設定 | 入れない | パスワードやAPIキーの漏えいを防ぐ。 |
| `node_modules/` やキャッシュ | 入れない | 再生成でき、量も多い。 |
| `.env.example` や設定サンプル | 入れる | 本物の値を書かず、必要な項目だけ共有する。 |
.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」の一覧に表示されず、完全に無視されているはずです。これで成功です!
「なぜ無視されているのか」を確認したいときは、git check-ignore -v が便利です。どの`.gitignore`の何行目に一致しているかを表示できます。
git check-ignore -v debug.log
注意点:一度コミットしてしまったファイルはどうする?
初心者が陥りがちなのが、「重要なファイルをコミットしてしまった後に、慌てて`.gitignore`に追記する」というケースです。しかし、`.gitignore`は、まだ一度もGitで追跡されていないファイルにしか効果がありません。
もし、すでに追跡対象になっているファイル(例: `secret-key.php`)をGitの管理から外したい場合は、以下のコマンドでGitの追跡リスト(インデックス)から削除する必要があります。
git rm --cached [ファイル名]
このコマンドは、PC上からファイル自体を削除するのではなく、あくまで「Gitの追跡対象から外す」だけの操作なので安全です。実行後、忘れずに`.gitignore`の変更と合わせてコミットしておきましょう。
git commit -m "Stop tracking secret-key.php"
フォルダごと追跡対象から外す場合は、-rを付けます。たとえば、すでにGitに入ってしまったnode_modules/を外す場合は次のようにします。
git rm -r --cached node_modules/
git commit -m "Stop tracking node_modules"
ただし、機密情報を一度でも公開リポジトリにpushしてしまった場合は、`.gitignore`に追加するだけでは不十分です。漏えいしたパスワードやAPIキーは、履歴から消す前にまず無効化・再発行してください。
FTP公開サイトで.gitignoreに入れたいもの
GitHubに上げるファイルと、ロリポップへアップロードするファイルは同じではありません。DBパスワードや本番だけの設定はGitHubから外します。
includes/db_config.local.php
.env
backup/
node_modules/
*.bak
- 本物のパスワードは
*.example.phpには書かない - アップロード用バックアップフォルダはGit管理しない
- push前に
git statusで混入を確認する
関連記事: DB設定を安全に分ける方法 / 公開前にバックアップを取る方法