経緯
このブログは元々 http://ryo511.blog.jp/ というURLでlivedoor Blogのサービスを利用して運営していました。livedoor Blogは結構優秀なサービスで、「***.blog.jp」ドメインが使えたり、アクセス解析・SEO・集客も結構強かったりします。
ただ、一点、「Markdownで投稿できない」という大きな不満があり(※)、Markdownで投稿できるブログサービスも色々検討したのですが、Wordpressが一番無難かな、という結論に至りました。
※:MarsEdit等の外部エディタを使うことで、Markdownでの投稿はできますが、こちらはこちらでコードの整形が上手くできないという問題がありました。
バックエンドはさくらVPS・AWS・Digital Ocean・wordpress.comあたりも検討しましたが、「基本無料」かつ「広告無し」という点で、herokuを選択しました。
WordPressをherokuに設置する
herokuにはレンタルサーバーやVPSとは異なる、独特の作法があります。一般的なWordpressの使い方を若干アレンジする必要があります。herokuでWordpressを動かす具体的な方法については、以下の記事が参考になります。
WordPressのブログをherokuで立ち上げて、何かメリットあるの?
アカウントの作成からデプロイまで、ひと通りの手順が載っており、大変参考になる記事です。注意が必要なのは、2013年5月の記事なので、若干情報が古い、ということです。
2013年5月の時点では、herokuはオフィシャルにはPHPをサポートしていなかったため、BuildPackという仕組みを使ってPHPを使えるようにする必要がありました。しかし、2014年4月に、herokuはPHPのサポートをアナウンスし、2014年8月現在ではBuildPack無しでもWordpressを動かすことができます。
herokuのPHPサポート
herokuでオフィシャルにサポートされているPHP実行環境は、PHPの最新安定版(現時点ではPHP5.5.15)及びHHVMの最新安定版(現時点ではhhvm3.20)です。HHVMは、Facebookが開発したPHPの実行環境で、PHPコードがそのまま実行できる上、実行速度が向上する、という点に特徴があります。
WordPressの場合、HHVM対応を見越したコードが書かれているわけではないので、全機能が100%動作する保証はありません。とはいえ、現在のところ不具合には遭遇していないので、このブログはHHVMで動かしています。
HHVMを使う
herokuでHHVMを使うには、 上で紹介した記事 の手順を若干アレンジする必要があります。
まず、herokuでアプリを作る時(heroku createコマンドの実行時)にBuildPackを使用していますが、これは不要です。BuildPackを使用しているか確認するためには、以下のコマンドを実行します。
heroku config --app APP_NAME
ここで、「BUILDPACK_URL=git://github.com/iphoting/heroku-buildpack-php-tyler.git」といった文字列が表示されたら、BuildPackを使用しています。BuildPackを使用しないようにするには、以下のコマンドを実行します。
heroku config:unset BUILDPACK_URL --app APP_NAME
BuildPack設定を削除すると、herokuは自動的にデフォルトのPHPを使用するようになります。次に、HHVMを使うための設定を行います。Wordpressのディレクトリに移動して、「composer.json」という名前で以下のファイルを作成します。
{
"require": {
"hhvm": "*"
}
}
作成できたら、このファイルをgit addしてcommitしてgit push heroku masterすれば、自動的にHHVMが使用されるようになります。
ネット上の情報では、herokuでHHVMを動かす際の設定として「”hhvm”: “3.0.1”」のように特定のバージョンを指定しているものがありますが、この書き方ではherokuが提供するHHVMのバージョンが上がった際にバージョンが特定できず、デフォルトのPHPが使用されてしまいます。「*」と書くと、「バージョン指定なし」となり、HHVMの最新版が使用されます。
なお、PHP/HHVMの特定のマイナーバージョンを指定する場合、「”php”:”~5.5.15″」としておけば、「PHP5.5系で、5.5.15以上のバージョン」という指定になります。マイナーバージョンが上がると後方互換性が失われることがあるので、安全を期するならこの記法を使いましょう(この記法はherokuの公式ドキュメントでも推奨されている書き方です)。
Nginxを使う
HHVMを使う設定を行いましたが、herokuのデフォルトではWebサーバーはApache 2.4が使用されます。さらなる高速化を求めて、Nginxを使用する設定を行います。
WordPressのディレクトリに移動して、「Procfile」という名前で以下のファイルを作成します。
web: vendor/bin/heroku-hhvm-nginx
あとは、このファイルをgitにコミットして、herokuにpushすれば、自動的にNginxが使用されるようになります。
ここまでの手順を適用すると、herokuのダッシュボードでは以下のように表示されるはずです。
以上で、HHVM+Nginx環境のセットアップは完了です。
Markdownを使えるようにする
まだ、引っ越しの理由であった「Markdownが使えない」は解消されていません(WordpressはMarkdownでの投稿は公式サポートしていません)。そこで、プラグインを使用します。
WordPress用のMarkdownプラグインにはWP-MarkdownとJP Markdownがありますが、Wodpressの最新版(3.9.2)に対応している点と、最終更新日が新しい(2014-08-03)点を考慮して、 JP Markdown の方を使用します。
インストールは、プラグインをダウンロードして解凍し、解凍後のフォルダを丸ごとWordpressの wp-content/plugins ディレクトリの中に置くだけです。後は例のごとくherokuにpushすれば、Wordpressの管理画面のプラグイン一覧にJP Markdownが現れるので、これを有効にすればOK。
なお、編集はMarkdownで行えますが、保存後はHTMLに変換されます。
画像アップロード
herokuのインスタンスは定期的に再起動されます。そのため、画像ファイルをアップロードするには外部サービスを利用する必要があります。
このブログでは、 Cloudinary というサービスを試験的に利用しています。Wordpressプラグインがあるので、簡単に使い始められます。
Cloudinaryのセットアップに関しては、 Wodrpress on heroku というスライドが参考になりました。
livedoor Blogからの記事移行
WordPressは、Movable Type形式であれば普通にインポートできます。livedoor Blogのエクスポートは有料機能で、かつ、どのような形式で書き出されるか分からなかったので、FC2ブログを経由するという裏技を使いました。
FC2ブログのお引越し機能は、通常のブログサービスのインポート機能とは異なり、Webページのスクレイピングを行って記事データを取得します。また、FC2ブログはMovable Type形式のエクスポート機能を無料で利用できるので、
- FC2ブログのお引越し機能で、livedoor Blogから記事データを抜き出す
- FC2ブログのエクスポート機能でMovable Type形式の記事データを書き出す
という手順でインポートするための記事データを作成しました。
ただ、改めて調べてみると、有料プランで書き出されるデータ形式は Movable Type形式のようです(公式ヘルプ)。livedoor Blogの書き出し機能は月額300円程度で使えるので、有料機能を使っても良かったですね。。。
感想
PaaSをちゃんと利用するのはこれが初めてだったのですが、herokuは非常に便利ですね。多少クセはあるものの、「基本無料」の魔力には逆らえません。今はWordpressだけですが、アプリケーションを動かすのにも使ってみようと思います。
また、Wordpressは食わず嫌いをしていましたが、管理画面の使いやすさと、情報の豊富さはとても素晴らしいです。
コメントをどうぞ