WP Pusher による WordPress テーマの自動デプロイ

WP Pusher というプラグインを導入し、GitHub のレポジトリの master ブランチに push したらサイトの WordPress テーマが自動的に更新されるという運用にしてみた。

seckie/likealunatic: Like@Lunatic website source code

サイトの静的ファイルがテーマディレクトリの外に散在していた状態だったから、それもできなかったわけだ。今回自作テーマを大幅に整理したことで、テンプレートも静的ファイルもすべて1つのテーマフォルダに収めることができた。(まあ当たり前の状態になったというべきか…)

GitHub の Webhooks による自動更新は以前からやりたかったのだが、CI ツールを使ったことのない僕にはハードルが高かった。しかし調べてみると、プラグインでそういうものがある、という情報があった ので導入してみることにした。該当記事の紹介によると、ビルドを Travis CI で行い、その後 dist ブランチに自動的にプッシュ、それを Webhooks で拾って本番にデプロイ、というフローになっている。しかし僕の環境だとビルドはローカルでやっているので Travis CI を使うフローは不要になる。シンプルに GitHub と WP Pusher だけの形で実現できた。

ただしハマったポイントが一つある。

WP Pusher は公式プラグインディレクトリに置いていないので、FTP を使ってアップロードした。すると、該当ファイルとディレクトリのオーナーは当然その FTP ユーザーになる。それによってパーミッションの問題が発生。

このサイトは Nginx + WordPress で動作している。 Nginx を使っている場合、wp-content ディレクトリなどに対して nginx ユーザーに書き込み権限を与えておけば、 WordPress (PHP) から自動更新やらプラグインの追加削除が行えるようになる。そうでない場合、WordPress は FTP 経由でファイルを出し入れしようとして FTP 情報を入力するプロンプト画面を表示する。
WP Pusher による自動デプロイも例外ではなく、パーミッションが適切でないと WordPress がそのページを表示しようとしてしまい、正しく通信できないらしい。

ちなみにエラーは GitHub の 該当 Webhook のページ下方に “Recent Deliveries” というセクションがあるのでそこで確認できる。 Webhook を設定すると通信確認のためなのか Recent Deliveries に1つ通信が記録される。それがエラーになっていた場合、Response が “500” となっているはず。Body のセクションを確認すると「FTP credentials を入力してください」という感じの HTML が出力されている。

GitHub Webhook setting screen
これは正常な状態。

今回のケースでは wp-content 以下すべてのファイル、ディレクトリオーナーを nginx ユーザーに変更したら解決した。 ちなみにこのことは WP Pusher Troubleshooting のページにもちらっと記述があった…。なんだろうこの徒労感。

参考

WordPressに移行

当サイトのCMSをMTOS4からWordPressに移行しました。

今年は仕事においてMTでサイトを構築する機会に恵まれたおかげもあり、MTはどう使えばいいのか割と勝手がわかってきた、と思っています。それなりにすらすらとテンプレートも書けるようになり、プラグインもこれとこれを使うってやつがある程度決まってきたので、不自由する機会はあまりなくなりました。
# プラグインを自分で書いて云々っていうレベルには遠く及びませんが

MTがバージョン5になってよりCMSとしてよくなった感があるのだけれど、優等生になってしまった気がしてもう仕事で使えさえすればいいや、という気分になってしまった、と。そこでプライベートではWordPressやろうかってことで移行に至りました。

MTOS4からの移行では、MTOS4から「ブログのエクスポート」を行い、新規インストールしたWordPressのインポート機能で「Movable Type と TypePad」を選択し、記事とコメントのインポートを行いました。

ここでいくつか不都合が発生。

まず1点は、記事毎のパーマリンクの設定(WordPressでは「スラッグ」と呼ぶ)にMTでいう「出力ファイル名(MTEntryBasename)」が引き継がれないこと。「出力ファイル名」の情報は飛んでしまい、代わりにスラッグには記事のタイトルと同じテキストが設定されます。なので記事のタイトルに日本語が使われているとスラッグにも日本語が入ってしまうわけで・・・、パーマリンクの設定をカスタマイズして%postname%を使用していると、URLはかなりひどいことになります。

2点目は「タグ」の設定が引き継がれないこと。WordPressにも「タグ」がありますがここにはMTでいう「キーワード」フィールドの値が引き継がれてしまいました。「タグ」も「キーワード」も役割が似通っているとも言えるのでWordPressではこれを一本化しているのには納得が行きますが、かといってなぜ「タグ(MT)」を「タグ(WordPress)」に引き継がないのか・・・。これは納得がいかない!

このブログは幸いにも(?)記事の総数が大した量ではないため、全て手動で入力しなおすことで解決しましたが。その際、記事一覧の「クイック編集」の機能が重宝しました。これがなかったら嫌になっていたかも・・・。

テーマもオリジナルではなく適当なものを拝借していじったやつだし、まだまだWordPressがなんのこっちゃ分からんという感じなので、ちょっとづつ勉強していきたいと思います。でもまぁ、来年の話ですね(笑)