はじめに
WordPressのプロジェクトをGitで管理する際、「どの方式で.gitignoreを記述するか」はチームの運用方針によって異なります。
本記事では、主流となっている2つの管理方式(ブラックリスト方式・ホワイトリスト方式)を比較し、GitHub等で見られる一般的な例と、実務を想定してより扱いやすくブラッシュアップした設定案をご紹介します。
プロジェクトの要件やチームのスキルセットに合わせて、最適な方式を選択してください。
管理方式の比較:ブラックリスト vs ホワイトリスト
それぞれの方式には一長一短があります。開発スタイルに合わせて選択することが重要です。
| 方式 | 特徴 | 適したケース・メリット |
|---|---|---|
| ブラックリスト方式 (不要なものを指定) |
基本は全て管理対象とし、除外したいファイル・ディレクトリだけを記述する。 | ディレクトリ追加(LP等)が頻発するプロジェクトに。都度設定を追加する手間がなく柔軟性が高い。また「除外したいものだけを書く」という直感性の高さがあり、チーム運用でも理解されやすい。 |
| ホワイトリスト方式 (必要なものだけ指定) |
基本は全て除外し、自作のテーマやプラグインなど、管理したいものだけを記述する。 | 自作コードのみを厳密に管理したいプロジェクトに。意図しないファイル(一時ファイルや機密情報など)の混入を確実に防げる。 |
GitHubなどで見られる実際の設定例
オープンソースプロジェクトや、実際の開発現場でよく採用されている本格的な設定例です。
ブラックリスト方式の代表例(GitHub公式テンプレート基準)
GitHubが公式に提供している「WordPress用 .gitignore テンプレート」をベースにした、コアファイルや各種生成ファイルを除外する標準的な記述です。
# WordPress Core
wp-admin/
wp-includes/
wp-*.php
index.php
xmlrpc.php
license.txt
readme.html
!wp-config-sample.php
# wp-config (Local dev config etc.)
wp-config.php
wp-config-local.php
# wp-content specific ignores
wp-content/upgrade/
wp-content/uploads/
wp-content/cache/
wp-content/blogs.dir/
wp-content/advanced-cache.php
wp-content/wp-cache-config.php
wp-content/aiowps_backups/
wp-content/backup-db/
wp-content/backups/
wp-content/updraft/
# Ignore default themes
wp-content/themes/twenty*/
# Logs and OS files
*.log
.DS_Store
Thumbs.db
ホワイトリスト方式の代表例(厳密な自作コード管理)
最初にすべてのファイルを無視(*)してから、管理したいディレクトリやファイルだけを階層ごとに許可(!)していく記述です。リポジトリの肥大化を完全に防ぎます。
# 1. 一旦すべてのファイルとディレクトリを除外
/*
# 2. ルート階層で必要なファイルのみ許可
!/.gitignore
!/README.md
# 3. wp-content ディレクトリ自体の追跡を許可(中身はまだ除外状態)
!/wp-content/
/wp-content/*
# 4. themes ディレクトリの追跡を許可し、自作テーマのみ除外解除
!/wp-content/themes/
/wp-content/themes/*
!/wp-content/themes/my-custom-theme/
# 5. plugins ディレクトリの追跡を許可し、自作プラグインのみ除外解除
!/wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/my-custom-plugin/
実務を想定してブラッシュアップした設定案
上記の公式テンプレートや一般的なベースをもとに、実際の開発現場の運用ルールに合わせて実用的にブラッシュアップした初見者向けの設定案です。
1. ブラックリスト方式の実務向け設定案(LP追加・スピード重視)
- プラグインと環境ファイルの除外: 他社製プラグインの差分衝突を防ぐためデフォルトで除外し、自動更新される
languages/も明示的に無視。 - セキュリティの担保: ローカル環境用の
wp-config-local.php等が誤ってコミットされないよう除外のままとしています(雛形のみ許可)。 - チーム開発への配慮: 日本語コメントを併記し、WP-CLIでのコア導入を促す運用ルールをヘッダーに記載。
※WordPressを「www/」や「manage/」などのサブディレクトリ内に設置している場合は、ご自身の環境に合わせてパスの先頭にディレクトリ名を追加してください。(書き換え例: www/manage/wp-admin/)
# ========================================
# 1. WordPress Core (WordPress本体)
# 【重要】WPコアファイルはGit管理外です。
# 初回セットアップ時は WP-CLI でコアをダウンロードするか、既存サイトから入手してください。
# コマンド例: wp core download --locale=ja
# ========================================
wp-admin/
wp-includes/
wp-*.php
index.php
xmlrpc.php
license.txt
readme.html
!wp-config-sample.php
# ========================================
# 2. WP Content & Themes (コンテンツとテーマ)
# ========================================
wp-content/uploads/
wp-content/upgrade/
# 言語ファイル(WPが自動更新するため除外)
wp-content/languages/
# デフォルトテーマの除外
wp-content/themes/twenty*/
# ----------------------------------------
# Plugins (プラグイン)
# 他社製を含め、プラグインディレクトリの中身はすべて除外。
# 自作プラグイン等、特定のプラグインだけを管理する場合は以下の「!」の行を有効化(コメント解除)する。
# ----------------------------------------
wp-content/plugins/*
# !wp-content/plugins/my-custom-plugin/
# ========================================
# 3. Auto-generated Files (自動生成ファイル:キャッシュ、バックアップ、セキュリティ)
# ========================================
# WP Super Cache
wp-content/cache/
wp-content/wp-cache-config.php
wp-content/advanced-cache.php
# UpdraftPlus & AIOS Security
wp-content/updraft/
wp-content/aiowps_backups/
# ========================================
# 4. Database, Archives & Logs (データベース、圧縮ファイル、ログ)
# ========================================
.data/
*.sql
*.sqlite
*.tar.gz
*.zip
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# ========================================
# 5. OS, Environment & WP Engine Tools (OS、開発環境、WP Engine関連ツール)
# ========================================
node_modules/
.DS_Store
Thumbs.db
.vscode/settings.json
.idea/
.htaccess
.wpe-devkit/
.wpe-pull-ignore
.wpe-push-ignore
.wpengine-conf/
_wpeprivate/
config.codekit3
2. ホワイトリスト方式の実務向け設定案(厳密な自作コード管理)
- 確実な階層追跡: 「親ディレクトリを許可(
!/path/)してから中身を除外(/path/*)」というステップを踏むことで、深い階層のファイルが追跡されないトラブルを回避しています。 - 設定の自己追跡:
!.gitignoreを追記し、以後の設定変更が確実にGitに反映されるよう修正。 - 冗長な記述の排除: 冒頭の
/*で不要ファイル(OSの一時ファイルやDBなど)もすべて除外されるため、後半の冗長な指定を削除。テーマ内のnode_modules等はテーマ用ディレクトリに別途 .gitignore を置くスマートな構成に変更しています。
※WordPressをサブディレクトリ(例:www/xxxx/)に設置している場合は、記述されているすべてのパスを www/xxxx/ ベースに書き換えてご利用ください。
# ========================================
# 1. WordPress Core
# ▼一旦Git管理を全て除外後、管理に含めるものは先頭に「!」をつけて除外を解除していく。(ホワイトリスト方式)
# (例)!wp-config-sample.php
# ========================================
# ルート以下のすべてを一旦除外(コアファイル、デフォルトテーマ・プラグインを含めないため)
/*
# Git管理に必要なファイルを除外解除(※追記必須)
!.gitignore
!README.md
!wp-config-sample.php
# ========================================
# 2. WP Content (Themes, Plugins, mu-plugins)
# 「親ディレクトリが除外(無視)されたら、その中身は一切チェックしない」ため1階層目ずつ許可
# ========================================
# wp-content ディレクトリ自体は追跡できるようにする
!/wp-content/
# ただし、wp-content の「"中身"」はすべて除外する
/wp-content/*
# ----------------------------------------
# Themes
# ----------------------------------------
# themes ディレクトリ自体は追跡できるようにする
!/wp-content/themes/
# ただし、themes の「"中身"」(twentytwentyfour等)はすべて除外する
/wp-content/themes/*
# 自作テーマ(original)のみ除外解除してGit管理に含める
!/wp-content/themes/original/
# ----------------------------------------
# mu-plugins
# ----------------------------------------
# 必須プラグイン(mu-plugins)の追跡許可
!/wp-content/mu-plugins/
# ----------------------------------------
# Plugins (自作プラグインがある場合のみ)
# ----------------------------------------
# 自作プラグインを作成する場合は、以下のコメントアウトを外してください。
# !/wp-content/plugins/
# /wp-content/plugins/*
# !/wp-content/plugins/my-custom-plugin/
# ========================================
# 3. Environment & Tools について
# ========================================
# ※OS固有ファイル(.DS_Store等)やログファイル、Node.js(.node_modules)等は
# 冒頭の「/*」ですでにすべて除外されているため、ここでの記述は不要です。
#
# 自作テーマ内で npm 等を使用し node_modules を除外したい場合は、
# /wp-content/themes/original/ 内に別途専用の .gitignore を設置してください。
.gitignoreを後から反映させる方法
すでにGitで追跡(コミット)されてしまっているファイルを、後から.gitignoreの設定通りに除外するには、以下の手順でGitのキャッシュをクリアします。
- ターミナルでリポジトリのルートに移動
- 追跡キャッシュをすべて解除
- 変更を再登録してコミット
# 追跡キャッシュを一度すべて解除(ローカルのファイルは消えません)
git rm -r --cached .
# 新しい .gitignore のルールに従ってファイルを再登録
git add .
# 変更をコミット
git commit -m "refactor: .gitignoreの更新と除外ファイルの追跡解除"
未コミットの変更がある状態で
git rm -r --cached . を実行するとトラブルの原因になります。必ず作業中の変更をコミットするか、stashで退避させてから実行してください。
よくある質問
- 結局、どちらの方式を採用すべきですか?
-
冒頭の「管理方式の比較」セクションでも触れた通り、チームの開発スタイルや案件の性質に合わせて選択するのがベストです。
「ブラックリスト方式」は、「除外したいものだけを書く」という直感性の高さがあり、Gitに不慣れなメンバーがいても運用しやすいメリットがあります。また、WordPress以外のLP(静的ページ)が混在するサイトや、クライアント側も直接サーバーを操作するような案件においては、予期せぬファイルの「Git管理漏れ」を自動的に防げる強みがあります。
一方で、「ホワイトリスト方式」は、意図しないファイル(環境固有の設定ファイルや一時ファイル、認証情報など)が誤ってコミットされる事故を100%防げるという大きな利点があります。自社サービスの開発や、厳密な自作コード(テーマ・プラグイン)の管理のみを目的とするプロジェクトに最適です。
柔軟性とスピードを重視するなら「ブラックリスト方式」、堅牢性とコードの純度を重視するなら「ホワイトリスト方式」という基準で検討してみてください。
- 一部のファイルが除外解除されません
- .gitignoreは上から下に向かって評価されます。ワイルドカード(例:
wp-*.php)でまとめて除外する記述よりも下(後)に解除指定(!wp-config-sample.php等)を書く必要があります。原因を特定したい場合はgit check-ignore -v ファイルパスコマンドが有効です。 - コアファイルを除外すると環境構築が面倒になりませんか?
- たしかに
git cloneした直後はWordPressが動作しませんが、WP-CLIを導入していればwp core downloadコマンド一発でファイルを揃えることができます。自動更新時のコンフリクトを回避するメリットのほうが大きいため、コアファイルの除外をベースに運用を構築することをおすすめします。


