mixhostでWP-CLIを用いたWordPressのローカライズ版(日本語版)の自動更新
WordPressを使っていて、1つ困ることがあります。
「日本語版への自動更新をしてくれないので、バージョンアップを2回行わなければならない」という問題です。
この画像をご覧ください。
既にWordPress4.9.2になっているのに、「WordPress 4.9.2 が利用可能です !」と言われるのは、気持ちのいいものではありません。
その意味としては、「日本語版へバージョンアップしてね」ということです。
WordPressはまず英語版ができたあと、有志の方々がローカライズ版である日本語版を翻訳するので、日本語版のリリースが少し遅れます。また、なぜかWordPressの自動更新機能ではこの「日本語版へのバージョンアップ」を自動で行ってくれないのです。悲しい。
ちゃんと日本語版へも自動でアップデートしてほしい!
解決策
いろいろ調べたのですが、最も簡単そうな解決策が「WP-CLIをcronで実行して自動更新をかける」という方法でした。とはいえ少々面倒ですが、やってみることにします。
ちなみに「WP-CLI」とは、サーバーにインストールして利用する、WordPress をコマンドライン操作できるツールです。
そしてcronとはサーバーでコマンドを定期的に自動実行する機能です。こいつを利用します。
私はサーバーにmixhostを利用していますので、mixhostの例を紹介します。また、OSはmacです。
mixhostにSSH接続
まずはサーバーにSSH接続します。mixhostでのSSH接続には公開鍵認証を使うので、少し複雑です。
SSHとは?
SSH(Secure Shell)とは、通信を暗号化してサーバーにログインし、コマンドを実行したりファイルの転送などを行う方法です。
SSH接続手順
まず、mixhostの管理画面「cPanel」で「SSHアクセス」を選択します。
アクセスキーの設定
「SSHキーの管理」を選択し、
「新しいキーの生成」をクリック。
この画面でキーを生成します。パスワードを入力して「キーの生成」をクリックすればOKです。強靭なパスワードをつくるために、「パスワード生成ツール」を使うのが良いでしょう。
キーの生成が完了したら、認証ステータスが「not authorized」なことを確認して、「管理」をクリック。
次の画面で「authorize」します。
秘密キーの設定
認証ステータスが「authorized」なことを確認したら、秘密鍵をダウンロードします。
「id_rsa」というファイルをダウンロードしたら、次はターミナルからの操作です。ターミナルにて次のように操作します。
ホームディレクトリに「.ssh」というディレクトリを作成
$ mkdir ~/.ssh
作成した「.ssh」内に「id_rsa」ファイルを移動させます。(こちらは一例)
$ mv id_rsa ~/.ssh/id_rsa
「.ssh」ディレクトリのパーミッションを700に、「id_rsa」ファイルのパーミッション(権限)を600に設定します。
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa
これで、macには秘密鍵、サーバーには公開鍵が設置された状態になりました。
SSHログイン
準備ができたので、SSHでログインします。
mixhostを契約した時の「【mixhost】 サーバーアカウント設定完了のお知らせ」というメール内に、このような記載があります。
FTP接続情報
FTPホスト名: abcde.mixh.jp
FTPSホスト名: jp8.mixhost.jp
ユーザー名: qjkxbmwvz
パスワード: pyfgcrl
Webサイトフォルダ: /public_html
ターミナルでこのように入力します。
$ ssh [ユーザー名]@[FTPSホスト名]
初回の接続ではこのように表示されるので、yesと入力します。
The authenticity of host 'abcde.mixhost.jp (123.123.123.123)' can't be established.
ECDSA key fingerprint is SHA256:mv6A.
Are you sure you want to continue connecting (yes/no)?
続いてパスワードを求められるので、そちらも入力。画面がこのようになったら成功です。
[qjkxbmwvz@jp8 ~]$
WP-CLIの設定
さて、いよいよWP-CLIの設定です。まずはbinフォルダに移動します。
[qjkxbmwvz@jp8 ~]$ cd bin
binディレクトリが存在しなかったら、"$ mkdir bin"しましょう。
続いてWP-CLIをダウンロードします。
[qjkxbmwvz@jp8 ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
パーミッション(権限)を変更します。
[qjkxbmwvz@jp8 ~]$ chmod +x wp-cli.phar
続いてコマンドを実行し、無事に動作するか確認してみます。
[qjkxbmwvz@jp8 ~]$ php wp-cli.phar --info
PHP binary: /opt/cpanel/ea-php56/root/usr/bin/php
PHP version: 5.6.32
php.ini used: /opt/cpanel/ea-php56/root/etc/php.ini
WP-CLI root dir: phar://wp-cli.phar
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /home2/qjkxbmwvz
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.4.1
エイリアスの設定
無事に動作したら、エイリアスを設定します。これでWP-CLIが「wp」と打つだけで実行できるようになります。
ホームディレクトリに移動した後、viエディタで.bashrcを編集します。
[qjkxbmwvz@jp8 ~]$ cd ~
[qjkxbmwvz@jp8 ~]$ vi .bashrc
キーボードの「i」を押して挿入モードに切り替え、最後の行に以下を追記します。
alias wp='~/bin/wp-cli.phar'
※余談
WP-CLIを実行する時に最大メモリ使用量に関するエラーが出る時には、ここで、alies wp='php -d memory_limit=-1 ~/bin/wp-cli.phar'
のように「-d memory_limit=-1」を追加するとエラーの回避ができることがあります。
追記が終わったらEscキーを押したのち、「:wq」と入力してEnterキーでファイルを保存し、エディタを終了します。
そして変更が反映されるよう、「~/.bashrc」 の再読込を行います。
[qjkxbmwvz@jp8 ~]$. ~/.bashrc
うまくwpコマンドが動くか試してみましょう。WP-CLIのバージョンを確認してみます。
[qjkxbmwvz@jp8 ~]$ wp cli version
WP-CLI 1.4.1
アップデートを行ってみる
続いてアップデートを行ってみましょう。ここまでくればあとは簡単、WordPressのあるディレクトリに移動して、コマンドを実行するだけです。
通常、アップデートのコマンドは「wp core update」ですが、日本語版をインストールするために「–force –locale=ja」を追加します。
[qjkxbmwvz@jp8 ~]$ cd ~/public_html/wordpress
[qjkxbmwvz@jp8 wordpress]$ wp core update --force --locale=ja
Updating to version 4.9.2 (ja)...
https://downloads.wordpress.org/release/ja/wordpress-4.9.2.zip から更新をダウンロード中...
更新を展開しています…
Success: WordPress updated successfully.
このように、日本語版を指定してwordPressのバージョンアップが可能です。
cronに追加
ここまでのアップデート作業をcronに追加してみます。
今回、私はこのようなシェルスクリプトを作成して「~/public_html/wp-cli-cron.sh」として保存しました。
#!/bin/sh
export LANG=ja_JP.UTF-8
alias php='/opt/cpanel/ea-php71/root/usr/bin/php'
php /home/qjkxbmwvz/bin/wp cli update --yes
cd /home/qjkxbmwvz/public_html/wordpress
php /home/qjkxbmwvz/bin/wp core update --force --locale=ja
exit
ポイントは4つです。
文字コードの設定
export LANG=ja_JP.UTF-8
というのは、cronの実行結果をメール送信する人は追加しておきましょう。
実行権限の不可
シェルスクリプトには、実行権限の不可も忘れずに。
[qjkxbmwvz@jp8 ~]$ chmod +x ~/public_html/wp-cli-cron.sh
PHPのエイリアスを設定
何故かmixhostでは、cronを経由してWP-CLIを実行させると上手く動作しません。いろいろ調べたところ、mixhostではcronを経由して実行するPHPが「GUI版PHP」になっていることが原因のようでした。
そのため、ここでこのようにコマンドライン版PHPを明示的に指定しています。
alias php='/opt/cpanel/ea-php71/root/usr/bin/php'
wp cli update –yes
自動でWP-CLIをアップデートさせるために、–yesオプションを追加しています。
cronの設定
ここまでできたら、cronに追加します。cPanelからcronを選択します。
そして以下のようにcronジョブを追加します。ここでは1日1回に設定しています。
設定したコマンドはこちらです。
/home/qjkxbmwvz/public_html/wp-cli-cron.sh
※アップデート結果のメール送信が不要な場合はこちら
/home/qjkxbmwvz/public_html/wp-cli-cron.sh >/dev/null 2>&1
これで設定は完了です。2回のアップデートの煩わしさから解放されました(^^)