Git リポジトリでのログファイルの無視
git リポジトリでログファイルを適切に無視する方法。アプリケーションログ、npm/yarn デバッグログ、エラーログ、ローテーションログのパターンを全スタック対応で解説します。
Pattern
詳細な説明
ログファイルは実行時に生成されるものであり、バージョン管理すべきではありません。タイムスタンプ、マシン固有のパス、一時的な状態を含み、実行のたびに変わります。これらをコミットすると git 履歴に無意味なノイズが混入します。
無視すべき一般的なログパターン:
*.log
logs/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
パッケージマネージャーのデバッグログ:
npm-debug.log—npm installやnpm runでエラーが発生した際に作成されます。環境の詳細を含む完全な npm 実行トレースが記録されます。yarn-debug.logとyarn-error.log— Yarn の同等のデバッグ出力。pnpm-debug.log— pnpm の診断ログ。
これらのファイルには、公開リポジトリに含めたくないファイルシステムパス、環境変数、システム情報が含まれることがよくあります。
アプリケーションログ:
*.log— ワイルドカードパターンでほとんどのログファイルを捕捉します。注意:プロジェクトにソース資料としての意図的な.logファイルがある場合(まれですが)、より具体的なパターンを使用してください。logs/、log/— アプリケーションがローテーションログファイルを書き込む一般的なディレクトリ。*.log.gz、*.log.[0-9]—logrotateやwinstonなどのツールによるローテーション済みおよび圧縮ログアーカイブ。
ランタイムおよびクラッシュログ:
hs_err_pid*.log— スタックトレースとメモリ状態を含む JVM HotSpot クラッシュダンプ。crash.log— 各種ランタイムからの汎用クラッシュレポート。*.pid— デーモンやサーバーが書き込むプロセス ID ファイル。
ログ管理のベストプラクティス:
- アプリケーションを設定して専用の
logs/ディレクトリにログを書き込み、そのディレクトリを.gitignoreに追加してください。 - 本番デバッグにはローカルログファイルに頼るのではなく、ログ集約サービス(Datadog、CloudWatch、ELK Stack)を使用してください。
- シークレットをログに出力しない — アプリケーションレベルで環境変数や認証情報をログ出力からサニタイズしてください。
- Git フック —
.logファイルが誤ってステージングされた場合に警告する pre-commit フックを検討してください。
エッジケース: ドキュメントやテスト用にサンプルログファイルをコミットする必要がある場合、否定パターン !example.log を使用してワイルドカードルールをオーバーライドできます。
ユースケース
Node.js チームが、内部ファイルパスや環境の詳細をオープンソースリポジトリに公開する npm-debug.log ファイルを誤ってコミットし続けています。