Wordmove を WSL で試したら、Cocoon というテーマでハマった話

フロントエンド

皆様どうも、こんにちは!
こまりの意識低い系プログラマ、桑木です。

最近、なぜかWordPress案件を立て続けに受けたので、今後も続くようなら作業の定型化が必要だと思いWordmoveを導入しました。とても便利なツールですが、導入途中にしょうもない理由でつまずいたので、その顛末をお話ししたいと思います。Wordmoveは動いてるけどCocoonだけ転送が上手くいかないという方は最後だけ読んでください。

Wordmoveとは

一言でいうと、WordPress用のデプロイ支援ツールです。開発環境にWordPressでサイトを構築した後、本番環境への移行に苦労した事はありませんか? デプロイ後に変更が必要になったことは? 公開前にお客さんにチェックして貰ったり記事を書いてもらったりするときは? そんな悩みを解決! コマンド一発でデータを別の環境へ。というコンセプトのツールです。

まぁ、ディレクトリ構造そのままにファイルを全部コピーして、データベースもURLを置き換えてダンプを流し込むだけなんですけどね。とは言え、それを毎回手作業ではやりたくないですからね。間違えそうですし。特にPHPのシリアライズされたオブジェクトは。

というわけで、いざ導入

しようと思ったら、Windowsはサポートしてない感じなんですかね……? いくつかインターネット上の記事を読んでみましたが、どれもVCCWでLinuxの仮想環境を構築した上で、その仮想環境中のWordPressに対して同じ仮想環境中でWordmoveを使用しているようです。

既にWindows上の開発環境でほぼ出来上がっているんですけど、今回は今まで通りに手動で移行して、次からはVCCWで構築した方が良いのかな? とは言え、Windowsでできるならそのままやりたいですよね。次からもWindowsで構築するでしょうし。

Windows10 で Wordmove が動くまで

まずは、WSLをインストールします。既にWindows10限定の方法になっていますが気にしたら負けです。ディストリビューターはUbuntuとかで良いんじゃないですかね。私はそうしました。

WordmoveそのものはRubyで書かれていてインストールにはRuby2.4以降が必要です。WSLインストール直後の状態ではaptのリポジトリにRuby2.3までしか登録されていないので、リポジトリに最新のRubyを登録します。ついでにPHPも7.0までなので登録します。念のために説明すると、apt はUbuntuが標準で採用しているパッケージ管理ツールです。便利になったものですね。

sudo add-apt-repository ppa:brightbox/ruby-ng
sudo add-apt-repository ppa:ondrej/php
sudo apt update

そしてWordmoveをインストールしますが、Wordmove自体はRubyGemsというRubyのパッケージ管理ツールでインストールするので、Rubyと一緒にRubyGemsもインストールします。また、データベースのダンプにmysqldump、URLの置換にWP-CLIを呼び出しているので、これら必要なソフトウェアもインストールします。

sudo apt -y install ruby2.5 ruby2.5-dev rubygems-integration php php-mysql php-curl mariadb-client
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
sudo gem install wordmove

インストールできているか確認します。(この記事の執筆時点ではRuby2.5が最新だったので2.5を指定してインストールしました。apt list ruby* とかでインストール可能な最新のバージョンがわかります)

ruby --version
gem --version
wordmove --version
php --version
wp --version
mysqldump --version

これでエラーっぽいものが出てこなければ使えると思います。

上には必要な部分だけ書きましたが、実際はバージョンが低いだのコマンドがないだの逐一出てくるエラーを見て、その都度必要なパッケージをインストールしてやる感じでした。Wordmove自体はどうやらほとんど外部のコマンドを実行しているだけなので、Windowsネイティブでも必要なコマンドさえ用意してやれば動きそうな気がします。もうWSLで動いてるので特に試しませんけども。意識低い系なので。やるとしたらrsyncが鬼門かな? と思います。

それからそれからどうしたの

「使えると思います」とか高らかに宣言したものの wordmove push --all した後、ブラウザからアクセスしてみたらデザインが崩壊していました。ちゃんと wordmove init で movefile.yml を生成して、localとproductionを設定してSSHも通るようにして……。ログを見てもエラーらしい表示もなく、正常終了しているようにしか見えないんですけどね? 転送先のデータベースを検索してみたら、開発環境のURLが残って居たのですが、URLではなくGUIDという物で問題ないそうです。

WSLとか変わったことやらないで素直にVCCWでやれば良かったかなぁ……、とか若干後悔しつつも転送されたディレクトリを見比べてたら、転送されてないディレクトリがありますよね。WordPressのCocoonというテーマ、すごく良くできてるテーマなんですけれど、テンプレートか何かの意味でtmpというディレクトリ名を使ってるんですよね。決して一時ファイルは入っていません。

そして movefile.yml の初期値で転送しないファイル(exclude)がいくつか設定されてますけど、’tmp/*’って指定されてますよねー……。

tmp と言えばテンポラリの略だと思うじゃん

というわけで、movefile.yml から ‘tmp/*’ の指定を削除したら、正しく転送されました。デザインも崩壊してません。はい、本当にしょうもない理由でした……。

何はともあれWordmoveが使えるようになったのは大きいですね。今のところ次のWordPress案件は決まっていませんが、開発環境と本番環境を楽に行き来できるのは便利です。後は転送がただの上書きじゃなくて Git みたいにマージやバージョン管理ができれば良いのですが……、Wordmoveとの連携でできたりしませんかね?