最速でWordPress環境を構築してみる

# はじめに
日々WordPressです。
新しい案件がスタートしたり、案件の相談が来たり、自作のプラグインを試したりと新しいWordPress環境が必要になることってありますよね。

できる限り自動化して「俺の中ではこれが最速だ！」って思えるぐらいになりました。
同業の方の手助けになれば幸いです。

# どれぐらい早いの？
1. ディレクトリ掘る
2. コマンド打つ
3. ブラウザで確認できる(ﾟ∀ﾟ)

1分ぐらいです。

# 環境
Mac OX Xのローカル環境を想定しています。
ローカルのホスト名は
aramaki.l2tp.org
としてあります。


# 対抗馬は？
他に素早く環境構築ができるものとしてはVagrant、MAMP、レンタルサーバです。

* Vagrant
Vagrantいいですね。でもシェル環境とかも一緒に整えなくてはならないので気がかりです。あと仮想マシンのオーバーヘッド分が重いです。

* MAMP
MAMPもすごくいいです。MAMPからコンフィグレーションしてもいいかな、と思っています。ここでのやり方と似ています。

* レンタルサーバ
外部に置くので用途違いです。ローカルで開発してお客さんに見せたりするときにはもちろん使います。

それから他に似たような趣旨として以下があります。すごく洗練されていて憧れます。
[WordPressプラグインのユニットテスト用のWordPress環境をセットアップする](http://qiita.com/miya0001/items/9b9055e45f46531d0254)

# 概要
以下のことを行います。

* ローカルでウェブサーバ＋PHP＋MySQLを動かす
* フォルダを作ったらバーチャルホストで認識させる
* Hostsファイルを書き換えなくてもアクセスできるようにする
* WordPressのダウンロード、初期設定、プラグインインストールをする


大まかに以下のパッケージ、仕組みを利用します。


* Apache, PHP, MySQL (Homebrew)
* ApacheのVirtualDocumentRoot
* DnsmasqでDNSのワイルドカード設定
* DNS参照先の変更
* wp-cli

# 作業
## Apache, PHP, MySQL (Homebrew)
Apache、PHP、MySQLを設定します。この辺りは他にも情報がたくさんありますね。

```bash
$ xcode-select --install
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew tap homebrew/apache
$ brew tap homebrew/php
$ brew install httpd24 mysql php56
```

[OS X YosemiteにHomebrew + DropboxでPHP環境構築　〜Apache, PHP, MySQL, ComposerをインストールしてFuelPHPの設定まで](http://qiita.com/saltyshiomix/items/aacb5f9635c0d3201174)

やっていきます。

## ApacheのVirtualDocumentRootを設定する
ApacheにはVirtualDocumentRootという機能があります。
通常のバーチャルホストでは

```
hoge.example.com => /var/www/hoge.example.com
fuga.example.com => /var/www/fuga.example.com
```
といった風に一つずつ設定する必要があります。
ですがVirtualDocumentRootを利用すると

```
*.example.com => /var/www/*.exmaple.com
```
(*は何でも良い)

といった風に変数として扱えます。
以下では `/Users/yousan/Sites` にテスト環境のドメイン名でフォルダを設置する、という風に設定してあります。

```conf:/usr/local/etc/apache2/2.4/extra/httpd-vhosts-mass.conf
UseCanonicalName Off

# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot /Users/yousan/Sites/%0/
```
(このファイルは新規作成です)

```conf:/usr/local/etc/apache2/2.4/httpd.conf
# Virtual hosts
#Include /usr/local/etc/apache2/2.4/extra/httpd-vhosts.conf
Include /usr/local/etc/apache2/2.4/extra/httpd-vhosts-mass.conf
```


ちなみにnginxでも同様のことが行えるようです。
[Nginxでバーチャルドキュメントルート](http://qiita.com/semind/items/18322effee888306432f)


ここまでの作業で

```
hoge.example.com => /Users/yousan/Sites/hoge.example.com
```
というバーチャルホストが自動的に設定されるようになりました。
さらに具体的には、ローカルのホスト名が aramaki.l2tp.org ですので、

```
anken1.aramaki.l2tp.org => /Users/yousan/Sites/anken1.aramaki.l2tp.org
anken2.aramaki.l2tp.org => /Users/yousan/Sites/anken2.aramaki.l2tp.org
plugintest1.aramaki.l2tp.org => /Users/yousan/Sites/plugintest1.aramaki.l2tp.org
plugintest2.aramaki.l2tp.org => /Users/yousan/Sitesplugintest2.aramaki.l2tp.org
...
```
といった具合に環境を増やすことが出来ます。
しかしこれでは

```
anken1.aramaki.l2tp.org
```
にブラウザでアクセスして試験するにはhostsファイルを書き換えなければいけません
[Macでhostsファイルを変更・反映](http://qiita.com/junker919/items/cc15653a681e2dcd79ea)

続いてこの作業を自動化します。

## DnsmasqでDNSのワイルドカード設定
ローカルのホスト名が aramaki.l2tp.org でしたので、*.aramaki.l2tp.org という名前をすべてローカルのIPアドレスで解決できるようにしましょう。

Dnsmasqをインストールします

```bash
$ brew install dnsmasq
$ sudo cp /usr/local/opt/dnsmasq/*.plist /Library/LaunchAgents
$ sudo cp /usr/local/opt/dnsmasq/*.plist /Library/LaunchAgents
```

続いて設定です。

```conf:/usr/local/etc/dnsmasq.conf
resolv-file=/etc/resolv.conf.dnsmasq
address=/.aramaki.l2tp.org/127.0.0.1
```

```conf:/etc/resolv.conf.dnsmasq
nameserver 8.8.8.8
```

この状態で、

```
.aramaki.l2tp.orgで終わるドメインは127.0.0.1に
それ以外は8.8.8.8 (Google DNS)で解決する
```

となりました。(もちろん、プロバイダや社内のDNSサーバなど適宜変更してください)


このローカルにインストールしたDnsmasqを利用して名前引きを試験してみます。

```bash
$ nslookup hoge.aramaki.l2tp.org 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   hoge.aramaki.l2tp.org
Address: 127.0.0.1

$ nslookup qiita.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   qiita.com
Address: 54.248.127.202
```

ちゃんと解決できましたね。hoge.aramaki.l2tp.orgはローカルに、qiita.comは解決できないので8.8.8.8に聞きに行ってくれたようです。

## DNS参照先の変更

しかしこのままではDHCPなどで取得したDNSサーバを参照しますのでそれを変更します。

Mac OS XではGUIでDNS設定が出来ます。
「システム環境設定 ＞ ネットワーク ＞ Wi-Fi > DNS」
から 127.0.0.1 に設定します。

<img width="616" alt="Screen Shot 2015-12-24 at 3.19.05 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/47327/866e2a9b-8e7f-0aa4-8846-32a25e23923c.png">


Wi-Fi以外の環境であればコマンドで設定します。(Wi-Fiでももちろん設定できます)

```bash
$ sudo networksetup -setdnsservers "iPhone USB" 127.0.0.1
```

[Mac OS XをUSBでテザリングしたときにDNSサーバを変更する方法](
http://qiita.com/yousan/items/5c4f6a9ebc77d1c2e8c5)


## WordPressのインストール
WordPressのインストールも自動化が進みました。
wp-cliが優秀です。

[エンジニアな自分がWordPressで何度も調べたり感心したりした事#wp-cli](http://qiita.com/yousan/items/c925f0a241be02a55292#wp-cli)

```bash
$ brew install wp-cli
```
これで `wp` コマンドが使えるようになりました。

スクリプトを作成します。
次のスクリプトは

* WordPressのダウンロード
* WordPressのインストール(サイトのタイトル、初期ユーザ)
* DB設定
* confにデバッグを書き出す
* プラグインのインストール、有効化
 
を行います。パスワードなどは適宜換えてください。

```bash:/Users/yousan/sh/wphere
#!/bin/bash
DBHOST=localhost
DBNAME=yousan_wordpress
DBUSER=dbuserhere
DBPASS=dbpasshere
WPUSER=yousan
WPPASS=userpasswordhere
WPMAIL=yousan@l2tp.org

PWD=`pwd`
DOMAIN=${PWD##*/}
IFS='.'
set -- ${DOMAIN}
PREFIX=$1_
IFS=','

wp core download --locale=ja

wp core config \
   --dbname=${DBNAME} \
   --dbuser=${DBUSER} \
   --dbpass=${DBPASS} \
   --dbhost=${DBHOST} \
   --dbprefix=${PREFIX} \
   --extra-php <<PHP
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'FS_METHOD', 'direct' );
PHP

wp core install \
   --url=${DOMAIN} \
   --title=${DOMAIN} \
   --admin_user=${WPUSER} \
   --admin_password=${WPPASS} \
   --admin_email=${WPMAIL}

wp plugin install \
   add-page-from-template \
   advanced-custom-fields \
   backwpup \
   custom-post-type-permalinks \
   custom-post-type-ui \
   debug-bar \
   debug-bar-console \
   duplicate-post \
   fg-debug-bar-rewrite-rules \
   post-type-switcher \
   show-current-template \
   --activate
```

以上です。

他にもこんなの便利だよ、っていうのを教えてもらえると嬉しいです。