てっきんの具。

「てっきん」と呼ばれて40年のおっさんが書くブログ

レンタルサーバに『WP-CLI』をサクっと入れるシェルスクリプト作ってみたよ

[2020.10.29追記]
大幅かつ端的に書き換えた改訂版を「2020年版」として公開しました。


以降は過去記事アーカイブです。すでに無効となっている情報もありますのでご注意ください。

WP-CLI Advent Calendar』3日目担当の @tecking です。

一度使い出したら超絶便利、プラグインのアップデートなどサイトメンテの効率もぐっとアップする『WP-CLI』。少しでも多くの人に使ってもらえたらなあ……ということで、レンタルサーバにサクッと導入するためのスクリプトを作ってみました。SSH接続できるレンタルサーバを契約してる方、これを機会にぜひチャレンジしてみてくださいマセ。

ちなみにこのスクリプト、国内でも比較的ユーザーが多いと思われる『さくらのレンタルサーバ』『ヘテムル(heteml)』への導入を想定して作りました。当ブログの過去記事

で紹介した手順を改良しつつ作ったスクリプトです。

検証環境

[2019.6.2追記]
さくらのレンタルサーバ スタンダードに動きがあったようです。新たに記事を書きました。

さくらのレンタルサーバ スタンダードに WP-CLI が標準装備された模様

導入の手順

スクリプトはGitHubで公開しています。

まずは『WP-CLI』のサイトに書かれている動作環境を満たしているか確認しましょう。

Requirements
UNIX-like environment (OS X, Linux, FreeBSD, Cygwin); limited support in Windows environment
PHP 5.3.25.3.295.4 or later
WordPress 3.5.23.7 or later

特にチェックが必要なのがPHPのバージョン。以前から上記のサーバを使っていたりするとバージョン設定が古いままだったりするので、これを機にきちんと新しいものにしておきましょうね。

    1. 契約しているサーバのホームディレクトリ(さくら:www とか MailBox ディレクトリのある階層 ヘテムル:apps とか web ディレクトリのある階層)に SSH でログイン
    2. 下記を実行して本スクリプトをダウンロード(警告が出ますがキニシナイ)
wget --no-check-certificate https://raw.githubusercontent.com/tecking/wp-cli.setup.sh/master/wp-cli.setup.sh
    1. 下記を実行して本スクリプトのパーミッションを変更
chmod +x wp-cli.setup.sh
    1. 下記のコマンドで本スクリプトを実行(警告が出ますがキニシナイ)
./wp-cli.setup.sh
    1. メッセージに沿って下記のいずれかを実行
source ~/.cshrc
source ~/.bash_profile

ご留意事項

  • 何度も動作確認はしていますが At Your Own Risk にてお使いください(「チャレンジしてみてくださいマセ」とか書いときながらヒドいね)
  • WP-CLI 本体(wp-cli.phar)は、スクリプト実行時につくられる ~/usr/local/bin にダウンロードされます
  • bash 用のタブ補完定義ファイル(wp-completion.bash)は ~/ にダウンロードされます
  • WP-CLI が導入できたら wp-cli.setup.sh は削除してもかまいません
  • 下記の環境なら、『さくらのレンタルサーバ』『ヘテムル』以外でもスクリプトが実行できそうです
    • sh が使える(which sh で確認 まあ、フツーは使えます)
    • wget が使える(which wget で確認) wget の有無を判別する条件分岐を追加しました
    • ログインシェルが csh または bash (デフォルトのログインシェル:さくらのレンタルサーバ=csh、ヘテムル=bash)
  • 一部、使えないコマンドがあります(現在確認済みのもの)
    • ヘテムル…… wp db optimize

[2018.1.7追記]

ヘテムルの新サーバ(コントロールパネルで usersXXX と表示されるサーバ)にて本スクリプトを実行後

source ~/.bash_profile

したところ

wp --info
/usr/bin/env: php: No such file or directory

というエラーが返ってきました。php へのパスが旧サーバ(コントロールパネルで ftpXXX と表示されるサーバ)と違うのが原因で、本スクリプトを実行後に新サーバ上で下記を実行したところうまくいきました。

PHP 7.1 で WP-CLI を実行させたい場合の例です。何らかの理由で 5.6 または 7.0 で実行させたいときは1行目の記述を適宜変えてください。

echo 'PATH=$PATH:/usr/local/php/7.1/bin' >> ~/.bash_profile
source ~/.bash_profile
wp --info
PHP binary:     /usr/local/php/7.1/bin/php
PHP version:    7.1.10
php.ini used:   /usr/local/php/7.1/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/users/foo/bar
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.4.1

[2018.9.19追記]
エックスサーバー X10 プランで WP-CLI をインストールしたところ wp コマンドをたたいても

wp --info
PHP Parse error:  syntax error, unexpected '[' in phar:///home/foobar/usr/local/bin/wp/vendor/wp-cli/i18n-command/src/MakePotCommand.php on line 29
Status: 500 Internal Server Error
X-Powered-By: PHP/5.3.3
Content-type: text/html

というエラーが返ってきてしまいました。デフォルトだと、コマンドラインから使える PHP のバージョンが古く WP-CLI が使えないようですね。

そこで「エックスサーバーのPHPのバージョン|レンサバ比較ガイド」の記事を参考に、コマンドラインでの PHP バージョンをエックスサーバーが提供する最新版(2018.9.19現在の最新バージョン 7.1.2)に上げることにします。

まず ~/bin ディレクトリを作り、その中に /opt/php-7.1.2/bin/php へのシンボリックリンクを作成。

mkdir $HOME/bin
ln -s /opt/php-7.1.2/bin/php $HOME/bin/php

その上で ~/.bash_profile の文字列を sed で置換。

sed -i -e 's|PATH=$PATH:$HOME/bin|PATH=$HOME/bin:$PATH|' ~/.bash_profile

いったんログアウトして、再ログイン。

wp --info
OS:     Linux 2.6.18-426.el5.BET #1 SMP Tue Feb 13 21:12:18 JST 2018 x86_64
Shell:  /bin/bash
PHP binary:     /opt/php-7.1.2/bin/php
PHP version:    7.1.2
php.ini used:   /opt/php-7.1.2/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/foobar
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.0.1

無事使えるようになりました。


関連記事


ではでは、ハッピーなWP-CLIライフを! 『WP-CLI Advent Calendar 2014』次の日直(12月4日)は @wokamoto さんです。

(photo by Martin Kenny CC BY-NC-SA

カテゴリー:

タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください