VCCW3でWordPress開発環境を作る~ハマり所と対策のまとめ

 WordPressはブログ作成に広く使われているが、テーマをカスタマイズして使っているケースがほとんどだと思う。テーマのカスタマイズには開発環境が欠かせない。

 開発環境はVCCW3を利用するケースが多いようだ。しかし手順が複雑で、ハマりどころも多い。そこで、VCCW3を使った環境構築のハマりどころと、その対策についてご紹介する。

 

WordPress開発環境にはどんなものがあるか

デバッガについて

Vagrant+VCCW設定のハマりどころ

環境構築の手順
VagrantとVCCWのバージョンに注意
vagrant upでエラー(ゴミ掃除の手順)
サイトが表示されない
サイトを表示させるとPHPのエラー画面が出る
wordmoveが失敗する(sshでエラー)
プロキシが通らない

デバッグ設定のハマりどころ

ブレークポイントで止まらない
NetBeansが接続を待っています・・・

Eclipse(neon3,Oxygen)の設定

Vagrant+VCCWの使いこなし

起動時の入力省力化
wordmove実行時のパスワード入力省力化
複数の仮想マシンを作る

 

<参考購入先>
WordPress開発 参考書 ネットの情報もいいですが本も情報が充実しています

 

スポンサーリンク

WordPress開発環境にはどんなものがあるか

 WordPress で本格的なブログを作るには、ローカル(例えばあなたのPC)にサイトを構成するファイル一式を置き、カスタマイズとテストを繰り返したのち、本番環境にデプロイ(展開)するやり方をすることが多いと思う。これを実現するための開発環境についてまとめた。

 

表1 WordPress開発環境の比較(Windowsベース)
(内容を保証するものではありません。間違いがあればご指摘いただけると嬉しいです)

構成 IDE or エディタ 同期  コスト

 環境構築
の難度

ライト
カスタム

本格カスタム

備考
VirtualBox
+Vagrant
+VCCW

NetBeans
Eclipse
Bracketsなど

サイト+DB
完全同期

無料  △  いろいろバラバラに揃えないといけない。設定が面倒。
XAMPP NetBeans
Eclipse
Bracketsなど
サイトのみ? 無料  ×  
MAMP NetBeans
Eclipse
Bracketsなど
サイト+DB
DB同期不完全
無料  
WebMatrix オールインワン(内臓) サイト+DB
完全同期
無料 同期するにはサーバー側がWebMatrixに対応している必要がある
PhpStorm オールインワン(内臓) サイト+DB
完全同期
有料
○   

Hvper-V
+Docker

Eclipse 無料 × × 使いやすいコンテナがあれば良いのですが

 

 「ライトカスタム」は関数やスタイルシートをちょっといじるだけ、「本格カスタム」は独自の関数やスタイルをゴリゴリ追加して作り込むことを意味する。この表では本格カスタムに適した◎の環境が2つある。思うに、

アマチュアブロガーは VirtualBox+Vagrant+VCCW

お金を払える人は PhpStorm

を選ぶのがよさそうだ。

※:VirtualBox=仮想マシン管理ソフト、Vagrant=仮想マシンを作るソフト、vccw=Wordpressの開発に必要なソフトをまとめたソフトウェアパッケージ、WordMove=本番環境とローカルとの同期をとる為のソフト。VCCWに同梱されている。

 

デバッガについて

 開発に使うソフトにデバッガが付属しない場合は、表1のほかに Eclipse や NetBeans などのIDE(エディタ+デバッガ)が必要になる。CSSのスタイルカスタマイズには Brackets (エディタ)が便利なので使い分けたい。

 


Vagrant+VCCW設定のハマりどころ

 

環境構築の手順

  VirtualBox+Vagrant+VCCWの環境構築は基本的に次の流れになる(Window版)。

 

1.ターミナルをインストール(GitBash、Cygwinなど)

2.VirtualBoxをインストール(仮想マシンの管理ソフト)

3.Vagrantをインストール(仮想マシン)

4.VCCWをダウンロードして解凍&展開

5.VCCWに付属のdefault.ymlを上の階層にコピーしsyte.ymlにリネームして編集。Windowsのhostsファイルを編集

6.ターミナルを起動し、カレントディレクトリをVCCWを展開した場所に移動し、vagrant upを実行

7.wordpressがローカル環境に出来たことを確認する。

8.vccw展開フォルダの中にMoveFile.ymlが出来ているのでこれを編集する。

9.ターミナルからvagrant ssh で仮想環境に入り、契約しているレンタルサーバーとssh接続の設定をする。

10.sshエージェントを登録していったん仮想環境から抜ける。

11.再度vagrant ssh で仮想環境に入り、WordMoveが正常に動くことを確認する(wordmove pull –all)。

12.デバッガ(Eclipse 、 NetBeans など)をインストールし、デバッグ環境をセットアップする。

13.ブレークポイントで停止するなどデバッグが正常にできることを確認する。

 

 こうしてみると結構めんどくさい。「編集」と「セットアップ」の部分はお使いの環境に合わせる必要がある。これについては、ネット上に多くの情報があるのでここでは割愛する[1]

 7と11がマイルストーン。実際にやってみるといろいろ落とし穴がありそこにハマる。以下にハマりどころや失敗した場合のリカバリーの方法についてご紹介する。

 これらに時間をかけるのが勿体ないと思う人は、やはり PhpStorm が無難。

 

VagrantとVCCWのバージョンに注意

 本記事は次のバージョンを前提としている。

WIndows10、VirtualBox 5.2.8 vagrant 2.0.3 VCCW3.18.0 (PHP7以上)

 多くのソフトを組み合わせた構成は微妙なバランスの上に成立している。特にVagrant は安易に新しいバージョンに入れ替えない方がよい

 最新版を入れてみて動かない場合は古いバージョンにダウングレードする。VirtualBox 、Vagrant、 VCCWの古いバージョンは下記から入手できる。

VirtualBox  All branches でバージョンをクリックしたのち、上の行のreleasesリンクを開く。
Vagrant 拡張子msiとなっているものをダウンロードする。
vccw 左上にあるBranchボタンを押して tags タブをクリックする。

 

vagrant upでエラー(ゴミ掃除の手順)

 vagrant upが失敗したり、いきなりPCの電源を切るなどした場合は、ゴミが残って動作が不調になることがある。そんな場合のゴミ掃除の手順は次の通り。

(1)vagrant halt を実行してターミナルを抜ける。
(2)タスクマネージャーを起動し VirtualBox や Vbox 関係のプロセスを終了(残っていれば)。
(3)C:\Users\ユーザー名の下にある VirtualBox VMs の中身を削除(新たに追加されたものだけ)。
(4)vccwフォルダ下の .vagrant フォルダ を削除。

 

 ちなみに、仮想マシンからの正常な終了手順は次の通り。haltを忘れてPCの電源を切らないよう注意

 exit (仮想マシンを抜ける) → halt(仮想マシン終了) → exit (ターミナル終了)

 

 

 まずはvagrant upをやってこの画面を見ることが一つ目のマイルストーン。

 

 上の画面が見えたら VM VirtualBOXを開き、使っていないものがあれば削除する。

 

 

 

サイトが表示されない

 一つ目のマイルストーンで画面が表示されない場合は手順5のhostsの登録が間違っている。

C:\Windows\System32\drivers\etc\hosts

を開いて最後に

192.168.33.10 vccw.test

を追加する。hostsの編集は管理者権限でメモ帳などを開く必要がある(でないと保存しても結果が反映されない)。hostsをいったんコピーして編集したものをエクスプローラなどで上書きする形にすると簡単。

 プロキシ下では、

  インターネットのプロパティ – 接続 – ローカルエリアネットワーク(LAN)の設定

 を開き、プロキシを使用しないローカルアドレスに

  192.168.33.10;vccw.test

 を追記する。

 

 

サイトを表示させるとPHPのエラー画面が出る

 Wordpressにインストールされているプラグインのエラー。原因はPHPのバージョンが整合していない。基本的にホスト、開発環境、デバッガの3つで、同じバージョンを使うのが無難だ。

 VCCW3はPHP7以上しかサポートしないので、この画面を見たら本番環境のPHPバージョン7に上げることを検討してほしい。

 

 

 左の Deprecated: Assigning the return value of new by reference is deprecated in・・はワーニング。

 プラグインのデバッグが必要ないなら、wp-config.phpでWP_DEBUGを false にすると見えなくなる。

 

 以下の編集をしておくとこの設定を最初から falseにできる。

site.yml を開いて wp_debug のところをfalse に書き換える。

(site.ymlの例)

#
# The values of wp-config.php
#
force_ssl_admin: false
wp_debug: false
savequeries: false

 

wordmoveが失敗する(sshでエラー)

 Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

 などのエラーが出る場合は、鍵の認証か、sshエージェントへの登録ができていない。これは次の手順になる。

vagrantにログインして鍵を作成する。

$ vagrant ssh 
$ ssh-keygen -t rsa 鍵のパスワードを入力

公開鍵をホストのサーバーに転送

$ scp ~/.ssh/id_rsa.pub ***@xxxx.ne.jp:~/.ssh/authorized_keys
ホストサーバのパスワードが求められるので入力。(***@xxxx の部分はホストのユーザーネーム@ホストネーム。サイトのドメインでないので注意)

<補足>
 エックスサーバーの場合は、転送せずにサーバーパネルを開いて次のコマンドで表示される内容をコピペする(vi ~/.ssh/id_rsa.pub)。用が済んだら削除する (rm ~/.ssh/id_rsa.pub)。
 公開鍵を他のソフトと共用する場合は、上記の方法ではなくサーバーパネルで鍵を作ってダウンロードした****.key をwordpressフォルダにコピーし、 mv /var/www/html/****.key ~/.ssh/id_rsa とする方が便利。

 

アクセス権限変更

$ chmod 600 ~/.ssh/id_rsa.pub (これだけでダメな場合は chmod 700 ~/.ssh )

 

vagrantにログインした状態で鍵をsshエージェントに登録する(仮想サーバーにログインする度に実行が必要)

$ ssh-agent bash
$ ssh-add 鍵のパスワードを入力
$ cd /vagrant

 

 Warning: Permanently added ‘[****.xsrv.jp]:10022’ (ECDSA) to the list of known hosts.

 などというメッセージが出る場合は以下を実行してknown_hostsを削除する。

$ rm ~/.ssh/known_hosts

 

プロキシが通らない

  Vagrant のプロキシは以下で通る[2]。最初にターミナルで以下を実行する。

$ export http_proxy="http://xxx.***.***.***:8080"
$ export https_proxy="http://xxx.***.***.***:8080"
$ vagrant plugin install vagrant-proxyconf

カレントディレクトリのVagrantfile を開いて
Vagrant.configure(2) do |config| のすぐ下に以下を追加する。

if Vagrant.has_plugin?("vagrant-proxyconf")
 config.proxy.http = "http://xxx.***.***.***:8080/"
 config.proxy.https = "http://xxx.***.***.***:8080/"
 config.proxy.no_proxy = "localhost,xxx.0.0.0/8"
end

(xxx.***.***.*** の部分はプロキシのアドレス)

 企業のPCは大抵プロキシ下にある。プロキシ下ではネットの手順を参考にしてうまく行かないのはもちろん、試行錯誤に時間ばかりかかって一向に成果が上がない状況に陥りやすい。ここはオールインワンの有料ソフト(PhpStormなど)を使うことを検討してほしい。

 

スポンサーリンク

デバッグ設定のハマりどころ

 

ブレークポイントで止まらない

 syte.ymlの以下の記述を確認する。

 xdebug.remote_host: 192.168.33.1

正確なアドレスは、

<?php phpinfo(); ?>

とだけ記述したphpinfo.phpファイルを作ってwordpress以下に置き、vccw.test/phpinfo.php とすることで確認できる。

 syte.ymlを後から編集したら vagrant provision を実行して手順7に戻る。

 

~NetBeansが接続を待っています・・・

 xdebugで使うポートがファイヤーウォールでブロックされている

 VCCWをインストールしてもxdebugで使うポートを開放してくれないので自分で定義する必要がある。

Windows10ではxdebugで使うポート(デフォルトでは9000)の通信を許可する受信の規則(TCP)をファイヤーウォールに追加する。

 

netbeansの設定画面NetBeansの設定は文献3がわかりやすい。左は例。

 

 NetBeansのPHPデバッグの設定を変更したら、一度NetBeansを終了させて再起動させないと反映されないので注意。

 


Eclipse(Oxygen)の設定

 ネットにあまり充実した情報がない。ちょっとややこしいが、次のようにすればできる。以下はC:\vccw\wordpressにデータがあり、vccw.testでローカルサイトを公開している場合の例。

(1)プロジェクトを追加する

File – New – PHP Project 
Project name = wordpress-test(任意)
Create project at existing workspace = C:\vccw (wordpressフォルダより一つ上の階層を指定
PHP Version (使っているものを設定)

※:Eclipse起動時のワークスペースはここ以外の適当な場所に設定しておく。

(2)デバッグの構成を設定

Run – Debug Configurations…

–Debug Configurationsダイアログが開く–

PHP Web Application を選択状態にして Newボタン(左上のアイコン)を押す
Name =vagrant-debug (適当に)
PHP Server の欄で [New]

–PHP Server ダイアログが開く–

Server Name =vagrant (適当に)
Base URL = http://vccw.test
Document Root: (空欄)
[next >]
Debugger = XDebug (セレクト)
Connection Setting = 9000
[next >]
Path Mapping  [Add]
Path on Server = /var/www/html
Path in File System = C:\vccw\wordpress

–Debug Configurationsダイアログに戻る–

PHP Server = vagrant (先ほど設定した名前になっていることを確認)
File = /wordpress-test/wordpress/index.php  (Browse…を押し、ツリーを展開し、セレクト)
URL Auto Generateのチェックを外して右の欄を /index.php とする
Debuggerタブを開いてBreak at First Lineのチェックを外す。(付けているとデバッグ起動のたびに最初の1行目で止まる)

(3)プロジェクトのプロパティを設定

wordpress-testを右クリック してProperties(一番下)を実行
Resource のText file encoding を Other にしてUTF-8としておく。
ツリーからPHP – Debug を展開。
Enable project specific settings にチェック
PHP Server = vagrant
Base Path: /index.php

 

 EclipseはNetBeansより高機能だが英語。両方試してみて使いやすい方を選んで欲しい。

 ちなみに、Eclipseをインストールする場合は先に  Java SE Development Kit[5] を入れる必要がある。

 

 

スポンサーリンク

Vagrant+VCCWの使いこなし

 

起動時の入力省力化

 vagrant up や vagrant halt の入力はターミナルに次の記述をしておくことで省略できる(以下はgitbashの場合)。ターミナルを開くと常に実行されるので注意。

$ vi ~/.bash_profile

echo "vagrant up..."
vagrant up
vagrant ssh

$ sh -c “echo vagrant halt >> ~/.bash_logout”

 

 上記の最後はターミナルをexitするとき vagrant halt を自動実行する。
 ターミナルの起動もショートカットにしておいて作業フォルダーにVCCWのディレクトリを書いておくと便利だ。

 

 

wordmove実行時のパスワード入力省力化

 仮想マシンの ~/.bash_profile に次のコードをを書いておくと、毎回聞かれるパスワード入力をしなくて済む。

$ vagrant ssh
$ sudo apt-get update
$ sudo apt install -y expect

$ vi ~/.bash_profile で最後に以下のコードを追加[4]。i で編集モードに入り、一番下にカーソルをもっていって、Shift+insを利用してコピペする。抜ける時は esc を押して :wq 。

eval `ssh-agent`

KEY_FILENAME='id_rsa'
PASSPHRASE='****'

expect -c "
 set timeout -1
 spawn ssh-add $HOME/.ssh/$KEY_FILENAME
 expect {
 \"Enter passphrase for\" {
 send \"$PASSPHRASE\r\"
 }
 }
 expect {
 \"denied\" { exit 1 }
 eof { exit 0 }
 }
 "

cd /vagrant

****の部分は鍵を作った時に入れた鍵のパスワード。

 いったんexitで抜けて vagrant ssh として入り直し
Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa)
とかいうメッセージが見えたら成功。

 なお、~/.bash_logoutに ssh-agent -k は記述しないこと(次回から vagrant up が正常に機能しなくなります)。

 

 

複数の仮想マシンを作る

 次の方法で作れる。大きな修正を加えるときのテストに便利だ。

(1)ダウンロードしたVCCWのフォルダ一式を追加コピー(例:vccw2.test などとする)
(2)provisionフォルダからdefault.ymlを一つ階層上にコピー
(3)default.yml を site.ymlにリネーム
(4)site.yml を開いて hostname と ip のところを他の仮想マシンと重複しない値に編集
(例)
hostname: vccw2.test
ip: 192.168.33.12

(5)Windowsのhostsに編集した値を追記する(上記参照)

 

 vagrant up vagrand halt は、それを実行したディレクトリ下の仮想マシンについてのみ機能し、全体に影響を及ぼさない。

 sshの鍵はそれぞれの仮想マシンの下で個別に重複しない名前の鍵を作成するか、どこかで1個作成し、他の仮想マシンにコピーして使い回しする。キーのコピーは共有フォルダ /var/www/html を介して行える。

 

(同じ鍵を使いまわしする例)

いまある秘密鍵をローカルの共有フォルダにコピー

$ cp ~/.ssh/id_rsa /var/www/html

エクスプローラーなどを使ってwordpressフォルダ下にできた id_rsa を別の環境の同じフォルダにコピー。
コピー先の仮想マシンに入って次を実行。

$ mv  / var/www/html /id_rsa ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa

 


 

<参考購入先>
WordPress開発 参考書
WordPress 初心者向けの本

<参考文献 >
1.XAMPPはもう古い?!VCCWでWordPressローカル開発環境を構築する方法
2.vagrant-proxyconf で行う ゲストOSへのかんたんProxy設定
3.Vagrant vccw で NetBeans からリモートデバッグをやってみる
4.ssh-agent と expect で ssh のパスフレーズ入力を自動化
5. 
Java SE Development Kit

<関連サイト>
vccw