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
ご覧になっているこのブログも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://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
そして、
でのガイダンスに沿って 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
を検討する際の参考になれば幸いです。