過去のWordPressは、シンプルなコードベースを使用して構築され、その最も抽象的なシステムはオブジェクト指向のPHPでした。しかし、ここ数年で、これは良い方向に変化してきました。単体テストをはじめCSSの前処理やコマンドラインツールなど、開発者にとって使いやすいアセットが次々と導入されます。本記事では、私のお気に入りの一つであるWP-CLIについてご説明します。

WP-CLIは、10年前からのオープンソースプロジェクトであり、2003年以降、主にDaniel Bachhuberによって管理されています。WP-CLIの主な目標は、WordPress開発者のワークフローの高速化です。

一方、長年にわたって、このプロジェクトはさらに成長してきました! 現在では、TrellisやBedrockなどの他のオープンソースプロジェクトの要件にもなっています。2017年1月の時点で、WP-CLIは正式にWordPress.orgに移動し、現在はAlain Schlesserによって共同管理されています。

WP-CLI v2は2018年8月8日にリリースされたため、その変更点と新機能についても説明します。Kinstaのお客様である場合、すべてのサーバーにデフォルトでWP-CLI v2.0.1がインストールされています。開始するには、サーバーにSSHで接続するだけです。SSHアクセスはすべてのホスティングプランでご利用いただけます。(SSHでの接続ができない場合は、SSHの「接続拒否」エラーを修正してください)。

WP-CLIの入手

WP-CLI v2.0.0の最小PHP要件は、PHP 5.4に変わりました。これで一歩前進してきましたが、サポートされているバージョンのPHP、つまり5.6以上を採用することをお勧めします。セキュリティとパフォーマンスの両方の理由から、すべてのKinstaインストールのデフォルト設定はPHP 7.2です。PHP 7.3および7.4もご利用いただけます。

開始するには、WP-CLIをインストールします。これは非常に簡単なプロセスです。 LinuxおよびOSXの手順は次のとおりです。次の3つのコマンドを順番に発行します。

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

問題が発生した場合、またはWindowsをご利用の場合は、こちらの基本的な手順またはその他のインストール方法をご参照ください。

完了したら、wp --infoコマンドを発行すると、意味のある応答が返されるはずです。

サーバーにWP-CLIをインストールする場合も、プロセスは同じです。Kinstaをご利用の場合、WP-CLIはすでにインストールされています。現在実行しているバージョンがわからない場合は、 wp cli versionコマンドを発行して簡単に調べることができます。

WP-CLIの基本

コマンドラインからWordPressにアクセスできること自体は強力なことですが、bashスクリプトを使用すると、管理やスピードアップのオプションの数が増えます。

bashスクリプトを使用すると、単一のコマンドで一連のコマンドを実行できます。bash install-and-setup.shと入力すると、次の結果が返されます。

  • WordPressのダウンロード
  • wp-config.phpの作成と内容作成
  • データベースの作成
  • WordPressのインストール
  • 必要なプラグインのインストールとアクティブ化
  • テーマのインストールとアクティブ化
  • テストコンテンツのダウンロードと追加

上記は、プロジェクト用の新しいテスト環境を作成する際に実行するステップです。通常、特に複数のプラグインがある場合は、少なくとも5〜10分かかります。単一のコマンドの発行ははるかに高速です。

WP-CLIコマンドの概要

ターミナルでの作業に慣れている場合は、WP-CLIの特別なことは何もありません。すべてのコマンドはwpで始まり、その後にコマンド自体とサブコマンドと、次のような必須パラメーターやオプションパラメーターが続きます。

wp command subcommand requiredparam --optionalparam --optionalparam2=value

実際のコマンドでの機能を見てみるように、テーマをインストールしましょう。

wp theme install twentyseventeen --activate

これにより、WordPressインストールにTwenty Seventeenテーマがインストールされ、アクティブ化されます。

WP-CLIは、ターミナルの現在のWordPressインストールにコマンドを適用することに注意してください。ディレクトリを切り替えて別のWordPressインストールに移動すると、コマンドがそのWordPressに適用されます。

便利な実施例

WP-CLIの基本は以上です!後程説明するもっと詳細な機能もありますが、これで開始して必要なことをすべて実行できるはずです。 コマンドリストを見て、そのいくつかを試してみることをお勧めします。本記事では、便利な内容を確認してから、SSH経由のWP-CLIの使用とbashスクリプトの使用に移ります。

WordPressのインストール

私はWP-CLIを頻繁に使用してテスト環境をセットアップします。その最初のステップは、vanillaインストールです。 私が実行するコマンドのリストは次のとおりです。

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

すごいでしょう。最初のコマンドを使用してWordPressの最新バージョンがダウンロードされます。2番目のコマンドでは、データベースアクセスと追加のPHPを含む設定ファイルをセットアップされます。追加の定数により、テスト用のデバッグオプションが確実にオンになります。WordPressのデバッグの詳細については、こちらに詳細なガイドをご覧ください。

3番目のコマンドではデータベースが作成され(WP-CLIは設定ファイルのデータベースアクセス情報を使用します)、最後のパラメーターを使用してWordPressがインストールされます。

WordPressのコアの再インストール

WP-CLIを使用してWordPressのコアを再インストールすることもできます。次のコマンドは、デフォルトのテーマとプラグインなしでのWordPressコアをダウンロードします。

wp core download --skip-content --force

WordPressのURLの変更

WordPressのURLを変更する理由は、ドメインの切り替え、サブドメインへの移動、wwwから非wwwへの移行、ファイルを移動すること、さらにHTTPからHTTPSへの移行などがあります。いずれにせよ、wp option updateコマンドを使用すると、簡単にURLを変更できます。下記はその一例です。

wp option update home 'http://example.com'
wp option update siteurl 'http://example.com'

現在のプラグインとその詳細の一覧

サイトにインストールされている現在のプラグインの一覧(リスト)を取得するには、次のコマンドを使用します。この例では、Schema and Yoast SEOプラグインがインストールされていることがわかります。また、ステータス(アクティブ/非アクティブ)、利用可能なアップデートの有無と、現在のバージョンという情報も返されます。

wp plugin list

複数のプラグインのインストール

複数のプラグインをインストールするには、パラメータを重ねるだけです。3つのプラグインをダウンロードしてアクティブ化する例を次に示します。

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

プラグイン名は、リポジトリ内の名前に由来することご注意ください。名前を調べる最も簡単な方法は、そのプラグインのページにアクセスしてURLを確認するか、ターミナルにリストを表示するwp plugin search searchtermを使用することです。

WordPressプラグインリポジトリのURL
WordPressプラグインリポジトリのURL

必要に応じて、--version属性を使用して、WordPressプラグインの古いバージョンをインストールすることもできます。

wp plugin install wordpress-seo --version=4.8 --activate

さらにすごいことに、リポジトリだけでなく、リモートファイルからもプラグインをインストールすることができます。プラグインを開発している場合やプレミアムプラグインを使用している場合、これは特に便利でしょう。次のコマンドでは、リポジトリから2つのプラグインと、Amazon S3サーバーから1つのプラグインがインストールされます。

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

複数のプラグインの非アクティブ化

単一のプラグインを非アクティブ化するには、次のコマンドを実行します。

wp plugin deactivate wordpress-seo

すべてのプラグインを一度に非アクティブ化するには、次のコマンドを実行します。

wp plugin deactivate --all
WP-CLIでのすべてのプラグインの非アクティブ化
WP-CLIでのすべてのプラグインの非アクティブ化

このコマンドは、互換性の問題をトラブルシューティングしている際に、すべてのプラグインを一度に無効にする必要がある場合に便利です。次に、原因が見つかるまでプラグインを一つずつ再度有効にします。

プラグインの更新

WordPressプラグインを手動で更新することもできます。例えば:

wp plugin update wordpress-seo
P-CLIでのWordPressプラグインの手動更新
WP-CLIでのWordPressプラグインの手動更新

データベースの検索と置換

データベースをコピーして貼り付けるだけではサイトを移行することが難しい主な理由の一つは、データベースにシリアル化された配列があることです。http://testsite.comhttp://livewebsite.comで置き換える場合、文字列が一致しないため、シリアル化された配列は意味がなくなります。

search-replaceコマンドを使用すると、最初に配列のシリアル化が解除され、次に検索と置換が実行され、最後に配列が再シリアル化されます。これを行うには、次の簡単なコマンドを使用します。

wp search-replace oldstring newstring

追加のパラメーターを使用すると、--dry-runを使用して置き換えられる内容をプレビューするなど、さらに多くのことができます。

インポートとエクスポート

WP-CLIでコンテンツをエクスポートする方法は、WordPressのエクスポートツールなどのXMLファイルを作成することと、生データベースをエクスポートやインポートすることという2つの方法があります。私の日常業務上では後者の方が便利です。サイトを同期するときに非常に役立ちます。

SQLファイルを作成するにはwp db exportを使用するだけで、それをインポートするにはwp db import file.sqlを使用するだけです。非常に楽ですが、必要なものを上書きしないように注意してください。インポートすると、既存のデータベースが削除され、代わりにSQLファイルが使用されます。

ユーザーの追加、更新、削除

WP-CLIでユーザーを追加、更新、削除できます。

# List user IDs
$ wp user list --field=ID
1

# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8

# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.

# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com

役割と権限の管理

WP-CLIでは、役割をwp roleコマンドを使用して非常に簡単に管理できます。自分で開発したプラグインのプラグイン外で作成したカスタムの役割との動作をテストしたい場合、これはかなり便利です。

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

上記のコマンドは、新しい役割(Organizer)を作成し、編集者の役割のすべての機能をそれに付与し、新しい機能(manage-events)を追加するものです。コマンドの操作から、WP-CLIを使ってWordPressのパスワードを変更することができます。

テストデータの生成

私は、テストの際に使用できるダミーコンテンツのサイトへの追加などの偽物関連の関数が大好きです。WP-CLIにはこれらの関数がいくつか組み込まれています。例えば、ユーザー、用語、投稿などを生成するものは次の通りです。

wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50

WP-Cronイベントの管理

WP-CLIではWP-CronのイベントやWordPressのCronジョブも管理できます。たとえば、次のコマンドは現在のcronイベントの一覧を返します。

wp cron event list
wp-cronイベントの一覧
wp-cronイベントの一覧

一時データの削除

次のコマンドを使用して、1つまたはすべての一時データを削除してクリアすることもできます。

wp transient delete --all

マルチサイトを実行している場合は、もう少し複雑なコマンドが必要になります。デフォルトでは、コマンドはwp_optionsテーブルのみをチェックします。wp_1_optionswp_2_optionsなどをチェックしません。

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

wp_optionsテーブルのクリーンアップ

wp_options tableでは、サードパーティ製プラグイン及びテーマにより残された自動読み込みデータのせいでクエリ時間が遅くなることがあります。WP-CLIを使用してwp_optionsテーブルをクリーンアップする方法については、WP Bulletのこちらの素晴らしい記事をご覧ください。

WordPressのリビジョンの削除

大規模なサイトでは、WordPressのリビジョンはデータベース内の何千行にもなり、中には不要なものもあるでしょう。投稿のリビジョンをWP-CLIで削除できます。これはコマンドの例です。

$ wp post delete $(wp post list --post_type='revision' --format=ids)
WP-CLIを使用してWordPressのリビジョンを削除する
WP-CLIを使用してWordPressのリビジョンを削除する

メンテナンスモードの管理

WP-CLI v2.2.0以降、WordPressサイトのメンテナンスモードを管理できるようになりました。例えば、

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Elasticsearchを使用したデータのインデックス作成

Elasticsearchはオープンソースの全文検索エンジンです。データの索引付けと検索を驚くほど速いスピードで行うために設計されたものです。Kinstaのお客様にはElasticsearchをアドオンとしてご利用いただけます。ElasticPressのWP-CLI コマンドを使用して、SSHでインデックス作成を行うことができます。例えば、

wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

多言語サイトの操作

WP-CLI v2.0.0では、多言語サイトのユーザー向けの新しいコマンドファミリーであるwp i18nが導入されました。 たとえば、WordPressプラグインまたはテーマのPOTファイルを作成できます。

wp i18n make-pot  [] [--slug=] [--domain=] [--ignore-domain] [--merge[=]] [--exclude=] [--skip-js]

i18nコマンドのドキュメントをご参照ください。

WP-CLIのWooCommerceとの組み合わせ

eコマースサイトを使用していますか?🛒Robot Robot Ninjaのこちらの素晴らしいWP-CLIを使用したWooCommerceの開発ガイドでは、簡単に使用できるコマンドがまとめてありますので、是非ご覧ください。WP-CLIを使用すると、顧客や注文のリストを生成したり、一括商品作成したりできます。

WP-CLIのリモートでの使用

WP-CLIの最高の機能のの1つは、リモートのWordPressインストールの管理です。これはまさにウェブサイト管理者の夢の実現です。

SSHを使用てリモートサーバーでWP-CLIコマンドをスムーズに実行できるには、まずwp-cli-ssh addonコマンドが必要です。しかし、v0.24.0以降、これはWP-CLI自体の一部になりました!👏

注:コマンドを実行するコンピューターとサーバーの両方にWP-CLIをインストールする必要があります。

リモートサーバーの構成

サーバーはグローバルまたはローカルに構成できます。グローバル構成するには、config.ymlファイルを使用します。現在のディレクトリにあるwp-cli.ymlまたはwp-cli.local.ymlファイルを使用することもできます。

サーバーの構成は次のようになります。下記を前述のファイルのいずれかに貼り付けます。

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://myseite.com
    path: /www/path/to/site/root

完了後に、次のコマンドを入力してリモートサイトのWordPressを更新できます。

wp ssh core update --host=staging

多くのサイトを所有または管理している場合、これはすばらしいことだと思います。スクリプトはパスワードを要求しますが、RSAキーを使用してログインする場合は、パスワードを記入せずに済みます。 RSAの設定については、こちらの記事をご覧ください。Kinsta

Bashスクリプトの使用

Bashスクリプトを使用すると、作業の自動によりさらに時間を節約できます。WordPressをインストールするために多数のコマンドを入力する必要があったことを覚えていますか?bashスクリプトなら、1つだけで同じことができます。ディレクトリ内にinstall.shファイルを作成します。以前と同じコードを貼り付けて保存します。

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

bash install.shと入力するだけで、手を出さずに、上記のすべてが自動的に実行されます。多くのサイトを管理している場合は、すべての環境をセットアップして、次のようなbashスクリプトを作成できます。

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

WordPressの新しいバージョンがリリースされると、時間を大幅に節約できます!WP-CLIでやりたいことを何でもできるため、一度に複数のクライアントサイトで定期的にテーマやプラグインを更新することもできます。

まとめ

WP-CLIは、まさに開発者やウェブサイトマネージャーの夢の実現です。開発者はテストサイトを簡単に作成したり、テストコンテンツを追加したり、あらゆるインポートやエクスポートの魔法をかけたりすることができます。サイト管理者は、単一のコマンドで複数のサイトの更新などの管理作業を実施できます。また、WP-CLI v2リリースに関する注意事項も是非ご確認ください。

WP-CLIをまだ試したことのない場合は、ぜひお試しください。優れた機能をさらに追加するWP-CLI-SSHなどのコミュニティコマンドも多数あります。問題が発生している場合は、WP-CLIのよくある異常のドキュメントをご参照ください。

KinstaのGoogle Cloudベースのアーキテクチャは、標準設定のままでもWP-CLIをサポートしていることを覚えておいてください。最新のWordPressホスティングアーキテクチャと、WP-CLIなどの優れたツールにアクセスしたい場合は、マネージドWordPressホスティングをお試しください。

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.