ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
.gitignoreは、Gitの管理対象から除外したいファイルやディレクトリを1行1パターンで書き並べる設定ファイルです。プロジェクトのルートに置いた.gitignoreへ無視したいパターンを記述すれば、ログやビルド成果物、環境変数ファイルなどがコミットに紛れ込むのを防げます。本記事では、パターンの記法から具体例、そして「すでに追跡済みのファイルには効かない」という最大の落とし穴とその外し方までを解説します。
| この記事の要点 |
|---|
|
.gitignoreとは
.gitignoreは、Gitに「このファイルやディレクトリはバージョン管理しなくてよい」と伝えるための設定ファイルです。Gitはこのファイルに書かれたパターンと一致するファイルを、変更検知(git status)やステージング(git add)の対象から外します。これにより、リポジトリには本当に管理したいソースコードや設定だけが残り、ノイズの少ないクリーンな履歴を保てます。
無視する対象として代表的なのは、次のようなファイルです。
- ビルドやインストールで自動生成されるもの(
node_modules/、dist/、*.classなど) - パスワードやAPIキーを含む環境設定ファイル(
.envなど) - OSやエディタが勝手に作る一時ファイル(
.DS_Store、Thumbs.db、*.swpなど) - ログやキャッシュなど、再生成可能で履歴に残す必要のないもの
.gitignoreは通常、プロジェクトのルートディレクトリに1つ置きます。サブディレクトリにも個別の.gitignoreを置くことができ、その場合はそのディレクトリ配下に対して追加のルールが適用されます。
基本の書き方
.gitignoreの記述はシンプルで、1行につき1つのパターンを書くのが原則です。覚えておきたいルールは次の3点です。
- 1行1パターン:ファイル名・ディレクトリ名・ワイルドカードを使ったパターンを1行ずつ書きます。
- コメントは#:行頭が
#の行はコメントとして扱われ、無視されます。セクションの見出しやメモに使います。 - 空行は無視:空行は単なる区切りとして扱われるため、グループ分けに使えます。
たとえば、次のように書きます。
# ログとキャッシュは管理しない |
パターンは、書かれた.gitignoreが置かれているディレクトリを基準に解釈されます。スラッシュ / の位置によって意味が変わるため、次の表で代表的な記法を整理します。
パターン記法の一覧
| 記法 | 意味 | 例 | マッチするもの |
|---|---|---|---|
*.拡張子 | その拡張子を持つファイルすべて(全階層) | *.log | app.log、logs/debug.log など |
名前/ | 末尾スラッシュでディレクトリのみを無視 | build/ | どの階層にある build ディレクトリも |
/名前 | 先頭スラッシュで.gitignoreと同じ階層(ルート)限定 | /config.json | ルート直下の config.json のみ |
**/ | 任意の階層(再帰的)にマッチ | **/temp/ | どこにあっても temp ディレクトリ |
? | 任意の1文字 | file?.txt | file1.txt、fileA.txt など |
!パターン | 否定。直前までの無視ルールを解除し、再び追跡対象にする | !important.log | 無視対象から important.log を除外 |
補足として、* はスラッシュ以外の任意の文字列にマッチします。たとえば *.log はすべての階層の .log ファイルにマッチしますが、logs/*.log と書けば logs ディレクトリ直下の .log ファイルだけに限定できます。再帰的に下の階層まで含めたい場合は logs/**/*.log のように ** を使います。
具体例:よく書くパターン
実際のプロジェクトでは、次のようなパターンを書くことが多くなります。Node.jsのプロジェクトを例に挙げます。
# 依存パッケージ(再インストール可能なので管理しない) |
ポイントは、「再生成できるもの」「秘密情報を含むもの」「個人の作業環境に依存するもの」を無視対象にする、という考え方です。node_modules/ はパッケージ管理ツールでいつでも再インストールできますし、.env はパスワードやキーを含むため、誤って公開リポジトリに上げると重大な情報漏えいにつながります。
否定(!)を組み合わせると、「フォルダ全体は無視しつつ、特定のファイルだけは残す」という指定もできます。
# logs配下はすべて無視するが、サンプルだけは残す |
ただし否定には順序とディレクトリの注意点があり、後述の「落とし穴」で詳しく説明します。
すでに追跡済みのファイルには効かない
.gitignoreで最もつまずきやすいのが、すでにGitが追跡(commit済み、またはステージ済み)しているファイルには.gitignoreが効かないという点です。.gitignoreは「これから新しく追加されるファイル」を無視対象にするための仕組みであり、一度追跡されたファイルは.gitignoreにパターンを書いても無視されません。
たとえば、先に config.json をコミットしてしまった後で .gitignore に config.json を追記しても、そのファイルは引き続き git status に変更として表示され続けます。
git rm --cached で追跡を外す
すでに追跡済みのファイルを無視させるには、Gitの追跡(インデックス)から外す必要があります。ファイル自体は手元に残したまま、Gitの管理対象からだけ外すには git rm --cached を使います。
# 1ファイルを追跡から外す(ファイル自体は削除されない) |
--cached を付けると、作業ディレクトリのファイルは残したまま、Gitのインデックスからのみ削除されます(--cached を付けないと実ファイルも削除されるので注意してください)。この操作の後は.gitignoreのパターンが有効になり、以降そのファイルは無視されます。なお、過去のコミット履歴にはファイルが残るため、秘密情報を誤ってコミットしてしまった場合は履歴自体の書き換えや、漏れた認証情報の無効化が別途必要です。
グローバルgitignoreの設定
.DS_Store やエディタの設定フォルダ(.idea/ など)のように、どのプロジェクトでも共通して無視したいファイルは、プロジェクトごとの.gitignoreに毎回書くのではなく、ユーザー単位のグローバルgitignoreにまとめると管理が楽になります。
# グローバル用のファイルを登録 |
こうしておくと、OSやエディタが生成する個人的なファイルを各プロジェクトの.gitignoreに含めずに済みます。プロジェクトの.gitignoreは「そのプロジェクト固有のもの」だけに保てるため、チームで共有する際にも見通しが良くなります。
落とし穴
| 注意点 | 内容 |
|---|---|
| 追跡済みには効かない | 最大の落とし穴です。すでにコミット・ステージされたファイルは.gitignoreでは無視されません。git rm --cached で追跡を外してから無視させます。 |
| 否定の順序 | !による除外解除は、その前にある無視ルールを打ち消す形で働きます。否定パターンより後で同じファイルが再び無視されると、否定は無効になります。順序に注意しましょう。 |
| 否定とディレクトリ | 親ディレクトリ自体がdir/で無視されていると、その中のファイルを!dir/keep.txtで残そうとしても効きません。ディレクトリの無視を解除しない限り、中のファイルは復活しません。 |
| 末尾スラッシュの有無 | build/はディレクトリのみにマッチしますが、buildは同名のファイルにもマッチします。ディレクトリだけを狙うなら末尾に/を付けます。 |
| 先頭スラッシュの意味 | /configはルート直下のみ、configは全階層にマッチします。意図せず深い階層の同名ファイルまで無視しないよう、必要に応じて先頭/で範囲を限定します。 |
よくある質問(FAQ)
Q1. .gitignoreが効いているか確認する方法はありますか?
あります。git check-ignore -v ファイル名 を実行すると、そのファイルがどの.gitignoreのどの行によって無視されているかが表示されます。何も出力されなければ、そのファイルは無視対象になっていないということです。意図したパターンが効いているかの確認に便利です。
Q2. 空のディレクトリをGitで管理したいのですが、無視されてしまいます。
Gitは空のディレクトリ自体を追跡しません。ディレクトリ構造だけ残したい場合は、慣例として中に .gitkeep という空ファイルを置きます。なお.gitkeepはGitの公式機能ではなく、あくまで「空ファイルを置いてディレクトリを存在させる」ための慣習的な名前です。
Q3. .gitignore自体はコミットすべきですか?
はい、プロジェクトの.gitignoreはコミットして共有するのが基本です。チーム全員が同じ無視ルールを使えるようになり、不要なファイルの混入を全体で防げます。一方、個人の環境にだけ依存するルールは、前述のグローバルgitignoreや、リポジトリに含めない .git/info/exclude に書くとよいでしょう。
まとめ
.gitignoreは、Gitの管理対象から不要なファイルを除外し、リポジトリをクリーンに保つための基本ツールです。書き方は1行1パターンとシンプルですが、/の位置や末尾スラッシュ、!による否定など、パターン記法には意味の違いがあります。そして何より重要なのは、すでに追跡済みのファイルには.gitignoreが効かないという点です。その場合は git rm --cached で追跡を外してから無視させましょう。共通ルールはグローバルgitignoreにまとめ、プロジェクト固有のルールはコミットして共有することで、チーム全体で快適なバージョン管理を実現できます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?