.gitignoreの書き方を完全解説【パターン記法から実践例まで初心者向け】
.gitignoreファイルの書き方と設定方法を初心者向けに解説します。特定のファイルやフォルダをGitの追跡対象から除外するパターン記法、言語・フレームワーク別のテンプレート、よくある失敗と対処法を学びましょう。
.gitignoreとは
.gitignore(ドットギットイグノア)は、Gitの追跡対象から除外したいファイルやフォルダを指定するための設定ファイルです。リポジトリのルートディレクトリに配置することで、指定したパターンに一致するファイルがGitの管理対象外になります。
たとえば、ビルドで生成される一時ファイル、APIキーなどの機密情報を含む設定ファイル、エディタの設定ファイルなどは、通常リポジトリに含めるべきではありません。.gitignoreを適切に設定することで、これらのファイルを誤ってコミットしてしまうリスクを防げます。
.gitignoreファイルの作成方法
.gitignoreファイルはリポジトリのルートディレクトリに作成します。ファイル名は必ず.gitignore(先頭にドット)とします。
# リポジトリのルートで作成
touch .gitignore
Windowsの場合、エクスプローラーからはドットで始まるファイルを作成しにくいため、コマンドプロンプトやPowerShellで作成するか、エディタから新規ファイルとして保存してください。
.gitignoreの基本的な書き方
ファイルを指定する
特定のファイル名を直接指定すると、リポジトリ内のどこにあってもそのファイルが除外されます。
# 特定のファイルを除外
.env
secrets.json
debug.log
フォルダを指定する
フォルダ名の末尾にスラッシュを付けると、そのフォルダ以下のすべてが除外されます。
# フォルダを除外
node_modules/
dist/
build/
.cache/
スラッシュを付けない場合、同名のファイルも除外対象になる点に注意してください。フォルダのみを除外したい場合は末尾にスラッシュを付けることを推奨します。
コメントを書く
#で始まる行はコメントとして扱われます。設定の意図を残すために活用しましょう。
# 依存パッケージ
node_modules/
# ビルド成果物
dist/
build/
# 環境変数ファイル(機密情報を含む)
.env
.env.local
パターン記法の詳細
.gitignoreでは、ワイルドカードや特殊記号を使った柔軟なパターン指定ができます。
ワイルドカード
| 記号 | 意味 | 例 |
|---|---|---|
* | 任意の文字列(0文字以上) | *.log → すべての.logファイル |
? | 任意の1文字 | file?.txt → file1.txt, fileA.txt |
** | 任意のディレクトリ階層 | **/temp → どの階層のtempフォルダも |
# すべてのログファイル
*.log
# すべてのディレクトリ内の.DS_Store
**/.DS_Store
# srcフォルダ以下のすべての.testファイル
src/**/*.test.js
ディレクトリの指定方法
# ルート直下のdistフォルダのみ除外
/dist/
# どの階層のdistフォルダも除外
dist/
# どの階層のdistフォルダも除外(**を使った書き方)
**/dist/
先頭にスラッシュを付けると「ルートからの相対パス」を意味します。付けない場合はどの階層でもマッチします。
ブラケット記法
角括弧で文字のグループを指定できます。
# file1.txt, file2.txt, file3.txt にマッチ
file[123].txt
# fileA.txt, fileB.txt, fileC.txt にマッチ
file[A-C].txt
# file0.txt から file9.txt にマッチ
file[0-9].txt
否定パターン(除外の例外)
!で始まるパターンは、一度除外したものを再び追跡対象に戻します。
# logsフォルダを除外
logs/
# ただし、logs/.gitkeepは追跡する
!logs/.gitkeep
この機能は、フォルダ構造だけをリポジトリに残したい場合などに便利です。ただし、親フォルダが除外されている場合は否定パターンが効かない点に注意してください。
# この書き方は動作しない
build/
!build/important.txt # buildフォルダ自体が除外されているため無効
# 正しい書き方
build/*
!build/important.txt
言語・フレームワーク別のテンプレート
プロジェクトの種類によって除外すべきファイルは異なります。代表的な例を紹介します。
Node.js / JavaScript
# 依存パッケージ
node_modules/
# ビルド成果物
dist/
build/
# 環境変数
.env
.env.local
.env.*.local
# ログファイル
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# エディタ設定
.vscode/
.idea/
# OS生成ファイル
.DS_Store
Thumbs.db
Python
# バイトコード
__pycache__/
*.py[cod]
*$py.class
# 仮想環境
venv/
.venv/
env/
# 配布物
dist/
build/
*.egg-info/
# 環境変数
.env
# IDE
.idea/
.vscode/
*.swp
Java / Kotlin
# コンパイル済みクラスファイル
*.class
# ビルドツール
target/
build/
.gradle/
# IDE
.idea/
*.iml
.project
.classpath
.settings/
# ログ
*.log
GitHubが提供するgitignore テンプレート集には、さまざまな言語やフレームワーク向けのテンプレートが公開されています。新しいプロジェクトを始める際の参考にしてください。
グローバル.gitignoreの設定
OSやエディタに依存するファイル(.DS_Store、Thumbs.db、.ideaなど)は、すべてのリポジトリで共通して除外したいものです。これらはグローバル.gitignoreで一括設定できます。
# グローバル.gitignoreファイルを作成
touch ~/.gitignore_global
# Gitに登録
git config --global core.excludesfile ~/.gitignore_global
~/.gitignore_globalの内容例:
# macOS
.DS_Store
.AppleDouble
.LSOverride
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# エディタ
.idea/
.vscode/
*.swp
*.swo
*~
グローバル設定は個人の環境に依存するため、チームで共有する必要はありません。リポジトリの.gitignoreにはプロジェクト固有の設定のみを記述し、個人の環境設定はグローバル.gitignoreで管理することをおすすめします。
初心者が混乱しやすいポイント
すでに追跡されているファイルは.gitignoreに追加しても無視されない
一度コミットされたファイルは、後から.gitignoreに追加しても追跡対象から外れません。これは最もよくある混乱ポイントです。
追跡を解除するには、まずGitのキャッシュから削除する必要があります。
# ファイルをGitの追跡から外す(ローカルのファイルは残る)
git rm --cached <ファイル名>
# フォルダの場合は -r オプションを追加
git rm --cached -r <フォルダ名>
# 変更をコミット
git commit -m ".gitignoreの設定を反映"
--cachedオプションを付けることで、ローカルのファイルは削除せずにGitの追跡だけを解除できます。
.gitignoreはサブディレクトリにも配置できる
.gitignoreはリポジトリのルートだけでなく、サブディレクトリにも配置できます。サブディレクトリの.gitignoreは、そのディレクトリ以下にのみ適用されます。
project/
├── .gitignore # プロジェクト全体の設定
├── src/
│ └── .gitignore # src/以下にのみ適用
└── tests/
└── .gitignore # tests/以下にのみ適用
複数の.gitignoreがある場合、より深い階層の設定が優先されます。
空フォルダはGitで管理できない
Gitはファイルの変更履歴を管理するツールであり、空のフォルダは追跡対象になりません。フォルダ構造を維持したい場合は、.gitkeepという空ファイルを配置する慣習があります。
# 空フォルダを維持するための.gitkeepを作成
touch logs/.gitkeep
.gitkeepは.gitignoreと組み合わせて使うことが多いです。
# logsフォルダ内のファイルを除外
logs/*
# ただし.gitkeepは追跡
!logs/.gitkeep
.gitignoreが効かないときの対処法
.gitignoreを設定したのに無視されない場合は、以下の点を確認してください。
| 症状 | 原因 | 対処法 |
|---|---|---|
| ファイルが無視されない | すでに追跡済み | git rm --cachedで追跡を解除 |
| パターンが効かない | 記法の間違い | スラッシュの位置、ワイルドカードを確認 |
| 特定ファイルだけ効かない | 否定パターンの問題 | 親フォルダの除外方法を確認 |
どのファイルが無視されているか確認するには、以下のコマンドが便利です。
# 特定のファイルが無視されるか確認
git check-ignore -v <ファイルパス>
# 無視されているファイルの一覧を表示
git status --ignored
git check-ignore -vを使うと、どの.gitignoreファイルのどの行でマッチしたかがわかります。
まとめ
.gitignoreは、Gitの追跡対象から特定のファイルやフォルダを除外するための設定ファイルです。
| 記法 | 説明 |
|---|---|
ファイル名 | 特定のファイルを除外 |
フォルダ名/ | フォルダ以下をすべて除外 |
* | 任意の文字列にマッチ |
** | 任意のディレクトリ階層にマッチ |
! | 除外の例外を指定 |
/ | ルートからの相対パスを指定 |
ビルド成果物、依存パッケージ、環境変数ファイル、エディタ設定など、リポジトリに含めるべきでないファイルを適切に除外することで、クリーンなリポジトリを維持できます。
すでに追跡されているファイルは.gitignoreに追加しても自動で除外されない点に注意し、必要に応じてgit rm --cachedで追跡を解除してください。プロジェクト固有の設定はリポジトリの.gitignoreに、OS・エディタ依存の設定はグローバル.gitignoreに分けて管理することをおすすめします。
編集部