Dockerを利用したWordPressの開発環境をwp-cliを使ってさくっと構築する

# はじめに
WordPressの開発を複数人で行う時に、テーマファイルをgitで管理するけど、WordPressの本体やデータベースファイルまではgitで管理することはないと思います。そのような場合、ローカルPC上にWordPressの開発環境を作るのが面倒だったりします。特に利用するプラグインが10個くらいあると、それを管理画面からインストールしているとつらくなります。:zzz:
そんな面倒な構築作業は**コード化**してしまえばいいよねってことで、Docker環境でさくっと作ってみました。
# 最初に用意するもの
- Docker環境
    - 本記事では、Mac OS + docker desktop 2.1.0.1を使用しています
- 以下のファイル
 - docker-compose.yml
 - Dockerfile
 - WordPressのインストールシェル

## ファイル
### docker-compose.yml
- WordPress Coreのコンテナは、wp-cliからインストールするため使いません
- パスワード等は各自書き換えてください

``` docker-compose.yml
version: '2'

services:
  db:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - 3306:3306
    networks:
      - wpnet
    environment:
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=scott
      - MYSQL_PASSWORD=tiger
      - MYSQL_ROOT_PASSWORD=root

  app:
    build:
      context: ./app
      dockerfile: Dockerfile
    volumes:
      - ./html:/var/www/html
      - ./wp-install.sh:/tmp/wp-install.sh
    ports:
      - 80:80
    depends_on:
      - db
    networks:
      - wpnet

  cli:
    image: wordpress:cli-2.3.0-php7.1
    volumes_from: 
      - app:rw
    networks:
      - wpnet

networks:
  wpnet:
```


### app/Dockerfile
- WordPressを起動させるために必要なextensionをインストールしています
 
``` Dockerfile
FROM php:7.1-apache

RUN \
  { apt-get update; \
    apt-get install -y zlib1g-dev libzip-dev; \
    docker-php-ext-install zip; \
    docker-php-ext-install mysqli; \
    docker-php-ext-configure zip; \
    docker-php-ext-configure mysqli ; \
  }
```

### wp-install.sh
- このファイルでWordPressのダウンロード、設定ファイル作成、インストール、プラグインインストールを行なっています

``` wp-install.sh
#!/bin/bash

set -ex;
WPINSTALLDIR=/var/www/html

wp core download \
    --locale=ja --version=5.2.2 --path=${WPINSTALLDIR}  

wp config create \
    --dbname=wordpress --dbuser=scott --dbpass=tiger --dbhost=db:3306 \
    --force --path=${WPINSTALLDIR}

wp core install \
    --url=localhost --title=テスト用WordPress \
    --admin_user=hogehoge \
    --admin_password=passpasspass \
    --admin_email=your-emailaddress \
    --path=${WPINSTALLDIR} 

wp plugin install \
    classic-editor advanced-custom-fields custom-post-type-ui custom-post-type-permalinks \
    tinymce-advanced \
    --activate --path=${WPINSTALLDIR}

```
- `wp plugin install`でインストールするプラグインを指定しています。


# 構築方法
## WordPress本体とプラグインのインストール
- docker-composeからコンテナを起動します

``` shell
$ docker-compose -f "docker-compose.yml" up -d --build
Creating network "wordpress-cli_wpnet" with the default driver
Creating wordpress-cli_db_1 ... done
Creating wordpress-cli_app_1 ... done
Creating wordpress-cli_cli_1 ... done 
```

- 起動が終わったらコンテナにログインします

``` shell
$ docker-compose run --rm cli bash
Starting wordpress-cli_db_1 ... done
Starting wordpress-cli_app_1 ... done
bash-5.0$ 
```

- ログイン後、用意しておいたインストールシェルを実行します

``` shell
bash-5.0$ chmod +x /tmp/wp-install.sh 
bash-5.0$ /tmp/wp-install.sh 
+ wp core download --locale=ja --path=/var/www/html/wp --version=5.2.2 --force
Creating directory '/var/www/html/wp/'.
Downloading WordPress 5.2.2 (ja)...
（以下、省略）
```
- ここまでできたらWordPressにログインしてみましょう。WordPressのインストールとともにプラグインのインストールも完了しています！:clap:

## Custom Post Type UI プラグインを使っている場合
カスタム投稿の設定をWordPressの管理画面から行えるプラグインですが、このプラグインはwp-cliに対応しています。設定をjsonに出力しておけば、簡単に取り込むことができます。

``` cli
bash-5.0$ wp cptui
usage: wp cptui export [--type=<type>] [--dest-path=<path>]
   or: wp cptui import [--type=<type>] [--data-path=<path>]
```
- typeは、`post_type` or `taxonomy`を指定します

###post_typeの設定をimportする

``` cli
wp cptui import --type=post_type --data-path=/var/www/html/_conf/cptui-post.json
```
これでカスタム投稿の設定取り込みもコード化できます！

# wp-cliについて
- 上記以外にも初期時に必要なtermを作ったりすることもできます。
    - 参照：[wp create term](https://developer.wordpress.org/cli/commands/term/)
- **wp-cliを使うことによって、WordPressとプラグインのインストールをコード化することができました。**これにより、複数人で開発する際に、環境を揃えることが容易になるし、一度壊した環境を再度構築することが簡単になります。*これで管理画面からプラグインを1個づつインストールする必要がなくなった！！*
- wp-cliは、WordPressの最新版にアップグレードすることができるたり、ユーザー登録ができたりと、開発環境だけでなく、本番環境で利用してもメリットがあるツールだと思います。本記事では、Docker上で使っていますが、Docker使っていないWordPressでも使えます。
    - 参照：[wp core update](https://developer.wordpress.org/cli/commands/core/update/)
    - 参照：[wp user](https://developer.wordpress.org/cli/commands/user/)

# 最後に
初めてwp-cliを使いましたが、こんな便利なツールがあったなんてと作者に感謝感激です。便利な使い方を見つけたら、また記事投稿したいと思います。
何か間違いや、こんな使い方もありますよってことはコメントいただけると助かります。

## 参考サイト
- [WP-CLI Commands](https://developer.wordpress.org/cli/commands/)
- [Docker Hub wordpress](https://hub.docker.com/_/wordpress)
- [エンジニアな自分がWordPressで何度も調べたり感心したりした事](https://qiita.com/yousan/items/c925f0a241be02a55292)