.gitignoreとは?Git初心者が知っておくべき基本と実践的な使い方

プログラミング・IT

Gitを使っていると、「あるファイルをコミットしたくない」「ログや一時ファイルが毎回表示されてうんざり…」と感じたことはありませんか?

そんなときに大活躍するのが、.gitignoreファイルです。

このファイルを使えば、Gitが無視すべきファイルやフォルダを指定でき、管理がぐっと楽になります。

この記事では、.gitignoreの基本から、実践的な設定例、よくあるミスまでをわかりやすく解説します。

スポンサーリンク

.gitignoreとは?

.gitignoreの役割

.gitignoreは、Gitが追跡(トラッキング)しないファイルやディレクトリを指定するファイルです。

プロジェクトのルートディレクトリに配置し、以下のように使います。

# .gitignore の例
*.log
__pycache__/
.env

この例では、すべての.logファイル、__pycache__ディレクトリ、.envファイルが無視されます。

なぜ.gitignoreが必要?

問題となるファイルの例:

  • ログファイルapp.logerror.logなど
  • 一時ファイル~$document.docx.DS_Storeなど
  • 設定ファイル.envconfig.iniなど
  • コンパイル済みファイル*.pyc*.classなど

これらをGitで管理すると:

  • リポジトリが汚れる:不要なファイルが混在
  • チーム開発で問題:環境固有のファイルが共有される
  • セキュリティリスク:パスワードなど機密情報が漏れる

.gitignoreを使う前と後の比較

使う前:

git status
# 表示例
modified:   main.py
untracked:  app.log
untracked:  __pycache__/
untracked:  .env
untracked:  temp/

使った後:

git status
# 表示例
modified:   main.py

スッキリして、本当に必要な変更だけが見えるようになります!

この章のまとめ

.gitignoreを使うと、不要なファイルがリポジトリに追加されるのを防げます。次は、その具体的な書き方を紹介します。

書き方のルールとパターン

基本的なルール

.gitignoreの記述方法:

パターン意味
#コメント行# これはコメントです
ファイル名特定のファイルを無視config.ini
*.拡張子拡張子で無視*.log
フォルダ名/フォルダを無視temp/
/フォルダ名/ルート直下のフォルダのみ/build/
!ファイル名例外(無視しない)!important.log

実践的な例

# コメント:Python用の.gitignore

# コンパイル済みファイル
__pycache__/
*.pyc
*.pyo
*.pyd

# 環境ファイル(パスワードなど)
.env
.env.local

# ログファイル
*.log
logs/

# IDEの設定ファイル
.vscode/
.idea/

# OSが作る隠しファイル
.DS_Store
Thumbs.db

# 一時ファイル
*.tmp
*.bak
~*

パターンの詳細解説

1. ワイルドカード(*)の使い方

# すべての.txtファイルを無視
*.txt

# nameで始まるすべてのファイルを無視
name*

# testで終わるすべてのファイルを無視
*test

# 任意の1文字にマッチ(?)
temp?.txt  # temp1.txt, tempA.txt など

2. フォルダの指定方法

# すべてのtempフォルダを無視
temp/

# ルート直下のtempフォルダのみ無視
/temp/

# 特定のパスを無視
src/temp/
src/*/temp/

3. 例外設定(!)の活用

# すべての.logファイルを無視
*.log

# ただし、important.logは例外として追跡
!important.log

# フォルダ全体を無視するが、特定ファイルは残す
temp/
!temp/keep.txt

よく使うパターン集

Python プロジェクト

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.env
venv/
env/
.pytest_cache/

Node.js プロジェクト

# Node.js
node_modules/
npm-debug.log*
.env
dist/
build/
.cache/

Java プロジェクト

# Java
*.class
*.jar
*.war
target/
.gradle/
build/

この章のまとめ

.gitignoreにはシンプルなパターン指定だけでなく、柔軟な除外設定も可能です。次は、.gitignoreを後から変更したときの注意点を紹介します。

.gitignoreが効かないときの対処法

なぜ効かないのか?

.gitignoreの重要なルール: 「すでにGitで追跡されているファイルは、.gitignoreに書いても無視されない」

例:こんな状況

  1. config.iniをすでにコミット済み
  2. 後から.gitignoreconfig.iniを追加
  3. でもgit statusconfig.iniが表示される

解決方法:追跡を停止する

1. 特定のファイルを追跡停止

# ファイルをGitの追跡から外す(ファイル自体は残る)
git rm --cached config.ini

# .gitignoreに追加
echo "config.ini" >> .gitignore

# 変更をコミット
git add .gitignore
git commit -m "config.iniを追跡対象から除外"

2. フォルダ全体を追跡停止

# フォルダをGitの追跡から外す
git rm --cached -r __pycache__/

# .gitignoreに追加
echo "__pycache__/" >> .gitignore

# 変更をコミット
git add .gitignore
git commit -m "__pycache__を追跡対象から除外"

3. 複数ファイルを一括で処理

# .gitignoreで指定したパターンに一致するファイルを一括削除
git rm --cached $(git ls-files -i --exclude-from=.gitignore)

# または、すべての追跡を一旦リセット
git rm --cached -r .
git add .
git commit -m "不要なファイルを追跡から除外"

実際の手順例

状況: .envファイルがすでにコミットされている場合

# 1. 現在の状況を確認
git status
# modified: .env が表示される

# 2. .envを追跡から外す
git rm --cached .env

# 3. .gitignoreに追加
echo ".env" >> .gitignore

# 4. 変更をコミット
git add .gitignore
git commit -m ".envファイルを追跡対象から除外"

# 5. 確認
git status
# .envが表示されなくなる

注意点とベストプラクティス

注意点

  1. git rm --cachedは他の開発者にも影響する
    • チーム開発では事前に相談
    • 削除するファイルが他の人の環境で必要でないか確認
  2. 設定ファイルの扱い
    • .envを削除する場合、.env.exampleを用意
    • 必要な設定項目を示すテンプレートを残す

ベストプラクティス

1. プロジェクト開始時に.gitignoreを設定

# プロジェクト開始時
mkdir my-project
cd my-project
git init

# 最初に.gitignoreを作成
curl -o .gitignore https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore

# 初回コミット
git add .gitignore
git commit -m "初期設定: .gitignoreを追加"

2. 設定ファイルのテンプレートを用意

# .envファイルの代わりに.env.exampleを作成
cp .env .env.example

# .env.exampleから機密情報を削除
# DATABASE_URL=your_database_url_here
# SECRET_KEY=your_secret_key_here

git add .env.example
git commit -m "環境変数のテンプレートを追加"

この章のまとめ

.gitignoreが効かないときは、「すでに追跡されているかどうか」を確認しましょう。最後に、よく使われるテンプレートを紹介します。

便利な.gitignoreテンプレート

GitHub公式のテンプレート

GitHubは多くのプログラミング言語やIDEごとの.gitignoreテンプレートを提供しています。

公式テンプレート集:

人気のテンプレート:

プロジェクト別テンプレート

Pythonプロジェクト用

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
*.manifest
*.spec

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Virtual environments
venv/
env/
ENV/
env.bak/
venv.bak/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

React/Node.jsプロジェクト用

# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Production build
build/
dist/

# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Logs
logs
*.log

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Coverage directory used by tools like istanbul
coverage/

# ESLint cache
.eslintcache

# Optional npm cache directory
.npm

# Editor directories and files
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

自動生成ツールの活用

1. gitignore.ioを使う

ウェブサイト: https://www.toptal.com/developers/gitignore

使い方:

# コマンドラインから生成
curl -L "https://www.toptal.com/developers/gitignore/api/python,vscode,macos" > .gitignore

2. VSCodeの拡張機能

おすすめ拡張機能:

  • gitignore
  • Auto-Git-Ignore

グローバル.gitignoreの設定

複数プロジェクトで共通する設定は、グローバル設定を使いましょう。

設定手順

# 1. グローバル.gitignoreファイルを作成
touch ~/.gitignore_global

# 2. 共通設定を記述
cat << 'EOF' > ~/.gitignore_global
# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Editor
.vscode/
.idea/
*.swp
*.swo
*~

# Temporary files
*.tmp
*.temp
*.bak
~*
EOF

# 3. Gitの設定に登録
git config --global core.excludesfile ~/.gitignore_global

グローバル設定のメリット

  • すべてのプロジェクトで自動適用
  • OS固有ファイルを一括管理
  • エディタの設定ファイルを統一除外

チーム開発での.gitignore管理

1. プロジェクト固有の設定

# プロジェクト固有の設定のみ記述
# データベースファイル
*.sqlite3
*.db

# アップロードファイル
uploads/
media/user_uploads/

# ログファイル
logs/
*.log

2. 個人設定の分離

# 個人的な設定は .git/info/exclude に記述
echo "my_notes.txt" >> .git/info/exclude
echo "personal_config/" >> .git/info/exclude

まとめ

重要ポイント

.gitignoreは、Gitを快適に使うための必須アイテムです。今回紹介した内容を振り返ると:

  • 不要なファイルをGitから除外できる
  • 書き方はシンプルだが柔軟性も高い
  • すでに追跡されているファイルには効果がない点に注意
  • テンプレートを活用して効率的に設定

.gitignore設定のベストプラクティス

タイミングやること理由
プロジェクト開始時最初に.gitignoreを設定後から追跡を外すのは面倒
開発中新しい種類のファイルが出たら追加継続的な管理が重要
チーム参加時既存の.gitignoreを確認プロジェクトのルールを理解

コメント

タイトルとURLをコピーしました