WordPressの運用において、テーマの更新やプラグインの管理、あるいはサイトの移行作業などをブラウザの管理画面(GUI)から手動で行うのは、時間がかかりミスの原因にもなります。特に複数のサイトを管理している場合や、同じ設定を何度も繰り返すような場面において、手作業は大きなロスを生みます。
そこで活躍するのが、コマンドラインからWordPressを操作できる強力なツール「WP-CLI」です。WP-CLIを使えば、面倒なプラグインの一括更新や、シリアライズされたデータを崩さない安全なデータベース内の一括置換作業などが、ターミナル上で数秒のうちに完了します。
本記事では、Web開発エンジニアやWordPressの運用担当者に向けて、WP-CLIのインストール手順から実務で役立つ基本コマンド、そしてサイト引越し等の複雑な作業を安全・確実に行うための「search-replace」の具体的な使い方まで、現場ですぐに活かせる実践的なノウハウを中心に詳しく解説します。
1. WP-CLIとは?できることと導入のメリット
WP-CLI(WordPress Command Line Interface)は、WordPressベースのWebサイトをブラウザのGUIを使用せずに、ターミナル(コマンドライン)から直接管理・操作するためのオープンソースツールです。
管理画面で行える機能のほぼ全てを網羅しており、一部機能においてはGUIよりも高度な操作をより直感的かつ安全に実行できます。WP-CLIを導入することで、主に以下の3つの圧倒的なメリットが得られます。
圧倒的な作業効率の向上
WordPressの管理画面を利用する場合、ログインプロセスを経て目的のページへ遷移し、ページのロードを待ち、ボタンをクリックする…という画面遷移の待ち時間がどうしても発生します。ネットワークの遅延やサーバーのレスポンスが遅い場合、この待ち時間はチリツモで膨大なロスとなります。
WP-CLIを使用すれば、「wp target-command」とキーボードで打ち込みEnterを押すだけで瞬時に処理が始まり、完了の通知を受け取ることができます。複数のプラグインの同時インストールやアップデートも、コマンド一発で並行処理されるため、時間短縮の効果は絶大です。
各種作業のプログラマティックな自動化
ターミナルで実行できる最大の恩恵は、Bashなどのシェルスクリプトやサーバー上でスケジュール実行を行う「cron」と組み合わせることで、複雑な運用フローを完全に自動化できる点にあります。
例えば「テスト用WordPress環境を構築する際、データベースの作成からコアのインストール、指定した10個の推奨プラグインの導入と有効化までを全自動で行うスクリプト」を作成しておけば、手作業によるセットアップは二度と必要ありません。開発者が構築にかかる初期負担を大幅に削減し、一貫した同一環境を作り出すことができます。
GUIで難易度の高い処理を安全・確実に行う
後述しますが、サイトのドメイン変更や常時SSL化(HTTPS化)を行う場合、データベースの中にある昔のURLを新しいURLに書き換える作業が発生します。この際、生のSQLでREPLACEをかけてしまうと、PHPの仕様により「シリアライズされたデータの整合性」が壊れ、テーマやプラグインの設定が吹き飛ぶ危険性があります。
WP-CLIの搭載機能には、このシリアライズ状態を判別して正確に置換できる機能が備わっており、GUIのプラグインを用いるよりも遥かに安心かつ高速にサイトの移行・メンテナンスに対応できます。
2. WP-CLIの動作要件とインストール方法
WP-CLIをサーバーや手元のPCで使うためには、いくつかの前提条件を満たす必要があります。
動作要件・環境と共用サーバーでの利用
- OS環境: UNIX系の環境(Linux, macOS, FreeBSD など)での利用が標準です。Windowsの場合は、WSL(Windows Subsystem for Linux)の利用が強く推奨されます。
- PHP: PHP 5.6以降がインストールされていること。ただし、現在においてはPHPの最新機能やセキュリティを考慮し、実行環境としてPHP 7.4〜8.xを利用していることが望ましいです。
- WordPress: バージョン3.7以上。基本的には最新版を使用することを推奨します。
- サーバー環境の対応: SSH接続とPHPの実行ができる環境であれば、VPS(仮想専用サーバー)に限らず一般的な「共用サーバー」でもWP-CLIは利用可能です。例えばロリポップ等の共用サーバーであっても、SSHでログインしたのちに
wp-cli.pharをダウンロード・設定することで使用できます。
WP-CLIのインストール手順
インストール自体は非常に平易です。公式から実行可能なアーカイブファイル(phar)をダウンロードして権限を付与し、パスの通ったディレクトリへ移動するだけです。共用サーバーの場合はシステムディレクトリ(/usr/local/bin/)等へ移動できないため、ユーザーディレクトリの ~/bin 配下に配置してパスを通すなどの工夫をします。
# 1. wp-cli.phar をダウンロード
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# 2. 正しく動作するかテスト(情報が表示されればOK)
php wp-cli.phar --info
# 3. 実行権限を付与する
chmod +x wp-cli.phar
# 4. コマンドラインから「wp」だけで呼び出せるように移動(管理者権限がある場合)
sudo mv wp-cli.phar /usr/local/bin/wp
移動後、ターミナルでwp --infoと入力して、PHPのバージョンやWP-CLIのインストールパスが正しく表示されれば、導入完了です。
Docker環境コンテナ(wordpress:cli)での利用
現在、ローカルでのWeb開発ではDocker/Docker Composeを利用するケースが一般的です。もしホストOSのローカル環境に直接PHPインタープリターを入れたくない場合や、Dockerコンテナ上で起動しているWordPressを操作したい場合は、公式が提供している wordpress:cli イメージを利用します。
docker-compose.yml に専用のCLIコンテナを定義しておくか、あるいは以下のコマンドのように、起動時に一時的なコンテナを作って即座にコマンドを実行させることが可能です。
# docker-composeを利用して一時コンテナ上で WP-CLI(wp plugin list)を実行する例
docker-compose run --rm cli wp plugin list
3. WP-CLIの基本構文と使い方
WP-CLIは階層構造を持ったコマンド体系となっており、非常に直感的に扱うことができます。基本構造は以下のようになります。
基本構造: wp <コマンド> <サブコマンド> [オプション]
例えばプラグインをインストールして有効化する場合はwp plugin install autoptimize --activateのように記述します。pluginが操作対象を示す大コマンド、installが具体的な実行アクションのサブコマンド、そして--activateが追加のオプションです。
困ったときに便利なヘルプコマンド
WP-CLIには詳細な内蔵マニュアルがあります。「このコマンドはどう使うんだっけ?」「どんなオプションがある?」と迷ったときは、公式ドキュメントを探す前にまずhelpコマンドを叩いてみましょう。
# wpコマンド全体のヘルプを表示
wp help
# プラグイン関連のサブコマンド一覧と説明を表示
wp help plugin
# 個別アクションの詳しい使い方とオプションの仕様を表示
wp help plugin install
このヘルプ機能により、インタープリターやブラウザを開かなくても、ほとんどの疑問はターミナル上で自己解決できます。
4. 実務で役立つWP-CLIの基本コマンド一覧
日々の運用やコーディングの裏側で多用する、必ず覚えておきたい主要なコマンドをカテゴリ別に解説します。
WordPressコアの管理
WordPressの根幹となる本体のバージョン管理を行います。新規インストールや緊急時のデータ復旧で重宝します。
- 現在のバージョンの確認
wp core version - 本体ファイルのダウンロード(日本語版)
wp core download --locale=ja - WordPress本体のアップデート
wp core update
※マイナーアップデートもメジャーアップデートもワンコマンドで実行されます。 - コアファイルの強制再インストール(ファイルが改ざんされたり破損した疑いがある場合の復旧パッチ)
wp core download --force
テーマ・プラグインの管理
セキュリティのためには常にテーマやプラグインを最新に保つ必要がありますが、ログインして手動ポチポチ更新するのは時間の無駄です。WP-CLIならこれらの処理が一括で行えます。
- インストール済みのテーマ(またはプラグイン)を一覧表示
wp theme listwp plugin list
現状のステータス(有効か無効か、更新通知が来ているか)がグラフィカルな表形式で表示されます。 - プラグインのインストール
wp plugin install <plugin-slug>
ディレクトリ上のスラッグだけでなく、公式ディレクトリ外で配布されているZIPファイルのURLを直接指定してのインストールも可能です。 - すべてのプラグインを一括でアップデートする
wp plugin update --all
非常に強力で時短になりますが、互換性エラーに備えて実行前に必ずバックアップを取る運用とセットにしてください。
ユーザー管理と救済措置
クライアント検証環境の構築時など、複数人のアカウントを一気に作成する際や、「管理者(admin)パスワードを忘れて管理画面に入れない」といったトラブルのリカバリに極めて有効です。
- ユーザー情報の更新(パスワードリセット)
wp user update <ユーザー名またはID> --user_pass="新パスワード" - 新規管理者ユーザーの追加
wp user create <ユーザー名> <メールアドレス> --role=administrator
※注意:コマンドの履歴(.bash_historyや.zsh_historyなど)に生のパスワードが残ってしまうため、共用サーバーでこれらの操作を行った後は、コマンドラインの履歴を適宜削除するなどの配慮が必要です。
投稿コンテンツ・タグ・データの管理
ダミー記事の一括生成や、ターム(カテゴリ、タグなど)やカスタムポストタイプの設定情報を確認するコマンドです。
- ダミー記事の生成(テーマ作成時やページ分割UIのテストなどに)
wp post generate --count=50
ランダムな内容のテストコンテンツを50件自動生成します。記事を一瞬で作れるため、ページネーションの実装検証などで必須級のコマンドです。 - ブログ記事にタグの作成
wp term create post_tag "ニュース"
5. データベース管理と「search-replace」の強力な活用
WP-CLIの真骨頂とも言えるのがデータベース(DB)への直接介入です。ここでは実務で必須となるエクスポート、直接クエリの発行、そして強力な一括置換について解説します。
データベースのエクスポートとインポート(公開ディレクトリに注意)
大掛かりなデータの置換を行う前や、毎日のバックアップ処理などにおいて、コマンドでSQLダンプを生成できます。インポートも同様に簡単です。
# データベースをエクスポートする(※出力先に注意!)
wp db export ../backup-db.sql
# 万が一の場合は直ちにインポートしてリストア
wp db import ../backup-db.sql
【⚠️セキュリティ上の重要事項】wp db export を実行する際、出力した .sql ファイルを DocumentRoot(ブラウザからアクセス可能な公開ディレクトリ)内 に保存してしまうと、第三者がURLを推測して直接アクセスし、パスワードを含む個人情報などがすべて漏洩する極めて重大なリスクがあります。
出力コマンド例のように ../backup-db.sql などと指定し、必ず公開ディレクトリ(DocumentRoot)の外部へエクスポートするか、直後に安全な場所へ移動するなど厳重に管理してください。
任意のSQLコマンドを実行する(wp db query)
WP-CLIから直接、任意のSQLクエリ(SELECT、UPDATE、DELETEなど)を叩くことも可能です。MySQLインターフェースにいちいちログインせずとも、ターミナルからワンライナーでデータを操作・確認できるため運用時に重宝されます。
# 全ユーザーのIDとメールアドレスを一覧で取得する
wp db query "SELECT ID, user_email FROM wp_users;"
search-replace(一括置換)の基本と絶対的なメリット
サイトのドメインを変更したり、ローカル開発環境から本番公開サーバーへ移行・コピーする時など、内部に含まれるURLの文字列(例:http://localhost:8000 → https://production-site.com)の完全書き換えが必要不可欠です。
先述の通り、WordPressは多くの設定内容(ウィジェット、プラグインの各種オプションテーマ設定等)を「シリアライズ」と呼ばれる形式でデータベースに保存しています。シリアライズとは配列やオブジェクトの構造を文字列として保存する仕組みですが、その中に「文字数」の定義が含まれているのが特徴です。
このため、単純にphpMyAdminなどのツールから生のSQLで強制置換すると、置換前と置換後のドメインURLの文字数が異なる場合、定義された文字数と実際の文字列長にズレが生じ、その瞬間にデータが壊れ設定情報が全て消失します。
WP-CLIのsearch-replaceは、これらのシリアライズされたデータを一度デコードして展開し、安全に文字列を置換したうえで、再度正しい文字数でシリアライズしなおして保存してくれます。
# 旧ドメインを新ドメインへ一括置換する基本形
wp search-replace 'https://old-domain.com' 'https://new-domain.com'
置換前のバックアップの重要性
search-replace はデータベース全体を対象とする破壊的な操作です。意図しない文字列まで誤って置換してしまったりするリスクがあるため、**コマンドを実行する前には必ず前述の wp db export を実行し、データベースの安全なバックアップを取得することを強く推奨します。**
Dry-runと除外ルールの徹底
バックアップに加えて、必ず–dry-run(テスト実行)オプションを併用する癖をつけましょう。
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --dry-run
これを付与するとプレビューモードとなり、「実際に実行した場合はどのテーブルで何件の置換がヒットして更新されるか」のレポートだけが表示され、データへの書き込みは行われません。意図した規模の置換かどうか明確に判断できます。
また、注意点として「guid」カラムのURLは不用意に書き換えない方針が推奨されます。GUIDは記事の固有識別子として利用されており、これを本番環境で変更してしまうと、RSSフィードリーダー側などで「以前配信された記事全てが、全く新しい新規記事として再度大量に配信(誤検知)されてしまう」事故に見舞われます。
これを回避するために、以下のように列指定を除くのがベストプラクティスです。
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid
6. 【実践編】WP-CLIを活用した自動化・一括設定の例(シェルスクリプト連携)
WP-CLIの真の実力を発揮するのは、コマンド同士をつないだ独自のワークフロー構築です。実務の現場でよく使われる強力なユースケースを2つ紹介します。
新規サイト立ち上げ時の自動セットアップスクリプト
WordPressのインストール手順、DBの接続情報(wp-config.php)の生成、さらに必ず利用するような定番プラグイン群のインストールや不要データのクリーンアップなどの操作を一つのバッチファイルとして定義した例です。
#!/bin/bash
# wordpressディレクトリを作成し移動
mkdir wordpress
cd wordpress
# 日本語ロケールでコアファイルをダウンロード
wp core download --locale=ja
# wp-config.php の生成
wp core config --dbname='db_name' --dbuser='db_user' --dbpass='db_pass' --dbhost='localhost' --dbprefix='wp_'
# データベース自体の生成
wp db create
# WordPressの初期セットアップ(サイト名や管理者設定)
wp core install --title=test --admin_user=admin_user --admin_password=admin_password --admin_email=admin_email --url=https://wp.test
# 推奨プラグインの一括インストールおよび即時有効化
wp plugin install autoptimize duplicate-post ewww-image-optimizer password-protected svg-support --activate
echo "========================================"
echo " サイトの基本セットアップが成功・完了しました。 "
echo "========================================"
上記を setup.sh などのファイル名で保存し、bash setup.sh を実行すれば、文字通り数秒〜十数秒前後で、プラグイン込みの開発用ゼロベース環境が完全構築されます。
リモートのDBを本番と同期させる高度な活用と wp-cli.yml の設定
自環境(ローカル)のコンソールから SSH パイプを経由して、リモート先の本番環境のコマンドを実行・操作することが可能です。これには、あらかじめプロジェクトのルートディレクトリに設定ファイルである wp-cli.yml を配置し、@prod などの「エイリアス(宛先)」を登録しておきます。
# wp-cli.yml の記述例
@prod:
ssh: [email protected]:2222/var/www/vhosts/production-site.com/httpdocs/
このように設定を作った状態で、コマンドラインでのパイプ処理(|)と組み合わせると、「リモートからエクスポートした生のSQLデータを、自環境へそのままストリームで流し込みインポートする」という動きが実現します。
# 本番から最新DBを抜き出し、そのままローカルへ流し込み、ドメインを置換したのちキャッシュを消去する
wp @prod db export - --allow-root | wp db import - && wp search-replace 'https://before.com' 'https://after.com' && wp cache flush
このようにワンライナー(1行)のコマンドによって、「本番のDBデータを手元にコピーしつつ、そのまま自分の検証用URLへと即座に変換・反映される」という、複雑な工程がものの数十秒で終わります。
7. トラブルシューティングと安全な運用のベストプラクティス
WP-CLIは非常に強力な権限でシステムの深い部分にアプローチするため、不用意に実行すると取り返しのつかないミスを招く恐れがあります。安全運用のための注意事項を認識しておきましょう。
権限設定と “–allow-root” について
セキュリティ上、WP-CLIをOSのroot環境・rootユーザーで実行することは禁止(非推奨)されており、実行しようとすると赤い警告メッセージと共に処理が停止します。原則としてコマンドはサーバーの一般ユーザー(ファイルの適正な所有者)で実行すべきです。
しかし、Dockerコンテナの初期状態や止むを得ない事情でrootのまま実行しなければいけない場合は、--allow-root のフラグを付与してあえて警告を突破する必要があります。ファイルやディレクトリのパーミッションやオーナー権限が崩れないように細心の注意を払ってください。
キャッシュのクリアを忘れない
WP-CLIを使って情報を直接書き換えた等(search-replaceやプラグインの有効無効など)の処理後や、逆に「実行したはずなのに反映されていない(表示が変わらない)」という問題が散見されます。
このような場合は、WordPress自体のオブジェクトキャッシュやトランジェント(一時データ)が悪さをしている可能性が高いため、以下のコマンドを用いてキャッシュ群をクリア(フラッシュ)してください。
wp cache flush
これにより、データベースの整合性と各種キャッシュの設定がクリアされ、最新の状態がただちにブラウザ等へ反映されます。
8. まとめ – WP-CLIでWordPress管理を高速化しよう
WP-CLIは、もはや単なる「おまけツール」ではなく、現代的なWeb開発や運用フローにおいて欠かせない標準インフラ技術となっています。
- 効率化:コマンド一つでプラグインのインストールや更新、コアのバックアップまで完結
- 安全性の一歩:
search-replaceを活用して、シリアライズ状態を保護しながら安全にサイトをドメイン移行・公開するための鉄則。事前にwp db exportで外部ディレクトリへバックアップし、--dry-runオプションで必ずテストや検証を行うこと。 - 自動化・拡張:Bashのシェルスクリプトやcron処理との有機的な結合、さらに
wp-cli.ymlによる@prodなどのリモート先のコントロール連携。
はじめから全てのコマンドを暗記する必要はありません。まずは「wp plugin list」といった対象の確認(参照系のコマンド)や、簡単なアップデート等の安全な操作から徐々に取り入れてみてください。日々のWordPress管理・開発における体験のスピードと質が、劇的に向上することを実感できるはずです。

Comment