
.gitignoreジェネレーターでリポジトリをクリーンに保つ方法
📷 Pixabay / Pexels.gitignoreジェネレーターでリポジトリをクリーンに保つ方法
.gitignoreファイルを手書きするのは面倒です。Stack Overflowからコピペするよりも、もっと賢い方法があります。
ほとんどの開発者が.gitignoreファイルをどう扱っているかについて、正直に話しましょう。新しいプロジェクトを始め、.gitignoreを追加し忘れ、最初の数回のプッシュでnode_modulesや__pycache__や.envをコミットしてしまい、慌てて修正しようとする。あるいは「gitignore node」でGoogle検索して、Stack Overflowで何年も前にトップ票を集めた回答をコピーする——たいてい動くけれど、自分のセットアップに固有の設定が抜けていることも多い。
より良い方法があります。約30秒でできます。でもまず、.gitignoreが実際になぜ重要で、間違えると何が起きるのかを確認しましょう。
.gitignoreが思っている以上に重要な理由
.gitignoreに気を配る明らかな理由:リポジトリをクリーンに保つこと。コードレビューで5万ファイルもあるnode_modulesを掘り進みたい人はいません。でも、実際に本番環境で開発者を悩ませる、あまり知られていない理由もあります。
セキュリティ。 .envファイルを誤ってコミットすることは、GitHub上に機密情報が流出する最も一般的な原因の一つです。APIキー、データベースのパスワード、サービスの認証情報——これらがコミットされプッシュされると、数分以内に自動ボットにスキャンされ、悪用されます。GitHubは認証情報を検出すると通知してくれますが、その時点でキーはすでに侵害されています。.gitignoreによる予防は、事後の対処よりはるかに優れています。
パフォーマンス。 ビルド成果物、ログファイル、バイナリアセットで膨れ上がったリポジトリは、クローンが遅く、フェッチが遅く、作業がつらくなります。node_modulesがリポジトリ履歴に入ってしまうと、すべてのコントリビューターに影響を与えるリベースやfilter-branchなしには簡単に削除できません。
ノイズの削減。 OSファイル(macOSの.DS_Store、WindowsのThumbs.db)、IDE設定ファイル、エディタのスワップファイル——これらはdiffビューを散らかし、異なるエディタを使うチームメンバー間でつまらないコンフリクトを生み出します。
よくある間違い
node_modulesの忘れ(または追加が遅すぎる)
これはあまりにも一般的で、通過儀礼のようなものです。npm initして、コードを書いて、git add .して、git commit——そして80MBのnode_modulesがリポジトリ履歴に入ります。永遠に。
後からnode_modules/を.gitignoreに追加しても、すでにトラッキングされています。明示的にトラッキングを解除する必要があります:
git rm -r --cached node_modules
git commit -m "stop tracking node_modules"
--cachedフラグが重要です——ファイルシステムからファイルを削除せずに、Gitのインデックス(ステージングエリア)からファイルを削除します。
.envファイルのコミット
これが危険なものです。本物の認証情報が入った.envファイルは、絶対にリモートリポジトリに触れさせてはいけません。修正は簡単:ファイルを作成する前に.envを.gitignoreに追加してください。さらに良いのは、必要な環境変数をすべて偽のまたは空の値でリストした.env.exampleファイルを使うことです。それをコミットし、本物の.envは絶対にコミットしない。
# .gitignore
.env
.env.local
.env.production
.env.*.local
.env.exampleや.env.templateは.gitignoreに入れてはいけません——それらは共有するためのものです。
無視しすぎる
逆の問題もあります。ワイルドカードを使いすぎて、コミットすべきだったディレクトリ全体をブロックする.gitignoreファイルを見たことがあります。*.configというワイルドカードは合理的に思えますが、チームに必要なwebpack.config.jsやjest.config.jsも無視してしまいます。
具体的に書きましょう。入力ではなく、出力を無視してください。
OS固有のファイルを無視しない
.DS_StoreはmacOSがフォルダ表示設定を保存する方法です。Thumbs.dbはWindowsのサムネイルキャッシュです。どちらもリポジトリに入れてはいけません。グローバルgitignoreが最も清潔な解決策ですが、プロジェクトレベルでカバーしておくことも良い安全網です。
.gitignoreジェネレーターの使い方
空のファイルから始めたり、何年も前のStack Overflowの回答をコピーしたりする代わりに、.gitignoreジェネレーターを使えば、実際のスタックに合った完全で正確な.gitignoreを1分以内に作れます。
ワークフローはこちら:
- .gitignoreジェネレーターを開く
- 言語/フレームワークを選択(Node.js、Python、Go、Rust、Javaなど)
- オペレーティングシステムを選択(macOS、Windows、Linux)
- エディタやIDEを選択(VS Code、JetBrains、Vimなど)
- 使用している追加ツールを追加(Docker、Terraformなど)
- 生成された出力をコピーし、プロジェクトの
.gitignoreにペースト
生成される出力はコミュニティによってメンテナンスされており、JetBrainsの.idea/ディレクトリ、VS Codeの.vscode/フォルダ、macOSの.DS_Store、Pythonの__pycache__や.pytest_cache、ビルドディレクトリ、ログファイルなどが含まれます。
すでにトラッキングされているファイルの対処
.gitignoreに何かを追加しても、将来のトラッキングを防ぐだけです。ファイルがすでにコミットされている場合、明示的に指示するまでGitはトラッキングし続けます。
コマンドのパターン:
# 単一ファイルのトラッキング解除
git rm --cached path/to/file
# ディレクトリ全体のトラッキング解除
git rm -r --cached path/to/directory/
# すべてのトラッキングを解除し、現在の.gitignoreに基づいて再追加
git rm -r --cached .
git add .
git commit -m "apply .gitignore rules to tracked files"
最後のアプローチは強力な手段ですが、.gitignoreが長い間不完全だった場合には最もクリーンな解決策になることがあります。
個人設定のためのグローバルgitignore
ほとんどの開発者が知らない、あるいは設定し忘れるパターン:グローバルgitignoreファイルです。
プロジェクトの.gitignoreにはチーム全員に関連するパターンを含めるべきです。しかし、エディタ、OS、ワークフローツールなど、個人のセットアップに固有のものもあります。すべてのプロジェクトの.gitignoreに.DS_Storeを追加するのは機能しますが、プロジェクトファイルを個人の好みで汚染します。よりクリーンな解決策はグローバル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
# VS Code
.vscode/
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# JetBrains
.idea/
*.iml
*.iws
# Vim
*.swp
*.swo
*~
これを設定すると、マシン上のすべてのリポジトリでGitが自動的にこれらのパターンを適用します。もう二度とプロジェクトの.gitignoreに.DS_Storeを追加する必要はありません。
区別:プロジェクトの.gitignoreはチーム全体に恩恵をもたらすプロジェクト関連の無視設定に、グローバル.gitignoreは自分にだけ関係する個人的なエディタ/OS設定に使います。
ワイルドカードが裏目に出るとき
.gitignoreパターンのワイルドカードは強力ですが、注意が必要です。
*はスラッシュ以外の何にでもマッチします。*.logはプロジェクト内のすべての.logファイルを無視します。
**はスラッシュを含む何にでもマッチします。**/logsはプロジェクト階層のどこにあるlogs/ディレクトリでも無視します。
先頭の/はパターンをプロジェクトルートに固定します。/node_modulesはルートのnode_modulesのみを無視します。
末尾の/はディレクトリを指定します。build/はbuildというディレクトリのみを無視します。
注意点:意図以上に広くマッチする広範なパターンです。よくある例:
**/buildはあらゆる深さのbuildという名前のすべてのディレクトリを無視します*.jsonはpackage.jsonを無視してしまいます(これはやめましょう)- 末尾スラッシュなしの
logsはルートのlogsという名前のファイルも無視します
迷ったときは、より少なくではなく、より具体的に。そして.gitignoreを更新した後はgit statusを使って変更の効果を確認しましょう。
最初のコミット前に確認する
.gitignoreを設定する最良のタイミングは、最初のgit add .の前です。新しいプロジェクトを始める場合:
git init- すぐに.gitignoreを追加する(ジェネレーターまたはテンプレートを使用)
- その後にファイルを追加し始める
この順序により、「すでにトラッキングされている」問題を完全に防ぐことができます。
.gitignoreジェネレーターは確かな出発点を得る最も手軽な方法です。自分のスタックで実行し、必要だとわかっているプロジェクト固有のパターンを追加し、個人的なエディタのためにグローバルgitignoreを設定しましょう。10分のセットアップが後の何時間もの後片付けを節約してくれます。
クリーンな.gitignoreワークフローと一緒に役立つ関連ツール:
- UUIDジェネレーター — 環境設定でユニークなIDを生成するのに便利
- Base64エンコーダー/デコーダー — 環境ファイルのエンコードされた機密情報を扱うときによく使われる
- JSONフォーマッター — 設定ファイルを読みやすく保つため