.gitignore — ノードモジュールをコミットしてしまうのを防ぐファイル
.gitignoreの実用ガイド:どのような機能があるか、構文の仕組み、node_modulesおよび.envファイルに対する一般的なパターン、そしてすべての開発者をキャッチしてしまうすでに追跡されたトラップについて。
すべての開発者は少なくとも一度、誤ってコミットした経験があります。 node_modules、 .env APIキーを含むファイルや200MBのビルドアーテファクト。これは現実の問題です。修正は面倒です。そして、単一のファイルで完全に回避できるべきでした。 .gitignore.
このガイドでは、 .gitignore について説明します。どのように機能するか、どのような内容を記述すべきか、そして経験豊富な開発者でも陥りやすい罠についても述べます。
.gitignore とは何ですか?
.gitignore .gitignore は、Git がバージョン管理から除外すべきファイルやディレクトリを指定するシンプルなテキストファイルです。Git が .gitignoreに記載されたパスを確認すると、そのパスは存在しないと見なされ、ステージング、コミット、または git status の出力に表示されません。
このファイルはリポジトリのルートに存在しますが、プロジェクト固有の .gitignore ファイルをサブディレクトリに配置することもできます。サブディレクトリ内のルールはそのディレクトリとその子ディレクトリにのみ適用されます。
なぜ1つ必要なのか(短いバージョン)
- 安全 — センス、APIキー、パスワードをGitの履歴から除外します
- リポジトリのサイズ — 生成されたファイルや依存関係をリポジトリのサイズを膨らませません
- ノイズの削減 — エディタ設定やOSの不要ファイルがすべての差分を混ぜるのを防ぎます
- チームの安心感 — すべてのメンバーがクリーンなリポジトリをクローンし、ローカルに依存関係をインストールします
構文の仕組み
ルールはシンプルですが、いくつかの非自明なエッジがあります。
- 空白行や
#を含む行は無視されます(コメントには#を使用してください) - スラッシュなしのパターン は、リポジトリ内のどこでもその名前のファイルまたはディレクトリにマッチします:
*.logすべてのログファイルをすべての深さで無視します - トレーリングスラッシュ はディレクトリのみにマッチします:
dist/ディレクトリを無視しますが、ファイル名がdist - のファイルは無視しません リーディングスラッシュ
/todo.txtはパターンをリポジトリのルートにアンカーします:todo.txtルートにあるみの - のみを無視します
**) ダブルアスタリスク(**/logsマッチするlogs/はディレクトリ境界を越えてマッチします: - ツリー内のどこか
!) 否定記号(
はパターンを否定し、前のルールで除外されたファイルを再び含めます
# Dependencies
node_modules/
# Environment files
.env
.env.local
.env.*.local
# Build output
dist/
build/
# Editor noise
.vscode/
.idea/
*.swp
# OS files
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
最小の例
最も一般的な項目(そしてなぜそれが重要なのか)
node_modules/ node_modules/ これは大きな項目です。典型的なNode.jsプロジェクトは npm install に数千のファイルを含み、多くの場合数百MBに達します。これらはバージョン管理に属すべきではありません。誰かがリポジトリをクローンした場合、 package.jsonを実行してローカルに再構築します。常にそれを無視してください。
.env およびシークレットファイル
環境ファイルにはデータベースパスワード、APIキー、サービストークンが含まれます。コミットされた .env は発生するセキュリティ事故を意味します — GitHubは漏洩されたシークレットをスキャンしますが、ボットも同様です。ファイルを無視し、プレースホルダー値を持つ .env.example をコミットして、チームメンバーがどの変数を設定すべきかを知らせます。
dist/ および build/
コンパイルまたはバンドルされた出力は元のソースから派生します。あなたのCIパイプラインは毎回デプロイ時に再構築します。ビルドアーテファクトをコミットすることは、マージコンフリクトや誤った差分を引き起こし、実際のコード変更を隠します。
エディタおよびOSファイル
.DS_Store (macOS), Thumbs.db (Windows), .idea/ (JetBrains), .vscode/ (VS Code設定) — これらは個人のワークスペースファイルです。これらをコミットすると、すべての貢献者にあなたの設定を強制します。マシン固有のノイズをグローバル ~/.gitignore_global に設定して、すべてのプロジェクトに追加する必要はありません。
グローバル.gitignore:一度設定して忘れない
あなたはすべてのリポジトリに適用されるグローバル無視ファイルを設定できます:
git config --global core.excludesfile ~/.gitignore_global
エディタファイル、OSのゴミ、個人的なツールをそこに配置します。プロジェクトの .gitignore は、全チームが無視すべきもの(例: node_modules/ または dist/.
)を用意します。
「既にトラッキングされた」トラップ .gitignore は、未トラッキングファイルのみを追加するのを防ぎます。ファイルがすでにGitの履歴に含まれている場合、 に追加しても何も起こりません。Gitはそのファイルをまだトラッキングし、変更をコミットします。 既にコミットされたファイルをトラッキングから停止するには: .gitignore その後、ファイルはディスク上に残りますが、Gitはそのファイルを無視します。
否定ルール:ファイルの再含め
# Remove the file from git tracking without deleting it locally
git rm --cached path/to/file
# Or remove a whole directory
git rm -r --cached node_modules/
# Then commit the removal
git commit -m "Stop tracking node_modules"
場合によっては、ディレクトリを無視するが、特定のファイルを含める必要があります。たとえば、
を無視し、
をチェックインする場合があります: config/ ただし、否定は無視されたディレクトリ内のファイルを無視することができません。Gitは無視されたディレクトリに降り込むのを停止するため、 config/defaults.json ルールが発動する機会がありません。無視すべき内容を無視するようにする必要があります:
config/
!config/defaults.json
無視すべき内容を無視するようにする必要があります: ! 生成する.gitignoreをあなたのスタックに合わせる
# Wrong — Git never sees defaults.json inside an ignored directory
config/
!config/defaults.json
# Right — ignore everything in config/ except defaults.json
config/*
!config/defaults.json
あなたは最初から書く必要はありません。
gitignore.io (また、 にもあります) は、あなたの言語、フレームワーク、エディタを選択して、瞬時に包括的な無視ファイルを生成できます。GitHubはその gitignore.iogithub/gitignore リポジトリに公式なテンプレートを提供しており、数百の環境をカバーしています。 ほとんどのウェブプロジェクトでは、言語(Node、Python、PHPなど)、エディタ(VS Code、JetBrains)、OS(macOS、Windows)のテンプレートを組み合わせることで、良いスタートラインを得られます。
Gitが無視していることを確認する
2つのコマンドが、予期しない無視ルールをデバッグするのに役立ちます:
特に、ルールが予期しない動作をしている場合に非常に有用です — そのファイル、行番号、パターンを表示します。
# See which files are being ignored in the current directory
git status --ignored
# Find out exactly which rule is causing a file to be ignored
git check-ignore -v path/to/file
git check-ignore -v クイックリファレンス:パターンのキャッチシート
無視する内容
| パターン | どこでも |
|---|---|
*.log | すべて .log ファイル |
/debug.log | のみ debug.log ルートに |
logs/ | 名前のディレクトリ logs |
**/logs | logs どこでものディレクトリ |
!important.log | 再含める important.log を無視する場合でも *.log がマッチする場合 |
doc/*.txt | .txt ファイルを直接 doc/ (サブディレクトリではない) |
doc/**/*.txt | .txt ファイルをどこでも doc/ |
恵 スコアボードが到着しました!
スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!
