ここ2〜3か月ほど、WordPressを使った企業内ナレッジ共有システムを構築しています。
「WordPressを使って企業システム」というのも、いずれ語りたいところなのですが、今日は開発環境の話にしようと思います。
WordPressでの開発で困るリリース作業
WordPressでシステム開発しようとすると、何らかのファイル編集や開発等が必要になるのは、下記の要素です。
- テーマ
- プラグイン
- 言語ファイル
- アップロードファイル(画像などのメディアファイル)
- データベース(投稿データや設定データなど)
- wp-config.php(基本的な設定ファイル)
結構、多岐に渡るんですね。
それぞれが別のディレクトリに整理されているのですが、例えばプラグインディレクトリでは、WordPressに最初から入っているプラグイン、公開されているプラグイン、独自開発したプラグインと、様々な由来を持つファイル(ディレクトリ)が集まっています。
開発環境で色々いじって、それを本番環境に持っていこうというとき、「はて、自分は何をどういじったのだろう・・・」と悩んでしまうのです。リリース漏れとかあったら、一気にWordPressの画面が「真っ白」になってしまうし・・・。
ふつうのシステム開発なら、必要なファイル全体を1つのGitリポジトリで管理するので、本番環境に入って単純にそれをPULLすれば済む話なのですが、WordPressのディレクトリを全部まとめて1つのGitリポジトリにするというのは、どうも・・・。(独自開発したテーマやプラグインは、それ毎にGit管理しています。)
といって、編集したファイルを例えばExcelとかで管理しようというのも違うと思うし。そりゃ、いつ時代の話だ?と。
開発環境はVCCWで!
リリース作業の話は一旦置いておいて、そもそも開発環境をどうやって作るか?というのも難しいんです。本番環境はLinux(CentOS)で動いていますから、出来ればそれと同じ環境を作りたい。
Macを使えば、十分類似の環境を作ることが出来るのですが、そもそも、そのためにMySQLやPHPをインストールしたりするというのも面倒。あらかじめMac上で環境が構築されていたとしても、他のプロジェクトでの開発と環境を共存させるのは余計な問題を引き起こしかねないので、止めておきたいですよね。
そこで使いたいのは、VCCWです。
VCCW – A WordPress development environment.
公式サイトの説明にもあるように、Vagrant+Chefで出来たWordPressの開発環境です。
ざっくり言えば、手元のMacにVirtualBox(仮想マシン環境)を入れて、その上でCentOSを動かし、Chefを使ってWordPress環境を自動構築しちゃう全般をVagrantで管理出来るようにするよ!という、こと。
あらかじめVagrantとVirtualBoxの環境があれば、あとはVCCWのGitをcloneして、設定ファイル(Vagrantfile)を作り、vagrant upコマンドでWordPressの開発環境が出来てしまいます。
Vagrant+VirtualBoxの導入
まだ、MacにVagrantとVirtualBox入れてないよ!という人は、下記の3行で導入しちゃいましょう。(Homebrewは使っている前提ですが・・・)
brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew cask install vagrant
ちなみに、最初に導入したbrew-caskというのは、普段なら専用インストーラーを使ったり、アプリファイルをアプリケーションフォルダに移すようなアプリを、Homebrewでインストールするためのものです。
ChromeやDropboxといったアプリも、brewでインストール出来るようになります。
VCCWの入手
適当なディレクトリに、VCCWを落としてきます。
[任意のディレクトリ名]を指定しておけば、その名前でディレクトリを作り、そこにVCCWのファイルがダウンロード(clone)されます。
git clone [email protected]:miya0001/vccw.git [任意のディレクトリ名]
これは必須ではありませんが、vagrant-hostupdaterというVagrantプラグインをインストールしておけば、VCCWの方で自動的にMacのhostsファイルを編集してくれます。(例えば、http://artisanedge.localというURLで開発環境のWordPressサイトにアクセス出来るようになる。)
vagrant plugin install vagrant-hostsupdater
Vagrantfileの編集
VCCWのバージョンによってVagrantfileは若干違うのですが、下記のように編集します。(編集箇所のみ抜粋)
VM_BOX = "chef/centos-6.5" # for 64bit
WP_VERSION = ENV["wp_version"] || 'latest' # latest or 3.4 or later or http(s):// URL to zipfile
WP_LANG = ENV["wp_lang"] || "ja" # WordPress locale (e.g. ja)
WP_HOSTNAME = "artisanedge.local" # e.g example.com
WP_IP = "192.168.33.11" # host ip address(VirtualBox上のネットワークは192.168.33.xxxが使われる)
WP_TITLE = "サイトのタイトル" # title
WP_ADMIN_USER = "adminユーザ名" # default user
WP_ADMIN_PASS = "adminユーザのパスワード" # default user's password
WP_DB_NAME = 'データベース名'
WP_DB_USER = 'MySQLのユーザ名'
WP_DB_PASS = 'MySQLユーザのパスワード'
WP_DB_ROOT_PASS = 'MySQLのrootユーザのパスワード'
VCCWの起動
vagrant up
初回の起動では、VagrantfileのVM_BOXで指定したchef/centos-6.5という、Chef導入済みのCentOS環境のVirtualBoxイメージをダウンロードするので、かなり時間がかかります。(一度ダウンロードした後は、都度そのイメージをコピーして使うのでダウンロードの時間はかかりません。)
また、CentOS環境が起動した後、ChefによってApacheやらPHPやらMySQLやらWordPressやらのインストールが立て続けに行われます。
vagrant upコマンドの実行が終わったら、WebブラウザでWP_HOSTNAMEで指定したホスト(またはWP_IPで指定したIPアドレス)にアクセスしてみましょう。見慣れたWordPressの画面が表示されるはずです。
CentOS環境にログインした場合は、下記のコマンドを使います。
vagrant ssh
リリース作業はWordMoveで!
VCCWで開発環境を作ると、Vagrantfileと同じ場所にMovefileというファイルも出来ていることに気づくと思います。
VCCWにはWordMoveというコマンドも入っていて、その設定ファイルがMovefileです。
さて、本記事の冒頭でWordPressで作ったシステムはリリース作業が面倒だと書いたのですが、この問題を一気に解決してくれるのがWordMoveです。
WordMoveの機能
WordMoveで何が出来るかというと、開発環境と本番環境の間でのWordPress環境のPUSH(開発→本番)とPULL(本番→開発)です。
つまり、開発環境での作業自体は、独自のテーマやプラグインといった単位でGit管理しておき、それらの集合体として出来たWordPressサイトは、WordMoveを使って一気に本番環境にPUSHしてしまおう!というわけです。
これとは逆に、既に出来ている本番環境と同様の開発環境を作るために、PULLを使うことも出来ます。
WordMoveのPUSH/PULLは、環境すべてを一気にやるだけではなく、テーマだけ、プラグインだけ、アップロードファイルだけ、データベースだけといったことも可能です。(但し、特定のテーマだけ、特定のプラグインだけといったことは出来ないようです。)
データベースの内容をPUSH/PULLする際には、開発環境と本番環境でのURLの違い(例えば、artisanedge.localとartisanedge.jp)を吸収してくれるのも大きな魅力です。
Movefileの編集
vagrant upした直後のMovefileは、開発環境側の設定だけがされていて、本番環境側の設定が空白になっています。そのため、本番環境側の設定を追記する必要があります。
下記の箇所を編集します。(編集箇所のみ抜粋)
staging:
vhost: "本番環境のURL"
wordpress_path: "WordPressが導入されているディレクトリ" # use an absolute path here
database:
name: "データベース名"
user: "MySQLのユーザ名"
password: "MySQLのパスワード"
host: "localhost"
ssh:
host: "SSHホスト"
user: "SSHユーザ名"
# password: "password" # password is optional, will use public keys if available.
port: 22 # Port is optional
rsync_options: "--verbose" # Additional rsync options, optional
WordMoveでは本番環境へのファイル転送の方法として、SSH(SCP)とFTPが使えますが、上記はSCPの例です。公開鍵での認証を使う場合は、上記のようにパスワードの指定を行いません。
WordMoveを使う
WordMoveは、VirtualBoxのホスト側(Mac自体)ではなく、ゲスト側(VirtualBox上のCentOS環境)で操作します。
vagrant ssh
(以下、ゲスト側で)
cd /Vagrant
wordmove pull --all
WordMoveの使い方は、wordmove helpと入力すると分かります。例えば、データベースのみPULLする場合は、 wordmove pull -d などです。
まとめ
ということで、VCCWとWordMoveを使うことで、WordPressでのシステム開発作業は一気に捗ります!
もう、面倒だからと本番環境を直接いじっちゃうのは卒業ですよ!