VCCWを使ってWordPressの開発環境を整えて、WordMoveでhetemlにDeployする

個人的にWordPressを使った環境構築をする機会があったのでメモ。
環境構築はするけど、wordpressは殆ど触った事がない人間です。

## 開発環境構築

### なぜVCCWか？
こちらのページが結構参考になりました。
http://codechord.com/2015/05/compare-vccw-wocker/

WordPressの開発では、VCCWとWockerというメジャーなものが２つあって、前者はVagrantベース。後者はDockerベース(Vagrantの中でDockerを起動している)のよう。

VCCWはガッツリいろいろなものが揃っているのに対して、Wockerはシンプルで起動も軽量という特徴があります。

僕は両方使ってみた上での比較はしませんでしたが、WordMoveが最初から入ってるのでよさそう。という理由でVCCWを使って環境構築をする事にしました。

### VCCWで環境構築
http://qiita.com/naru0504/items/58011181f2c271808c7f

こちらを参考にやった。細かい説明は↑に書いてあるのでコマンドだけメモしておく。
Vagrant環境は既に構築している前提。

```
vagrant plugin install vagrant-hostsupdater
vagrant box add miya0001/vccw
git clone https://github.com/vccw-team/vccw.git wordpress-sample
cd wordpress-sample
vagrant up
```
※vagrant-hostsupdaterの機能で/etc/hostsに設定を入れるので、ルートのパスワードが途中で要求されます

これでしばらく待った後、以下のURLで見れるようになる。

http://vccw.dev/

めちゃ簡単だった。

### カスタマイズ
これも先ほど上げた参考サイトに書いてあった。

http://qiita.com/naru0504/items/58011181f2c271808c7f#%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

```
cp provision/default.yml site.yml
```

コピーして出来たsite.ymlを編集していく。

- メモリの割当量
- ホスト名（ローカルで見るURL）
- 日本語化とタイトル
- ユーザとIDの変更（admin/adminで入れないようにしとく）

この辺を修正しました。

一通り終わったら、

```
vagrant reload --provision
```

これで設定が反映される。

## WordMoveでhetemlにDeploy

WordMoveとはひとことで言うとめっちゃ便利です。

https://github.com/welaika/wordmove

以下の２つのブログを読むとだいたいわかると思います。

https://firegoby.jp/archives/5644

https://torounit.com/blog/2014/12/09/1889/

### rsyncかFTPか

WordMoveのDeployはrsyncとFTPの２種類出来るようになっています。

上であげた参考サイトにFTPを使った場合だと、

> ただ、やりとりするファイルが多いと接続が切れたりする事があるようです。

こう書かれてあったので、出来ればrsyncでやれたら幸せだなぁと思っていました。しかし、残念ながら、hetemlではrsyncが動かないようでした。（僕が確認した今現在）

### hetemlでrsyncが動くようにする
vagrantの中でrsyncをコンパイルしてバイナリを作って、それをheteml上で動かします。

```
vagrant ssh
cd /tmp
git clone git://git.samba.org/rsync.git
cd rsync
git checkout v3.0.9 # masterだと最新のautoconfを要求されたので一つ前のバージョンにした
./configure
make
```

これで`rsync`というバイナリが作成されます。

heteml上では、自分のホームディレクトリに`bin`フォルダを作り、そこにパスを通して先ほど作成したrsyncを置きます。公開鍵をheteml上においたり、`~/.ssh/config`に設定したりしておくのは各自やっておくと便利です。

```
# hetemlの自分のホームディレクトリ
mkdir bin

# ↑で作成したbinフォルダにrsyncを置く
# 手順省略

# .bashrcに以下を追記
export PATH=$PATH:$HOME/bin

# 読み込み直し＆確認
source .bashrc
rsync --version # これでバージョンが出れば成功
```

以上でheteml上でrsyncが動くようになりました

### WordMoveの設定
Movefileを編集します。僕の場合は以下のようになりました。

```
local:
  vhost: "http://vccw.dev"
  wordpress_path: "/var/www/wordpress"

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"

heteml:
  vhost: "http://hoge.heteml.jp/vccw-sample"
  wordpress_path: "/home/sites/heteml/path-to-your-folder/web/vccw-sample"

  database:
    name: "_heteml_user"
    user: "_heteml_user"
    password: "password"
    host: "hoge.heteml.jp"
    charset: "utf8"

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "Movefile"
    - "wp-config.php"
    - "wp-content/*.sql"

  ssh:
    host: "hoge.heteml.jp"
    user: "hoge"
    port: 1234
    rsync_options: "--verbose"
```
※パスワードやユーザ名や、port番号などは適当なものに変更しています。また、sshは鍵を通しておく事で、パスワードを記述するがなくなるのでオススメです。

Movefileの設定について詳しく知りたい方は、僕が挙げた参考サイトに解説がのっていたり、VCCWをgit cloneした時にデフォルトで作成されているファイルに説明があるのでそれを参照してください。

hetemlはDBへのアクセスがsshを踏み台にしてDBアクセスしないとダメですが、これもよしなにWordMoveがやってくれているっぽいので感動しました。

### Deploy
vagrantの中に入ってDeployします。

```
vagrant ssh
cd /vagrant
wordmove push -wtplv -e heteml
```

オプション周りはhelpを見てある程度ご察しください。基本的には、git管理されるであろう部分をそのままDeployのオプションに加えているイメージです。

```
Options:
  -w, [--wordpress], [--no-wordpress]
  -u, [--uploads], [--no-uploads]
  -t, [--themes], [--no-themes]
  -p, [--plugins], [--no-plugins]
  -l, [--languages], [--no-languages]
  -d, [--db], [--no-db]
  -v, [--verbose], [--no-verbose]
  -s, [--simulate], [--no-simulate]
  -e, [--environment=ENVIRONMENT]
  -c, [--config=CONFIG]
      [--no-adapt], [--no-no-adapt]
      [--all], [--no-all]
```

`-e`は、`WordMove`で設定した名前みたいなものです。stagingとか、productionとか複数設定できるので、非常にべんりー

ちなみに、

```
wordmove pull --all -e heteml
```

こうすると、サーバ上のDBやらいろいろ全て取ってきて、いい感じに手元に反映してくれます。これで開発環境すらない環境でもさくっと開発環境が作れるかも！？但し、DBの容量が大きかったり、uploadsフォルダの中に結構ファイルが入ってると上手く動かないかもしれませんねぇ。

注意点としては、↑のコマンドのpullをpushに変えるとローカルの内容を全てサーバ上に反映してしまいます。DB周りはバックアップを取ってくれるらしいのですが、uploadsフォルダなどはどうなんでしょうね。この辺は、誤ってこういう事が置きないようにシェルスクリプトで指定したコマンドのみ実行するなどの対策をしておきたいところです。

一先ず、これでDeployも完了〜

## git管理に追加する
VCCWでは、`.gitignore`でWordPressのソースや、Movefileなど、無視するようになっています。git管理しとかないと、チームで共有出来ないので、以下のファイルについては無視しないようにしました。

```
Movefile
www
site.yml
```

また、WordPressのソース自体にも、`.gitignore`があって、`.htaccess`を無視するようにしていたので外しました。以下の場所にあります。

```
www/wordpress/.gitignore
```

`.htaccess`はApacheだけに作用するものなのでデフォルトで無視するようにしているんですかね？今回はhetemlでApacheなので無視しないようにしました。

以上で一通り終わり！

と思ったけど、VCCWがバージョンアップした時にこのやり方だと、ちょっと面倒くさいかも？という感じ。。

## 最後に
いかがでしたでしょうか？今までWordPress微妙にしか絡んでこなかったですが、WordMoveが便利過ぎてすごい！という感じになりました。今後もあまり絡む機会はないと思うけど、Deployの自動化などは出来そうであればやってみたいなぁと思います。