WordPressをコマンドで操る? “wp-cli”でサイトを立ち上げてみた

WordPressをコマンドで操る? “wp-cli”でサイトを立ち上げてみた

WordPressとwp-cliについて

CMS構築に使われる代表例として、よくWordPressが挙げられます。

実際、多くのウェブサイトにてWordPressが使われていると言う調査結果もあります。

WordPress now powers over 1/3rd of the top 10 million sites on the web according to W3Techs

https://wordpress.org/news/2019/03/one-third-of-the-web/

ご覧になっているこのブログもWordPressの仕組みを入れており、DWSにおいてもWordPressは馴染み深いものです。

一方で、WordPressサイトをホストしてくれるSaaSなどを使わずにWordPressサイトを立ち上げたいと思った時、公式サイトのガイダンスに沿ってファイルのダウンロードから、初期立ち上げのセットアップまでを手動で行う必要があります。

もちろん公式の資料は充実しており、ガイダンス通りに手順を踏めば完成しますが、その手順の数は案外多く、手動ゆえのミスが生まれやすいものです。

一方で、WordPressの各管理操作をコマンドラインベースで操作できるwp-cliというツールがあります。

wp-cliの公式サイトを見ると

WP-CLI is the command-line interface for WordPress. You can update plugins, configure multisite installations and much more, without using a web browser.

https://wp-cli.org

とあり、公式ドキュメント(https://developer.wordpress.org/cli/commands/)を見ても、WordPressの管理業務の多くをこのwp-cliのコマンドで実現できることがわかります。

そこで、今回、このwp-cliを使ってWordPressサイトの立ち上げまでを実践してみましたので、その内容をレポートします。

検証環境と実施シナリオ

検証環境

検証機においては以下のようなLAMP構成が構築済みである状況で行いました。

OS・・・Amazon Linux 2

ウェブサーバー・・・Apache 2.4.52

データベース・・・MySQL 8.0.28

PHP・・・8.0.16

そして、

https://wp-cli.org

でのガイダンスに沿って wp-cliのコマンドラインはインストール済みでwpコマンドが実行可能になっている状態とします。

シナリオ

上記の環境を踏まえて、

Apacheをインストールした際にDocumentRootとなった

/var/www/htmlにそのままWordPressを立ち上げ、サイトが表示できるところまでを目指します。

操作1:WordPressファイル群のダウンロード

WordPressをインストールしたいディレクトリにまず、必要なファイル群を取得します。

ターゲットにしているディレクトリ上でwp core downloadコマンドを実行します。

[root@ip-10-0-13-49 html]# pwd
/var/www/html
[root@ip-10-0-13-49 html]# wp core download
Downloading WordPress 5.9.2 (en_US)...
md5 hash verified: b5e9c3b8dfd767d55c3797c2eae0f57d
Success: WordPress downloaded.

そうするとディレクトリ内にWordPressのファイル群が取得されています。

[root@ip-10-0-13-49 html]# ls
index.php    phpinfo.php  wp-activate.php  wp-blog-header.php    wp-config-sample.php  wp-cron.php  wp-links-opml.php  wp-login.php  wp-settings.php  wp-trackback.php
license.txt  readme.html  wp-admin         wp-comments-post.php  wp-content            wp-includes  wp-load.php        wp-mail.php   wp-signup.php    xmlrpc.php
[root@ip-10-0-13-49 html]#

この状態でブラウザアクセスすると下記のような画面表示になりました。

ちょうどこれは

https://ja.wordpress.org/download/

からZipファイルをダウンロードしてきて、ディレクトリ内に展開したのと同じ状況のようです。

手動で行う際の

  • WordPress公式サイトからzipファイルを取得
  • path構造を間違えないようにして、unzipコマンドを実行してWordPressファイルを展開する

に相当する内容がコマンド1発で行えるのは嬉しいですね。

操作2:configファイルの生成

さて、この状態でwpのインストールコマンドを実行してみると

[root@ip-10-0-13-49 html]# wp core install
Error: 'wp-config.php' not found.
Either create one manually or use wp config create.

エラーになります。

これは、上記のブラウザ画面にもあったように、wp-config.phpが存在していないことによるものです。

そのため、設定ファイル(wp-config.php) をwp config createコマンドによって生成します。

その際に生成されるファイル内で定義させたい値を引数として指定することができます。

今回は

  • WordPress用のDB名(dbname)
  • DBにアクセスするMySQLユーザー名(dbuser)
  • DBのパスワード(dbpass

を指定しました。

[root@ip-10-0-13-49 html]# wp config create --dbname="wp_db" --dbuser=xxxx --dbpass="xxxxxxxxxxxx"
Success: Generated 'wp-config.php' file.

そうすると、オプションでの内容を踏まえてwp-config.phpファイルが生成されました。

[root@ip-10-0-13-49 html]# ls
index.php    phpinfo.php  wp-activate.php  wp-blog-header.php    wp-config.php         wp-content   wp-includes        wp-load.php   wp-mail.php      wp-signup.php     xmlrpc.php
license.txt  readme.html  wp-admin         wp-comments-post.php  wp-config-sample.php  wp-cron.php  wp-links-opml.php  wp-login.php  wp-settings.php  wp-trackback.php

こちらも、手動でやろうとした場合は

  • wp-config-sample.phpから複製してwp-config.phpファイルを作成
  • wp-config.php内で設定が必要な箇所の行を開いて、編集

に相当する内容が必要であり、案外手間がかかるものでした。それらがコマンド1発で完了するので便利です。

なお、wp-config.phpの中にはセキュリティのために

https://api.wordpress.org/secret-key/1.1/salt/

で生成されたソルト値をファイル内に書き込む必要もあるのですが、それも自動的に行なってくれていました。

操作3:WordPress用のDB生成

では、この状態でインストールコマンドを行うとどうなるでしょうか。

[root@ip-10-0-13-49 html]# wp core install
Error: Can’t select database. We were able to connect to the database server (which means your username and password is okay) but not able to select the wp_db database.

エラーになります。

これはwp-config.phpファイル内に指定されているデータベースがまだ存在していないからです。

(「ユーザー名とパスワードは問題なく、データベースサーバーに接続はできたが、該当のデータベースに接続できなかった」という旨の表示があり、エラーメッセージの内容が親切ですね。)

試しにmysqlコマンドでデータベースの一覧を見てみます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

確かにwp_dbがありません。

この状態で、wp db createコマンドを実行することで、wp-config.phpで記載されている接続情報を使って、DBを生成します。

[root@ip-10-0-13-49 html]# wp db create
Success: Database created.

あっさりと終わりました。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wp_db              |
+--------------------+
5 rows in set (0.00 sec)

wp_dbのデータベースが生成されていました。

こちらもやはり、

  • データベースサーバーに接続してWordPress用のDBを作っておく

という準備が要らずwp-cliのコマンドラインで完結するのが嬉しいです。

操作4:WordPressインストール作業実施

以上を踏まえてインストールコマンドを実行すると

[root@ip-10-0-13-49 html]# wp core install
Error: Parameter errors:
 missing --url parameter (The address of the new site.)
 missing --title parameter (The title of the new site.)
 missing --admin_user parameter (The name of the admin user.)
 missing --admin_email parameter (The email address for the admin user.)

入力必須のパラメータがいくつかあることがわかります。

  • WordPressが実際にホストされるサイトのアドレス(url)
  • WordPressサイトのタイトル(title)
  • WordPressの管理ユーザーの名前(admin_user)
  • 管理ユーザーのメールアドレス(admin_email)

の4つです。

これらの必要な情報を添えて、コマンド実行します。

[root@ip-10-0-13-49 html]# wp core install --url="xx.xxx.xx.xxx" --title="WP-CLI TEST" --admin_user="test-admin" --admin_email="test@example.com"
Admin password: z$a4gDb4&Qi9example
Success: WordPress installed successfully.

コマンド実行してから、installed successfullyの表示が出るまでに、数十秒ほど動きがないので不安になるのですが、無事完了しました。

この状態でサイトのURLにアクセスすると

見事、WordPressサイトが立ち上がっていました!

コマンドライン上で表示されていたログイン情報を使って、通常通りにWordPressの管理画面から操作することもできます。

まとめ

以上、wp-cliを活用してウェブサーバー内にWordPressサイトを新設するまでを行いましたが、wp-cliを使うことで従来の手順を大きく短縮することができました。

各コマンドの実行時に必須パラメータが入っていないと失敗するところは多かったですが、逆にいうとコマンドを正常に実行できていれば、不足なく構築することができると言えるので安心にもつながる設計だと感じました。

今回は「WordPressサイトの立ち上げ」という目的に沿って操作しましたが、WordPress本体・プラグイン・テーマのバージョン検出・アップデートなども含めた、広範囲にわたるWordPress管理操作がwp-cliを通じて行えるようです。

それらをうまく活用することで例えば、脆弱性検査の仕組みとも連動して、「脆弱性が検出されたら、自動的にアップデートを開始する」という自動化を組み立てることも可能になりそうです。

WordPressの管理操作の自動化を進めるための手段として、wp-cliを検討する際の参考になれば幸いです。