WP-CLI 1.0がリリースされました

f:id:gurimmer:20161202133006p:plain

こんにちは、エンジニアの@gorou_178です。 このエントリは イノベーター・ジャパン Advent Calendar 2016 - Adventarの4日目の記事です。 先日の@hacktk の記事はいかがでしたでしょうか。

さて、WordPressを扱っている方は知っている人も多いと思いますが、先月11月29日にWP-CLI 1.0がリリースされました!!

Version 1.0.0 released | WP-CLI

結構前からWP-CLIは利用していたのですが、実は今までメジャーバージョンがずっと0で更新されてました。 かなり便利に使えるためβ版であったことが気にならないくらいだったのでこのニュースには驚きました。 不具合や要望が100以上ある状態から0にした経緯のツイートがとても印象的でした。

そこで、WP-CLIを知らないという方に便利なところ、そしてWP-CLI 1.0で何が変わったのかをざっとまとめてみました。

WP-CLIとは

WP-CLIWordPress を管理するためのコマンドラインツールです。 WordPressのインストールは、「WordPressファイル一式をダウンロード」してファイルを配置した後、「データベース情報の入力」「サイト情報の入力」をブラウザで行う必要があり、必然的にサーバを立ち上げないといけません。 でもWP-CLIを使うとコマンドで全てできてしまいます。

さくっとローカルでWordPressを起動

まずローカルで動作するDBとしてMySQLを準備しないといけません。使用しているOSによってインストール方法が異なりますが、Macの場合は以下の記事を参考にhomebrewでインストールする方法がカンタンでおすすめです。

qiita.com

次にWP-CLIをインストールします。こちらは公式サイトに手順がありますのでそちらを参照ください。 インストール出来たら、MySQLが起動されている状態で以下のコマンドを順番に実行していくだけです。

$ mkdir testWordPress
$ cd testWordPress
$ wp core download --locale=ja
$ wp core config --dbname=<データベース名> --dbuser=<データベースユーザ名> --dbpass=<データベースパスワード(あれば)>
$ wp db create
$ wp core install --url=<サイトURL> --title=<サイトタイトル> --admin_user=<管理者名> --admin_email=<管理者メールアドレス>

例えば以下のように実行します

$ mkdir testWordPress
$ cd testWordPress
$ wp core download --locale=ja
$ wp core config --dbname=test --dbuser=wpadmin --dbpass=wpadmin_pass
$ wp db create
$ wp core install --url="http://localhost" --title="test wp-cli" --admin_user=wpadmin --admin_email=wpadmin@example.com

これでインストール完了。あとはサーバを立ち上げて確認するだけ。WP-CLIにはビルトインサーバを起動する機能もあるのでそれを使って確認します。

$ wp server

ブラウザで http://localhost:8080 にアクセスすると確認できます。 f:id:gurimmer:20161202122550p:plain

WP-CLI 1.0 でできるようになったこと

ここからはWP-CLI 1.0でできるようになったことを、特に気になった部分のみピックアップして紹介します。

wp package update

WP-CLIの機能拡張が行えるパッケージを管理するサブコマンドがあるのですが、パッケージの更新ができなかったのでpackage updateコマンドが新しく追加されました。 私はまだWP-CLIのpackageを使ったことがないので今度使ってみようと思います。

サブコマンドの終了コードの統一

OSの決まりごとで、コマンドを実行した結果を終了コードという数値を返すようになっており、正常にコマンドが終了した場合は 0 を、コマンドが異常終了した場合は 1 を(もしくは0以外の数値)返すとなっています。

WP-CLIの各コマンドを実行した後、パラメータの入力ミスであったりコマンド実行エラーが発生した場合、Warningやエラーが表示されますが、終了コードとして0を返していました。これを修正してちゃんと1を返すようになったようです。

バッチ処理でWP-CLIを使う場合に、各コマンドのエラーをちゃんと判定できるようになった感じです。

PHPUnitの雛形作成

WordPressのテスト環境の雛形が作れるコマンドが追加されました。 wp scaffold theme-tests <テーマ名> でPHPUnitの各種ファイル、Travis CI向け設定ファイルが作成されます。 また、テスト用のWordPress環境とデータベース環境を作ってくれるバッチが付属しており、これを実行することでテスト環境が構築されます。以下がテスト環境構築とPHPUnitを動かすまでの手順です。※PHPUnitが入っている前提です

$ wp scaffold theme-tests <テーマ名>
$ bash wp-content/themes/<テーマ名>/bin/install-wp-tests.sh <DB名> <DBユーザ名> <DBパスワード> <DBホスト> latest
+ install_wp
+ '[' -d /tmp/wordpress/ ']'
+ mkdir -p /tmp/wordpress/
+ [[ latest == \n\i\g\h\t\l\y ]]
+ [[ latest == \t\r\u\n\k ]]
+ '[' latest == latest ']'
+ local ARCHIVE_NAME=latest
......何か色々でます。
+ svn co --quiet https://develop.svn.wordpress.org/tags/4.6.1/tests/phpunit/data/ /tmp/wordpress-tests-lib/data
Error validating server certificate for 'https://plugins.svn.wordpress.org:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: *.svn.wordpress.org
 - Valid: from Fri, 12 Jun 2015 17:44:41 GMT until Sun, 15 Jul 2018 19:04:26 GMT
 - Issuer: http://certs.godaddy.com/repository/, GoDaddy.com, Inc., Scottsdale, Arizona, US
 - Fingerprint: 5c:f0:21:33:a0:f1:f6:37:ac:06:87:c8:62:03:08:d0:32:50:6f:77
(R)eject, accept (t)emporarily or accept (p)ermanently? p ← *証明書の確認が出る場合があります。pを入力します*
.....色々でる
.....
$ cd wp-content/themes/<テーマ名>
$ phpunit
Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 5.6.7 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 1.12 seconds, Memory: 35.50MB

OK (1 test, 1 assertion)

さくっと実行できました! 手順は公式サイトにも載っているのでご参考に。*1

パスワード自動生成

上に書いた手順の wp core install コマンド、以前は --admin_password も必須でした。 WordPress4.3からパスワードは自動生成されるようになったため、このコマンドもデフォルトは自動生成が良いのではとなり、必須ではなくなり自動生成されるようになりました。 実行後にパスワードが表示されるのでそれをメモって管理画面にログインしましょう。

$ wp core install --url="http://localhost" --title="test wp-cli" --admin_user=wpadmin --admin_email=wpadmin@example.com
Admin password: xxxxxxxxxxxx
Success: WordPress installed successfully.

bash historyもセキュアに

パスワードが自動生成されるようになったとして、やっぱり色々な事情で独自でパスワード設定したいという人もいるはず。 --prompt というオプションが追加され、コマンドに直接パスワードを書かなくても良くなりました。 標準入力もしくは、入力リダイレクトで指定が出来ます。先程の wp core install の場合だと以下のように指定できます。

$ wp core install --url="http://localhost" --title="test wp-cli" --admin_user=wpadmin --admin_email=wpadmin@example.com --prompt=admin_password
4/6 [--admin_password=<password>]: <パスワードを入力>
Success: WordPress installed successfully.

入力リダイレクトの場合

$ wp core install --url="http://localhost" --title="test wp-cli" --admin_user=wpadmin --admin_email=wpadmin@example.com --prompt=admin_password < admin_password.txt
Success: WordPress installed successfully.

パスワードを直接コマンドに書いて実行すると、bash historyに残るためセキュアではないです。パスワードは自動生成してもらうか --prompt を利用してbash historyもセキュアにしましょう。

まとめ

WP-CLI 1.0がリリースされたので、WP-CLIの良いところも踏まえて変更点をまとめてみました。 サッと環境が作れたり、設定の変更も気軽にできるので重宝してます。 弊社でWordPressでサイトを構築する機会が増えており、WP-CLIにとても助けてもらっています。 今後も使い倒していこうと思います!

明日は@pentaです。お楽しみに!

*1:このページ末尾に「Note: phpunit 4.8.x is required (5.x won’t work)」と書かれてますが、PHPUnit 5.6.7で動いたので大丈夫なはずです