Wordmove の正しい設定方法


Wordmove を使用すると `wordmove push` 等の簡単なコマンドで、本番環境と開発環境を簡単に同期できます。

https://github.com/welaika/wordmove

ただ、ソーシャルやブログを見ると誤まった内容の記事が非常に多いので、設定ファイルの記述方法について紹介します。

以下は VCCW を使ってることを想定した Wordmove の使い方です。

## 設定ファイル Movefile の作り方

Wordmove を使って WordPress をデプロイするには 設定ファイルが必要です。

VCCW の場合、`vagrant up` 後に自動的にこの `Movefile` が生成されますので通常は不要ですが、もし何かのはずみでこのファイルがなくなってしまった時や一から作りたい時は、以下のコマンドを実行してください。

まず、VCCW のゲストマシンにログイン。

```
$ vagrant ssh
```

つぎにゲストマシン内で以下のコマンドを実行してください。

```
$ cd /vagrant
$ wp scaffold movefile
```

すると、ホストマシンから見た Vagrantfile と同じディレクトリに Movefile が出来ているはずです。

この時点ですでにうまくいかない！？

その場合は、[VCCW の `.zip` をダウンロード](https://github.com/vccw-team/vccw/releases)し直して、もう一回 `vagrant up` してください。

そういう方はすでになんらかのエラーに遭遇しているわけなので、デフォルトの設定で `vagrant up` することをおすすめします。

## Movefile を記述

Movefile があることを確認したら、そのファイルをお好みのテキストエディターで開いてください。

ただし、文字コードの設定は **UTF-8**、改行コードの設定は **LF** であるべきです。

現時点での Movefile は、VCCW をデフォルトで `vagrant up` した場合以下のようになっているはずです。

```
local:
  vhost: "http://vccw.dev"
  wordpress_path: "/var/www/html/" # use an absolute path here

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

  # paths: # you can customize wordpress internal paths
  #   wp_content: "wp-content"
  #   uploads: "wp-content/uploads"
  #   plugins: "wp-content/plugins"
  #   mu_plugins: "wp-content/mu-plugins"
  #   themes: "wp-content/themes"
  #   languages: "wp-content/languages"

production:
  vhost: "http://example.com"
  wordpress_path: "/var/www/your_site" # use an absolute path here

  database:
    name: "database_name"
    user: "user"
    password: "password"
    host: "host"
    port: "3308" # Use just in case you have exotic server config
    mysqldump_options: "--max_allowed_packet=50MB" # Only available if using SSH

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

  ssh:
    host: "host"
    user: "user"
    port: 22
    rsync_options: --verbose

```

Movefile は YAML というフォーマットで記述されていて、上の例では大きく二つのセクションがあります。

* local
* production

`local` の内容は、上述の方法で Movefile を生成した場合には変更する必要はありません。

`production` 以下にこれから必要な設定を書き込んでいきます。

そうそう、`local` はローカルで、`production` は本番サーバーとかそういうことです。ここをあべこべに考えるとうまく動作しなかったり、ひどい目にあったりしますので気をつけましょう。

### 記述内容

#### vhost:

多くの場合、この値は WordPress の `WP_HOME` とまったく同じであるべきです。WordPress の管理画面の [一般]-[設定] の「サイトアドレス (URL)」の値をコピペするのが無難です。

くれぐれも **最後のスラッシュを書かない** ように気をつけてください。（`local` の `vhost` も同様）

例:

* ○ `vhost: "http://example.com"`
* × `vhost: "http://example.com/"`

WordPress は内部的にスラッシュ抜きでサイトのベースとなる URL を保存しています。なので、`vhost`の値の末尾にスラッシュが入っていると、`wordmove push` や `wordmove pull` に成功しても、実際にはサイトにアクセスできないとか、ダッシュボードにログインできないとか、画像がリンク切れするとかいろいろな不具合が発生します。

ここにスラッシュつけて紹介してるブログすごく多いです！気をつけましょう！

ここが正しく記述されていれば、Wordmove は、`wordmove pull` や `wordmove push` した時に、`local` の `vhost` と `production` の `vhost` を自動的に置換してくれます。

したがって、今回のやり方の場合、みなさんのサイトが `http://vccw.dev` で表示されるはずです。

#### wordpress_path:

これはサーバー側で WordPress がインストールされているパスを指定してください。

このパスとは、`wp-settings.php` があるパスを記述してください。`wp-config.php` とは違うケースがあるので注意しましょう。

#### database:

この項目には、さらに `name` などのいくつかの項目があります。

これらの値は、サーバー側の `wp-config.php` に記述されているものをコピペしてください。

ひとつだけ注意点があるのですが、いくつかの共有サーバーでは、MySQL のデフォルトの文字コードが UTF-8 ではないようです。この場合は、`charset: "utf8"` という行を `database:` 以下のように付け足してください。

```
  database:
    name: "database_name"
    user: "user"
    password: "password"
    host: "host"
    port: "3308" # Use just in case you have exotic server config
    mysqldump_options: "--max_allowed_packet=50MB" # Only available if using SSH
    charset: "utf8"
```

[さくらのレンタルサーバーにWordPressをデプロイするのはVCCW + Wordmoveが最高に捗る](http://2inc.org/blog/2014/12/09/4512/)

### ssh:

`host`、`user` などの各項目を正しく設定してください。

現在では、SSH が使えないサーバーでは、Wordmove は使用できませんのであしからず。

## デプロイ

以上が完了したらためしに `wordmove pull -t` とかしてみましょう。

この場合、本番環境からテーマを持ってきます。

データベースの時は、`wordmove pull -d`です。

すべてやるときは、`wordmove pull --all` です。

逆に本番にデプロイする時は `push` です。間違えないように気をつけましょう。

Wordmove は、`pull` や `push` した時にデータベースのバックアップを、ローカル側の `wp-content/` 以下に自動的に保存してくれます。

うっかり間違えてしまった時は、そのバックアップからデータベースを復活させてください。