はじめに
日々WordPressです。
新しい案件がスタートしたり、案件の相談が来たり、自作のプラグインを試したりと新しいWordPress環境が必要になることってありますよね。
できる限り自動化して「俺の中ではこれが最速だ!」って思えるぐらいになりました。
同業の方の手助けになれば幸いです。
どれぐらい早いの?
- ディレクトリ掘る
- コマンド打つ
- ブラウザで確認できる(゚∀゚)
1分ぐらいです。
環境
Mac OX Xのローカル環境を想定しています。
ローカルのホスト名は
aramaki.l2tp.org
としてあります。
対抗馬は?
他に素早く環境構築ができるものとしてはVagrant、MAMP、レンタルサーバです。
-
Vagrant
Vagrantいいですね。でもシェル環境とかも一緒に整えなくてはならないので気がかりです。あと仮想マシンのオーバーヘッド分が重いです。 -
MAMP
MAMPもすごくいいです。MAMPからコンフィグレーションしてもいいかな、と思っています。ここでのやり方と似ています。 -
レンタルサーバ
外部に置くので用途違いです。ローカルで開発してお客さんに見せたりするときにはもちろん使います。
それから他に似たような趣旨として以下があります。すごく洗練されていて憧れます。
WordPressプラグインのユニットテスト用のWordPress環境をセットアップする
概要
以下のことを行います。
- ローカルでウェブサーバ+PHP+MySQLを動かす
- フォルダを作ったらバーチャルホストで認識させる
- Hostsファイルを書き換えなくてもアクセスできるようにする
- WordPressのダウンロード、初期設定、プラグインインストールをする
大まかに以下のパッケージ、仕組みを利用します。
- Apache, PHP, MySQL (Homebrew)
- ApacheのVirtualDocumentRoot
- DnsmasqでDNSのワイルドカード設定
- DNS参照先の変更
- wp-cli
作業
Apache, PHP, MySQL (Homebrew)
Apache、PHP、MySQLを設定します。この辺りは他にも情報がたくさんありますね。
$ 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の設定まで
やっていきます。
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
にテスト環境のドメイン名でフォルダを設置する、という風に設定してあります。
UseCanonicalName Off
# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot /Users/yousan/Sites/%0/
(このファイルは新規作成です)
# 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でバーチャルドキュメントルート
ここまでの作業で
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ファイルを変更・反映
続いてこの作業を自動化します。
DnsmasqでDNSのワイルドカード設定
ローカルのホスト名が aramaki.l2tp.org でしたので、*.aramaki.l2tp.org という名前をすべてローカルのIPアドレスで解決できるようにしましょう。
Dnsmasqをインストールします
$ brew install dnsmasq
$ sudo cp /usr/local/opt/dnsmasq/*.plist /Library/LaunchAgents
$ sudo cp /usr/local/opt/dnsmasq/*.plist /Library/LaunchAgents
続いて設定です。
resolv-file=/etc/resolv.conf.dnsmasq
address=/.aramaki.l2tp.org/127.0.0.1
nameserver 8.8.8.8
この状態で、
.aramaki.l2tp.orgで終わるドメインは127.0.0.1に
それ以外は8.8.8.8 (Google DNS)で解決する
となりました。(もちろん、プロバイダや社内のDNSサーバなど適宜変更してください)
このローカルにインストールしたDnsmasqを利用して名前引きを試験してみます。
$ 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 に設定します。
Wi-Fi以外の環境であればコマンドで設定します。(Wi-Fiでももちろん設定できます)
$ sudo networksetup -setdnsservers "iPhone USB" 127.0.0.1
Mac OS XをUSBでテザリングしたときにDNSサーバを変更する方法
WordPressのインストール
WordPressのインストールも自動化が進みました。
wp-cliが優秀です。
エンジニアな自分がWordPressで何度も調べたり感心したりした事#wp-cli
$ brew install wp-cli
これで wp
コマンドが使えるようになりました。
スクリプトを作成します。
次のスクリプトは
- WordPressのダウンロード
- WordPressのインストール(サイトのタイトル、初期ユーザ)
- DB設定
- confにデバッグを書き出す
- プラグインのインストール、有効化
を行います。パスワードなどは適宜換えてください。
#!/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
以上です。
他にもこんなの便利だよ、っていうのを教えてもらえると嬉しいです。