こんにちは、かつコーチです。
ここまでの記事で、Gitの基本的なコミット操作を一通り解説してきました。
今回は少しレベルアップして、.gitignore(ドットギットイグノア)の書き方を解説します。
「うっかり秘密情報をコミットしてしまった」「ライブラリのファイルまでGitで管理されて重くなった」というトラブルを防ぐために、ぜひ押さえておきたい機能です。
.gitignoreとは?
荷物に入れない私物リスト
.gitignoreとは、Gitの管理対象から意図的に除外するファイル・フォルダを指定する設定ファイルです。
以前の記事で、git addは「荷物を箱詰めする作業」だと説明しました。
.gitignoreは、その箱詰め作業の前に用意しておく「この私物は絶対に箱に入れない」というリストだとイメージしてください。
引っ越しの荷造りで、貴重品や生活で毎日使うものをあらかじめ「梱包しないものリスト」として分けておくように、.gitignoreに書かれたファイル・フォルダは、git add .のような一括指定を行っても、ステージングの対象から自動的に除外されます。
なぜ.gitignoreが必要なのか
実際の開発現場では、リポジトリに含めるべきではないファイルが数多く存在します。
代表的な例は以下の通りです。
node_modules(JavaScriptのライブラリが大量に入るフォルダ。容量が大きい).env(APIキーやデータベースのパスワードなど秘密情報を含む設定ファイル).DS_Store(Macが自動生成する管理ファイル)*.log(アプリケーションが出力するログファイル)
これらをうっかりコミットしてしまうと、リポジトリの容量が無駄に膨らんだり、最悪の場合は秘密情報が外部に漏れてしまったりするリスクがあります。
.gitignoreの書き方の基本
基本の構文
.gitignoreは、リポジトリの直下(.gitフォルダと同じ階層)に作成するテキストファイルです。
touch .gitignore
中身には、除外したいファイル・フォルダのパターンを1行ずつ記述します。
# 特定のフォルダを除外
node_modules/
# 特定のファイルを除外
.env
# 拡張子で除外
*.log
# 特定のファイル名を除外(どの階層にあっても)
.DS_Store
#から始まる行はコメントとして扱われ、Gitからは無視されます。
よく使うパターンの書き方
パターンの書き方には、いくつかルールがあります。
| 書き方 | 意味 |
|---|---|
node_modules/ | 末尾の/はフォルダを指定 |
*.log | ワイルドカード(*)で任意の文字列にマッチ |
/build | 先頭の/はリポジトリ直下のみを対象に指定 |
!important.log | !で例外的に除外対象から外す(除外しない) |
言語やフレームワークごとに定番の除外パターンがあるため、ゼロから書くよりも、後述するテンプレートを活用するのが実務では一般的です。
よくあるつまずきポイント・エラー対処
Before/After:すでにコミット済みのファイルは消えない
.gitignoreでよくある誤解が、「.gitignoreに書けば、すでにコミットしてしまったファイルも管理対象から消える」というものです。
実際には、.gitignoreはあくまで「これから新しく追加されるファイル」を対象とした設定であり、すでにGitが追跡している(コミット済みの)ファイルには効果がありません。
私自身、.envファイルを誤ってコミットしてしまった後に.gitignoreへ追加しただけで満足してしまい、実際にはリポジトリの履歴に秘密情報が残り続けていたことに、しばらく気づかなかった経験があります。
❌ Before:.gitignoreに追記しただけで安心してしまう
✅ After:git rm --cachedで、Gitの追跡対象からファイルを外した上で.gitignoreに追記する
# ファイルはそのまま残しつつ、Gitの追跡対象からだけ外す
git rm --cached .env
git add .gitignore
git commit -m ".envをGit管理から除外"
すでに漏洩した秘密情報への対処
なお、git rm --cachedはあくまで「これ以降の追跡を止める」操作であり、過去のコミット履歴に残った秘密情報そのものは消えません。
もし.envのような秘密情報を誤ってコミット・共有してしまった場合は、.gitignoreの設定に加えて、該当のAPIキーやパスワードを速やかに再発行(無効化)することが最優先の対処になります。
応用・一歩先の使い方
GitHubが提供する.gitignoreテンプレート
GitHubは、言語・フレームワークごとの.gitignoreテンプレートを公式に公開しています。
新規プロジェクトを始める際は、ゼロから書くのではなく、こうしたテンプレートをベースにするのが効率的です。
すべてのリポジトリに共通する除外設定(グローバル.gitignore)
.DS_Storeのように、プロジェクトを問わず毎回除外したいファイルがある場合は、パソコン全体に適用されるグローバル.gitignoreを設定しておくと、プロジェクトごとに書く手間を省けます。
git config --global core.excludesfile ~/.gitignore_global
まとめ
この記事のポイント
.gitignoreは、荷造りの際に「梱包しないものリスト」を用意しておくような役割node_modulesや.envなど、容量や秘密情報の観点から除外すべきファイルは多い- すでにコミット済みのファイルには効果がなく、
git rm --cachedとの併用が必要 - 秘密情報を誤ってコミットした場合は、
.gitignore設定に加えてキーの再発行も検討する
次に読むべき記事
- ブランチとは?本線を壊さず実験する仕組み
- よくあるGitのトラブルと解決法まとめ
タグ: Git, 中級者向け, 基本操作