.gitignore
.gitignore
概要(サマリー)
.gitignore(ギットイグノア)は、Gitを使ってプログラムの変更履歴を管理する際、特定のファイルやディレクトリを「変更履歴の記録対象から意図的に除外する」ために作成する特別な設定ファイルである。
パスワードやAPIキーなどの機密情報が書かれたファイル(.env など)や、インターネットから自動ダウンロードできる膨大なプログラムパッケージ(node_modules など)を、誤って GitHub などの公開場所にアップロード(プッシュ)してしまわないように保護する役割を持つ。
詳細解説
.gitignoreとは何か(履歴から除外するファイル一覧)
.gitignore は、プロジェクトのルートディレクトリ(一番上の階層)に配置するテキストファイルである。ファイル名の先頭にドット(.)がついているのは、システムの設定ファイル(隠しファイル)であることを示している。
Gitは、プロジェクト内にあるファイルの新規追加や変更を検知し、開発者が追加したものを履歴として記録する。しかし、開発を進める中には「Gitで記録・共有したくないファイル」が出てくる。
そのようなファイルの名前やフォルダのパスを .gitignore というファイルの中に箇条書きで記述しておくと、Gitはまだ追跡していない対象を無視(ignore)するようになる。
なぜ除外する必要があるのか(セキュリティとクリーンさ)
ファイルをGitの監視対象から除外する理由は、主に以下の3点である。
- 機密情報の漏洩を防ぐ(セキュリティ):APIキー、データベースの接続パスワード、個人情報などが書かれた設定ファイル(
.envなど)を誤ってGitHubのパブリックリポジトリにプッシュすると、外部から見える状態になり、悪用(不正利用や高額請求)される危険性がある。 - リポジトリの肥大化を防ぐ(パフォーマンス):
npm installなどを実行した際にダウンロードされるnode_modulesディレクトリには、数万個の外部ライブラリファイルが含まれており、容量が数百メガバイトに達することがある。これらはコマンド一つで再生成できるため、Gitに記録して共有する必要がなく、記録すると動作が重くなりやすい。 - 無駄な競合を防ぐ(チーム開発の円滑化):OSが自動生成する一時ファイル(Macの
.DS_Storeや WindowsのThumbs.dbなど)や、エディタ(VS Code)が自動生成するローカル設定ファイル(.vscode/フォルダ)は、開発者個人のパソコンの中だけで必要な情報である。これらをGitで共有してしまうと、他のメンバーの環境と衝突して無駄なコンフリクト(競合)を引き起こす。
.gitignoreの基本的な書き方とパターン指定
.gitignore ファイルの中には、1行に1つずつ、無視したいファイルのパターンを記述する。ワイルドカード(*)などを使って柔軟に指定することが可能である。
以下は、一般的なWeb開発プロジェクトにおける .gitignore の記述例である。
# 1. 特定のファイルを完全に無視する(環境変数ファイルなど)
.env
config.local.json
# 2. ディレクトリ(フォルダ)とその中身をすべて無視する(末尾にスラッシュをつける)
node_modules/
dist/
build/
.vscode/
# 3. 特定の拡張子を持つファイルをすべて無視する(アスタリスクを使用)
*.log
*.tmp
*.zip
# 4. 特定のファイルだけは無視しない(先頭にエクスクラメーションマークをつける)
!important-log.tmp
よく使われる除外対象の代表例
開発のジャンルや使用する言語によって、無視すべき定番のファイルが存在する。
- Node.js / JavaScript開発:
node_modules/,npm-debug.log,.env - Python開発:
__pycache__/,*.pyc,.venv/(仮想環境フォルダ) - WordPress開発:
wp-config.php(環境ごとの接続情報が入る場合), アップロードされた画像フォルダ (wp-content/uploads/) - OS共通一時ファイル:
.DS_Store(Mac),Thumbs.db(Windows)
AIコーディングとの関係
AIコーディング(CursorやCopilot等)では、AIが作成を提案した機密情報ファイルを誤ってコミットしないよう、.gitignore の設定がより重要になっている。
APIキーや環境変数の漏洩防止
AIコーディングで外部のAPI(OpenAIや各種Webサービス)を利用するコードを書く際、AIは「.env ファイルにAPIキーを定義して、プログラムから読み込みましょう」というコードを提案することがある。このとき、プロジェクトに .gitignore が設定されていない、あるいは記述が漏れていると、git add . で機密情報をステージングし、そのままコミット・プッシュしてしまう事故につながる。
- 対策: プロジェクトを開始したら、コードを書き始める前にAIへ「このプロジェクト用の
.gitignoreファイルを作成してください」と指示して、設定ファイルを作成する。
AIによる設定漏れの自動チェック
すでに開発が進んでいるプロジェクトにおいて、無視すべきファイルが漏れていないかをAIに点検してもらうと、見落としを減らしやすい。
- 指示の例:「このプロジェクトはNode.jsとReactを使用しています。現在の
.gitignoreファイルの内容は以下です。セキュリティやプロジェクトのクリーンさの観点から、追加で記述すべき除外ファイルやフォルダの提案をお願いします。[現在の.gitignoreの内容を貼り付け]」
よくある勘違い
すでにコミットされたファイルも.gitignoreに書けば消える?
これは初心者が最も頻繁に遭遇する落とし穴である。
.gitignore は「まだGitの追跡(履歴管理)が始まっていないファイル」に対してのみ有効である。すでに一度コミットして履歴に記録されてしまったファイルは、後から .gitignore にそのファイル名を追加しても、Gitは引き続きその変更を追跡し、無視してくれない。
すでに追跡されているファイルを無視対象にするには、以下の手順でGitの追跡管理(キャッシュ)からのみファイルを削除し、その後にコミットを行う必要がある。
# ローカルにある実ファイルは消さずに、Gitの追跡対象からのみ削除するコマンド
git rm --cached .env
# この後、.gitignoreに「.env」と書き込んでコミットすれば、以降は追跡されなくなる
.gitignore自体はGitで管理しないほうがいい?
.gitignore ファイル自体は、プロジェクトのメンバー全員で「どのファイルを無視すべきか」というルールを共有するために、通常はGitの管理対象に含めてコミット(プッシュ)する。
メンバー全員が同じ無視ルールを共有することで、「Aさんの環境では余計なファイルがアップロードされたが、Bさんの環境ではアップロードされなかった」といった環境のズレを防ぐことができる。
ファイル名以外(フォルダ全体など)は除外できない?
.gitignore では、ファイル名だけでなく、特定のフォルダ階層(ディレクトリ)を丸ごと除外することが可能である。
例えば、uploads/ と書けば、プロジェクト内のどの階層にある uploads という名前のフォルダもすべて無視される。
また、/uploads/ と先頭にスラッシュをつければ、「プロジェクトのルート(最上階層)にある uploads フォルダだけを無視し、子フォルダの中にある src/components/uploads フォルダは無視しない」という厳密な指定も可能である。
情報ソース
まとめ
.gitignoreは、Gitのバージョン管理履歴から除外したいファイルやフォルダを指定する設定ファイル。- パスワードなどの機密情報の漏洩(セキュリティリスク)や、不要なファイルによる容量肥大化を防ぐために役立つ。
- 設定ファイル自体は、プロジェクト全体で無視ルールを共通にするため、通常はGitでコミット・共有する。
- すでに一度コミットされてしまったファイルは、キャッシュを削除(
git rm --cached)しないと無視されないため注意が必要。
より詳しくAIに聞いてみよう
- .gitignore ファイルの先頭にあるドット(.)にはどのような意味がありますか?初心者向けに教えてください。
- すでにコミットしてしまった .env ファイルを、ローカルのファイルを消さずにGitの履歴追跡からのみ安全に外す具体的なコマンド手順を教えてください。
- node_modules フォルダを .gitignore で除外した場合、他の開発者はどうやって必要なライブラリを手元に揃えるのですか?
- .gitignore で特定のフォルダ配下にある「拡張子が .log のファイルだけ」を再帰的にすべて無視する書き方を教えてください。
- AIコーディングツールで新規リポジトリを作成した際、最低限作成しておくべき .gitignore の基本セットを教えてください。