プロジェクト全体の技術スタックを1つの.gitignoreに集約
この.gitignoreジェネレーターは、プログラミング言語、フレームワーク、ビルドツール、エディタ、OSの既成テンプレートを1つのファイルに統合します。NodeとNext.jsを選び、macOS、Windows、VS Codeを追加すれば、セクションごとに分類され、重複パターンが排除され、独自ルール用の領域も備えた.gitignoreが完成します。テンプレートは公式のgithub/gitignoreコレクションから抽出され、すべてブラウザ内で処理されます。
.gitignoreの生成手順
- 1検索ボックスに言語、フレームワーク、エディタ、OS名を入力し(例:
python,unity,jetbrains)、候補チップをクリックして追加します。Enterキーで最初の候補を追加できます。 - 2プロジェクトに必要なテンプレートを自由に組み合わせます。一般的なWebプロジェクトでは、言語、フレームワーク、エディタ、OSを組み合わせます。
- 3カスタム行に
/uploads/や*.sqliteなど、プロジェクト固有のパスを追加します。 - 4生成結果をコピーするか、ダウンロードをクリックして
.gitignoreとしてリポジトリのルートに配置します。
.gitignoreファイルの役割
.gitignoreは、パッケージマネージャーで再取得できる依存関係(node_modules/, vendor/)、ビルド生成物(dist/, target/)、キャッシュ、ログ、エディタ設定、そして .env などの機密情報など、Gitで追跡すべきでないファイルを指定します。これらを除外することで、リポジトリを軽量に保ち、差分(diff)を読みやすくし、秘密情報の誤コミットを防ぎます。
このファイルは未追跡(untracked)のファイルにのみ有効です。すでにコミットされているファイルは、後から .gitignore に追加しても自動で追跡解除されません。git rm --cached <file>(フォルダの場合は git rm -r --cached <dir>)を実行してコミットすることで、ローカルファイルを残したまま追跡を停止できます。
.gitignoreのパターン構文
パターンの順序が重要です。後から記述されたルールが優先されるため、!.vscode/settings.json のような例外ルールは、広範な .vscode/* の後に記述する必要があります。
- *.log
- スラッシュを含まないパターンはすべての階層にマッチし、リポジトリ内のすべての .log ファイルを除外します。
- /build
- 先頭のスラッシュは.gitignoreがある階層を基準にするため、ルート直下のbuildディレクトリのみを除外します。
- dist/
- 末尾のスラッシュはディレクトリのみに一致し、distという名前のファイルにはマッチしません。
- **/temp
- 2つのアスタリスクは任意の階層のディレクトリに一致し、ルートや配下のあらゆる場所にある temp フォルダを除外します。
- !.env.example
- 先頭の感嘆符は、直前のルールで除外されたファイルを再包含します。親ディレクトリ自体が除外されている場合は再包含できません。
- # コメント
- # で始まる行はコメント、空行は区切り文字です。# や ! を文字通り扱いたい場合は先頭にバックスラッシュを付けます。
テンプレートの結合と重複排除の仕組み
各テンプレートは ### 名前 ### という見出しのセクションになります。重複パターンを削除をオンにすると、前のセクションで既に出現したパターンは後のセクションから除外され、パターンがすべて消えた空のコメントブロックも自動整理されます。否定パターンは位置が意味を持つため、元の順序が保たれます。
ビルドツールやフレームワークのテンプレートは重複することが多く(例: Node、Next.js、Viteはいずれも node_modules やログを除外)、重複排除により行数が20%以上削減されるのが一般的です。
プロジェクト固有、グローバル、ローカルの除外設定
チーム全体で共有するため、プロジェクトの .gitignore はコミットし、そのプロジェクト自身が生成するファイルのみを記述します。お使いのPC固有のファイル(.DS_Store, Thumbs.db, エディタ設定)は git config --global core.excludesFile ~/.gitignore_global でグローバル設定にするのが適切です。特定のリポジトリでのみ自分用に除外したい場合は、コミットされない .git/info/exclude を使用します。
アプリケーションの package-lock.json、poetry.lock、Cargo.lock などのロックファイルは、環境間での同一性を保証するために必ずコミットすべきであり、除外してはなりません。どのルールがファイルを除外しているかを調べるには、git check-ignore -v path/to/file を実行します。
秘密情報をGitに含めないための対策
環境変数・シークレットテンプレートは、.env ファイル、秘密鍵、一般的な認証情報ファイルを除外しつつ、設定項目を文書化する .env.example を保持します。シークレットの除外は今後のコミットを防ぐだけです。一度でもリポジトリにプッシュされた鍵は履歴に残るため、直ちに再生成・ローテーションしてください。関連ツール: ファイル権限を確認できるchmod 計算機、クローラー制御用のrobots.txt 生成ツール。
よくある質問
- .gitignoreファイルはどこに置くべきですか?
- リポジトリのルート(.gitフォルダと同じ階層)に配置します。サブディレクトリ内に配置することも可能で、その場合はそのディレクトリ配下にのみルールが適用されます。
- .gitignoreに追加したのにファイルが追跡され続けるのはなぜですか?
- .gitignoreは未追跡のファイルにのみ適用されます。git rm --cached <file>(フォルダの場合は git rm -r --cached <folder>)を実行してコミットすれば、ローカルファイルを残したままGitの追跡を停止できます。
- package-lock.jsonやyarn.lockは除外すべきですか?
- アプリケーション開発では除外すべきではありません。ロックファイルは依存パッケージの正確なバージョンを固定し、環境ごとの差異を防ぐためのものであり、コミットする必要があります。
- .vscodeや.ideaは.gitignoreに含めるべきですか?
- 通常は個人用ファイルのみを除外します。VS Codeテンプレートは .vscode/* を除外しつつ共有用の settings.json や launch.json を残し、JetBrainsテンプレートは .idea 全体を除外します。
- すべてのプロジェクトで一括して.DS_Storeを除外するには?
- グローバルの除外ファイルに追加します。~/.gitignore_global を作成して .DS_Store を記述し、git config --global core.excludesFile ~/.gitignore_global を実行してください。
- フォルダ内の1つのファイルを除いてすべて無視するには?
- フォルダ自体ではなくフォルダの中身を指定し、その後に例外を指定します。例: folder/* に続けて !folder/keep.txt と記述します。folder/ と書くとフォルダ自体が除外され、内部のファイルを再包含できなくなります。
- これらのテンプレートはどこから提供されていますか?
- 公式の github/gitignore リポジトリ(CC0ライセンス)から抽出・整理したものです。プロジェクト特有の構成に合わせて生成結果を確認してください。