【CLI】WordPressでコマンドライン上から利用できるコマンドを作ってみよう!

前回、WordPressにWP-CLIをインストールして、
コマンドラインからWordPressを実行できる方法を解説しました。
今回はそのWP-CLIを使ってバッチ処理を開発してみます。

コマンドを開発する

バッチ処理はWP-CLIで利用できるコマンドとして開発します。
コマンドの開発は非常に簡単で、
単純に以下のような関数を作ってコマンド内で実行したい処理を記述するだけです。

function.php

if ( defined( 'WP_CLI' ) && WP_CLI ) {
	function sample_command() {
		WP_CLI::success( 'this is sample command.' );
	}
	
	WP_CLI::add_command( 'test_command', 'sample_command' );
}

手順としては、

  1. まずコマンドとして作成したい内容を関数化してまとめる
  2. WP_CLIクラスのadd_commandメソッドで、add_command( ‘コマンド名’, ‘実行する関数’ ) の形式で登録する

だけです。

※WP_CLIを使った開発を実施する場合には、
WP_CLI側から呼び出された時だけ定義されるWP_CLI定数が存在するかどうかを確認して、
存在する場合だけコマンドを定義したりWP_CLIクラスを利用するなどして、
通常の処理時にエラーが出ないように注意します。

たったこれだけで、以下のように呼び出せるコマンドが完成しました!

wp test_command

コマンド処理内で使えるCLI用の関数

コマンド内ではWP_CLIクラスを介して画面上に進捗ログを表示したり、
エラーを表示するためなどの専用の関数がいくつか用意されています。

一部を紹介しましょう。

WP_CLI::debug()コマンドに —debug 引数を付けて実行した場合のみ、デバッグメッセージを出力します。
WP_CLI::warning()画面上に「Warning:」というプレフィクスが付いた警告メッセージを出力します。
WP_CLI::error()画面上に「Error:」というプレフィクスが付いたエラーメッセージを出力し、その時点で処理を停止します。

よく使うのは WP_CLI::log() と WP_CLI::warning() でしょうか。

WP_CLI::error はエラー表示には便利ですが、
利用するとその時点で処理の実行が停止されてしまう点に注意します。

コマンドに引数を与える

通常、コマンドには引数を与えることによって動作モードを変更したり、
ファイルを処理するようなコマンドであればファイルの指定を行ったりします。

WP_CLIで開発できるコマンドにも、もちろん引数を処理する機能が用意されています。
引数には下記の2種類あり、位置引数とキーワード引数というものがあり、例えば以下のようなものになります。

wp test_command arg1 --arg2=test

上記コマンドのうち arg1 が位置引数、—arg2=test がキーワード引数になります。

位置引数

位置引数は単純にコマンドの後ろに並べるだけで、その内容がコマンドに渡されます。
上記の例でいえば arg1 がそのまま渡されるイメージです。

キーワード引数

キーワード引数はコマンドの後ろにハイフン2つを付けて並べることで指定します。
こちらの引数にはイコール(=)で値をつなげて設定することで、値を指定することができます。
上記の例だと、args2 という名前で test という値が渡されるようなイメージです。

コマンド内部での処理方法

ではコマンドでは上記の引数をどのように扱うのでしょうか?
これも非常に簡単で、以下のようにコマンドに $args 引数と $assoc_args 引数を受け取れるように設定するだけです。

if ( defined( 'WP_CLI' ) && WP_CLI ) {
	function sample_command( $args, $assoc_args ) {
		WP_CLI::success( 'this is sample command.' );
	}
	
	WP_CLI::add_command( 'test_command', 'sample_command' );
}

$argsに位置引数が、$assoc_argsにキーワード引数が格納されて渡されてきます。

おわりに

WordPressを使ってコマンドラインから実行できるコマンドの作り方が分かったところで、
次回は実際に利用できるバッチ処理を記述してみたいと思います。

その他、WP-CLIでの詳細なコマンドの作成方法や解説は下記のCookbookが役に立ちます。

この記事を書いた人

家富正幸

インスパイアデザインの取締役兼、エンジニア。WordPressのテーマ・プラグイン開発を年間100件以上、独自のフレームワークを用いて開発をしています。