Docker+WP-CLIでWordPressの開発環境構築をラクにする

Dockerで動かしているWordPressの開発環境にWP-CLIによる設定の自動化を追加して、管理画面からポチポチ初期設定をする手間をなくしましょう。

WP-CLIとは? WP-CLIの効能

WP-CLIはコマンドラインインターフェースからWordPressの管理画面で行うような操作ができるツールです。

このWP-CLIを使って、コマンドをひとつ発行したら、WordPressのインストールからテーマの設定、プラグインのインストール等の初期設定を完了させるようにします。

WordPressテーマ開発者がgit管理するのは基本的にテーマ部分だけだと思いますが、それ以外の環境設定もコード化してgit管理できるようになります。

マシンごとに手作業で初期設定をする手間が軽減されるので、複数人で開発しているならもちろんですが、一人で開発している場合でも便利になると思います。

作業の流れ

初期設定をしてくれるコマンドを作成するまでの大まかな流れは次のようになります。

  1. Dockerfileでwp-cliが入ったイメージを定義
  2. Docker Composeの設定を作成
  3. WP-CLIのコマンドを叩くスクリプトを作成

Dockerfileでwp-cliが入ったイメージを定義

wordpressのイメージにwp-cliを加えたイメージを作成するDockerfileを用意します。

FROM wordpress:latest

RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
  && chmod +x wp-cli.phar \
  && mv wp-cli.phar /usr/local/bin/wp \
  && wp --info

Docker Composeの設定を作成

docker-compose.ymlをつくります。

version: '3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql-myproject
    volumes:
      - ./data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: myproject
      MYSQL_USER: myproject
      MYSQL_PASSWORD: myproject

  wordpress:
    depends_on:
      - mysql
    build: .
    container_name: wordpress-myproject
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: myproject
      WORDPRESS_DB_USER: myproject
      WORDPRESS_DB_PASSWORD: myproject
    volumes:
      - ./data/wp-content:/var/www/html/wp-content
      - ./wp-install.sh:/tmp/wp-install.sh

ポイントはこのあたり:

  • mysqlwordpressdata という名前のディレクトリにデータを格納して永続化しています
  • wordpressbuild で先ほど作成したDockerfileの居場所を指定します
  • wordpressvolumes にこのあと作成する初期設定用のスクリプトを指定しておきます

WP-CLIのコマンドを叩くスクリプトを作成

wordpress のコンテナ内で実行する初期設定用のスクリプトを作成していきます。

上記のDockerfileに書いてあるとおり、WP-CLIの wp コマンドが使えるようになっているので、これを使ってコマンドの一覧を見ながら設定を書いていきましょう。何を設定するかはお好みですが、このくらいは最小で設定するだろうというサンプルを貼っておきます。ファイル名はwp-install.shにしました。

#!/bin/bash

# WordPressのインストール
#=======================
wp core install \
--url="http://localhost:8080" \
--title="myproject" \
--admin_user='admin' \
--admin_password='test' \
--admin_email='info@example.com' \
--allow-root

# 一般設定
# =======================
# キャッチフレーズを空にする
wp option update blogdescription --allow-root ''
# 日本語
wp language core install --allow-root --activate ja
# タイムゾーンと日時表記
wp option update --allow-root timezone_string 'Asia/Tokyo'
wp option update --allow-root date_format 'Y-m-d'
wp option update --allow-root time_format 'H:i'

# パーマリンク設定
# =======================
wp option update permalink_structure --allow-root /%year%/%monthnum%/%day%/%postname%/

# 外観
# =======================
wp theme delete --allow-root twentysixteen
wp theme delete --allow-root twentyseventeen
wp theme delete --allow-root twentynineteen
wp theme delete --allow-root twentytwenty

# プラグイン
# =======================
wp plugin delete --allow-root hello.php
wp plugin delete --allow-root akismet

# 固定ページ
# =======================
wp post create --allow-root --post_type=page --post_title='About'

Dockerコンテナを起動してスクリプトを実行

準備が整ったのであとは実行するだけです。

Dockerコンテナを起動して、

docker compose up -d

wp-install.php を実行します。

docker exec wordpress-myproject /tmp/wp-install.sh