MENU

.gitignoreの書き方|除外すべきファイルと基本ルール

.gitignoreの書き方|除外すべきファイルと基本ルール

.gitignore を使うと、コミットしたくないファイルを Git の追跡対象から外せます。ログ、ビルド成果物、OS が自動生成するファイル、API キーを含む設定ファイルなどを除外したい場面で使います。

実務では「とりあえず書く」より、何を共有し、何を各自の手元だけに残すかを決めてから書くのが重要です。ここを曖昧にすると、不要ファイルが混ざったり、逆に必要な設定まで消えたりします。

  • 先に結論: .gitignore は「まだ Git に追跡されていないファイル」を除外する設定
  • よく除外するもの: ログ、キャッシュ、ビルド成果物、一時ファイル、秘密情報を含む .env
  • 注意点: すでにコミット済みのファイルは、.gitignore を追加しただけでは消えない
  • 実務のコツ: プロジェクト共通の除外と、個人環境だけの除外を分けて考える
目次

.gitignore でできることと前提

.gitignore は、Git が新しく見つけたファイルを「無視する」ための仕組みです。対象は主に次の 3 つです。

  • 自動生成されるファイルを混ぜない
  • ローカル環境だけで使うファイルを共有しない
  • 誤って秘密情報をコミットする事故を減らす

一方で、次の点は先に押さえておく必要があります。

  • .gitignore は削除ツールではない
  • 追跡済みファイルにはそのまま効かない
  • 何でも除外すればよいわけではなく、チームで必要な設定は残す

ここがポイント: .gitignore は「不要ファイルを隠す設定」ではなく、「追跡対象を整理するルール」です。

基本の書き方

まずは最小の例です。

# ログファイル
*.log

# Python のキャッシュ
__pycache__/
*.pyc

# 環境変数ファイル
.env

# macOS の不要ファイル
.DS_Store

各行の意味はシンプルです。

  • *.log: 拡張子が .log のファイルを無視
  • __pycache__/: その名前のディレクトリを無視
  • .env: 特定のファイル名を無視
  • #: コメント

よく使う記号

書き方でつまずきやすいのが、パターンの意味です。

  • * : 任意の文字列に一致
  • / : ディレクトリ区切り、またはディレクトリ指定に使う
  • ! : いったん無視したものを再度含める

例をまとめるとこうなります。

# すべての log を除外
*.log

# build ディレクトリだけ除外
build/

# docs 配下の tmp ディレクトリを除外
docs/tmp/

# markdown は残す
*.md

# いったん全部の txt を除外して、一部だけ含める
*.txt
!important.txt

配置場所

通常は、リポジトリのルートに .gitignore を置きます。

my-project/
├─ .gitignore
├─ src/
├─ tests/
└─ README.md

この位置に置くと、そのリポジトリ全体に対してルールが効きます。

除外すべきファイルの定番

ここが実務で最も重要です。.gitignore は文法より、何を除外するかの判断で差が出ます。

1. ビルド成果物とキャッシュ

ソースコードから毎回生成できるものは、基本的に Git に入れません。

  • dist/
  • build/
  • target/
  • .cache/
  • __pycache__/
  • node_modules/(プロジェクト方針によるが通常は除外)

理由は明確です。

  • 容量が大きくなりやすい
  • 差分が読みにくい
  • 環境ごとに中身が変わる
  • 再生成できるため Git で管理する意味が薄い

2. ログと一時ファイル

作業中に増えるだけで、共有価値が低いファイルです。

  • *.log
  • tmp/
  • temp/
  • *.tmp
  • *.swp

エラー調査用ログを残したい場合でも、通常は Git 管理ではなく保存先を分けます。

3. OS やエディタが作るファイル

チーム開発では地味に混ざりやすい部分です。

.DS_Store
Thumbs.db
.vscode/
.idea/

ただし、.vscode/.idea/ は一括除外でよいとは限りません。共有したい設定があるなら、全部消すより必要ファイルだけ選ぶほうが安全です。

4. 秘密情報を含むファイル

.env、認証情報、秘密鍵は最優先で見直すべき対象です。

.env
.env.local
*.pem
*.key
secrets.json

API キーやパスワードを含む可能性があるなら、まず Git に入れない設計にします。すでに公開リポジトリへ入ってしまった場合は、.gitignore の追加だけでは不十分です。鍵の無効化や再発行も必要になります。

サンプル: 開発環境ごとの .gitignore

Node.js プロジェクトの例

node_modules/
dist/
coverage/
.env
npm-debug.log*
.DS_Store

この構成なら、依存パッケージ、ビルド成果物、テストカバレッジ、ローカル環境変数を除外できます。

Python プロジェクトの例

__pycache__/
*.py[cod]
.venv/
.env
.pytest_cache/
dist/
build/

Python では仮想環境ディレクトリも除外対象になりやすいです。共有すべきなのは環境本体ではなく、通常は requirements.txtpyproject.toml のような依存定義です。

汎用的な最小例

どの言語でも使いやすい形なら、まずは次のように始められます。

# OS
.DS_Store
Thumbs.db

# Logs
*.log

# Temp
tmp/
temp/
*.tmp

# Secrets
.env
.env.*

# Editor
.vscode/
.idea/

入力例と結果のイメージ

たとえば次のような構成のプロジェクトがあるとします。

project/
├─ .gitignore
├─ app.py
├─ .env
├─ error.log
├─ __pycache__/
│  └─ app.cpython-312.pyc
└─ README.md

.gitignore が以下なら、

.env
*.log
__pycache__/

Git が通常追跡するのは主に次のファイルです。

  • app.py
  • README.md
  • .gitignore

逆に無視されるのは次のものです。

  • .env
  • error.log
  • __pycache__/ 配下のファイル

このように、「共有すべきソースだけを残す」状態を作るのが .gitignore の役目です。

よくある失敗と対処

すでに追跡済みのファイルが無視されない

最も多い失敗です。.gitignore を追加しても、過去に git add したファイルは追跡されたままです。

対処は、インデックスから外して再評価させます。

git rm --cached .env

ディレクトリごと外すなら、たとえば次の形です。

git rm -r --cached __pycache__

そのあとでコミットします。

git commit -m "Stop tracking ignored files"

必要なファイルまで除外してしまう

たとえば *.json をまとめて無視すると、設定ファイルやサンプルデータまで消えることがあります。

NG 例:

*.json

改善例:

secrets.json
local-settings.json

広すぎるパターンは事故の元です。まずは対象を狭く書くほうが安全です。

ディレクトリ配下の一部だけ残したい

! を使えば例外を作れます。

logs/
!logs/.gitkeep

この書き方なら、logs/ は基本的に無視しつつ、空ディレクトリ維持用の .gitkeep だけは残せます。

実務での使いどころ

.gitignore は個人開発より、複数人開発で効果が大きく出ます。

レビューが読みやすくなる

不要ファイルが差分に混ざらないので、レビュー対象がコードや設定変更に集中します。ビルド成果物まで毎回出てくる状態だと、レビュー精度が落ちやすくなります。

コンフリクトが減る

環境依存ファイルやローカル設定を Git 管理から外すと、開発者ごとの差分衝突が減ります。とくに IDE 設定や一時ログは、その効果が大きい部分です。

情報漏えいリスクを下げやすい

秘密情報を含むファイルを最初から除外しておけば、誤コミットの確率を下げられます。もちろん 100% 防げるわけではないので、レビューやシークレットスキャンと併用するのが実務向きです。

代替手段と使い分け

.gitignore だけで足りない場面もあります。

個人だけの除外は .git/info/exclude

自分の環境でだけ無視したいファイルなら、リポジトリ共有の .gitignore ではなく .git/info/exclude を使う方法があります。

向いている場面は次のとおりです。

  • 自分だけのメモファイル
  • 一時的な検証ファイル
  • チーム全体には共有したくないローカル設定

全リポジトリ共通ならグローバル ignore

OS の不要ファイルやエディタの一時ファイルのように、毎回同じものを除外したいならグローバル設定も便利です。

たとえば Git のグローバル ignore を設定すると、各リポジトリに同じ記述を繰り返さずに済みます。

迷ったときのチェックリスト

.gitignore を書く前に、次の順で確認すると失敗しにくくなります。

  • そのファイルはソースなのか、生成物なのか
  • 他の開発者にも必要か
  • 環境ごとに変わるか
  • 秘密情報を含むか
  • すでに Git で追跡されていないか

この 5 点で判断すると、除外すべきかどうかをかなり整理できます。

まず押さえたい基本ルール

最後に、初心者が最初に覚えるべきルールを絞ると次の 4 つです。

  • 再生成できるものは基本的に除外する
  • 秘密情報を含むファイルは最優先で除外する
  • 広すぎるパターンを書かない
  • 追跡済みファイルには別途 git rm --cached が必要

.gitignore は短いファイルですが、プロジェクトの運用をかなり左右します。書き方そのものより、何を共有し、何を共有しないかの線引きを早めに決めることが、後から効いてきます。

次に見直すべきなのは、手元のリポジトリで *.log.env だけを足すことではありません。いま追跡されている不要ファイルが残っていないかです。そこを掃除してから .gitignore を整えると、リポジトリの状態が一気に安定します。

参照リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次