この記事はWP-CLI Advent Calendar 2014の16日目の記事です。
WP-CLIのwp theme activate
をCronと組み合わせて、テーマの有効を予約設定してみました。
Cron設定の仕方
Cronの設定については下記などを参照。
- crontabの書き方 | server-memo.net
- cron力をつけよう!全てのcrontab入門者に贈る9個のテクニック – DQNEO起業日記
- cronの設定・実行 | Linuxで自宅サーバ構築
- プログラムの自動実行(cron)について
Cronを設定するには2通りの方法があるということを、実は今回知りました。crontab -e
でCrontab画面を立ち上げて指定する方法と、/etc/crontab
を直接編集する方法です。今回はcrontab -e
方法だとうまくいかなかった(※)ので、vi /etc/crontab
で直接編集しました。
※たぶんコマンドが間違えてたとかそういうのだと思われ。とはいえ、/etc/crontab
を直接編集する方が分かりやすいと思いました。
例えば、12月16日13時45分に設定をするには下記の様に記述。user-name
には実行するユーザー名が入ります。
45 13 16 12 * user-name 何かの処理
なお、これだと実際は毎年12月16日13時45分に処理を行うという設定なので、1回だけであれば実行された後に手動で削除する必要があります。
VCCWを使ったローカル環境で試してみる
まずはローカルのVCCWで試してみました。VCCWは現在の日付・時刻をdate
で確認するとUS時間でした。なぜだろう…en_US
設定だからかな。ともかく、今回はテストなのでその時間に合わせてCronを設定。下記は12月15日17時14分にTwenty Fifteenを有効化する設定です。
47 17 15 12 * vagrant /usr/local/bin/wp --path=/var//var/www theme activate twentyfifteen
なお、vagrant
ユーザーでは/etc/crontab
の編集はできなかったで、su
する必要があります。実行するユーザー名はvagrant
でも問題なかったです。
本番環境で試してみる
ローカルでうまくいったので、実際に本番環境、つまりこのブログ、で試してみました。
“`0 2 16 12 * /usr/local/bin/wp –path=/path/to/wordpress theme activate wilson
1 2 16 12 * root /usr/local/bin/wp –path=/path/to/wordpress nginx flush“`
これも問題なく有効化。2行目はNginx Cache ControllerのWP-CLIコマンドで、Wilsonというテーマをactivateした1分後にNginxのキャッシュをフラッシュしています。
/usr/local/bin/wp
はWP-CLIの場所。/path/to/wordpress
はWordPressのインストール場所。環境/サーバーによって違うので、正しく設定する。ここが一番注意するところかもしれません。僕も何回か間違えて設定し直しました。また、path=〜
パラメータは wpの直後に記述する必要がありました。下記のように記述するとうまくいきません。
0 2 16 12 * /usr/local/bin/wp theme activate wilson --path=/path/to/wordpress
12月16日に試したこと
テストがうまくいったので、12月16日(つまりAdvent Calendar16日目…)にこういう設定をしておきました。
0 8 16 12 * root /usr/local/bin/wp --path=/path/to/wordpress theme activate highwind
0 13 16 12 * root /usr/local/bin/wp --path=/path/to/wordpress theme activate wilson
0 19 16 12 * root /usr/local/bin/wp --path=/path/to/wordpress theme activate twentyfifteen
1 8,13,19 16 12 * root /usr/local/bin/wp --path=/path/to/wordpress nginx flush
8時にHighwindを、13時にはWilsonを、そして19時にはTwenty Fifteenが有効化されるように設定し、さらにそれぞれその1分後にはキャッシュをフラッシュ。
それぞれの時間に職場からアクセスしてチェックしてみたのですが、うまくいっていたようです。
実際に仕事で使える?
サイドバーやウィジェットの設定はテーマを変更するとそのテーマに合わせて設定し直す必要があるので、いきなり新しいテーマを予約設定するのは現実的ではないかもしれません。良いデベロッパーならば、ステージングですべてテストしている上に、ファイルとDB(もしくはそれらの差分)を簡単にデプロイできるようにしているでしょうから、実際にはそのデプロイをスクリプトにしてCron設定しますよね。
WordPressのありとあらゆる設定がWP-CLIから変更できるようになると…
WP-CLIの(特に初めての人向け)紹介でよく目にするwp theme activate
ですが、「1行のコマンドで新しいテーマを有効化できて便利ですよ〜」と解説しても、日常的に黒い画面を使っていない人であれば「テーマの有効化なんて管理画面からできるし、GUIで楽」ってなるかと思うんです。でも、CLIでWordPressの設定変更ができるようになることのミソは「1行で便利〜」ではなく、コマンドという文字列(スクリプト)に書き出せることです。スクリプトにさえできれば活用の幅が広がります。
たとえば、今回のようにCronと組み合わせることで、いろいろな「予約」ができるようになります。WP-CLIを使わない場合、デフォルトでできるのは投稿の予約ぐらいです。ローカル開発用にWordPressを立ち上げる時に毎回行っている設定などはスクリプトとして保存しておき、必要な時に実行すると、あとはパソコンがすべて処理してくれます。たとえばMemo: wp-cli commands for the theme reviewers. | Days in Thailand
そんなワクワク感がいいなと思ってます。