タグ別アーカイブ: heroku

herokuにWordPressを立てた

経緯

このブログは元々 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を使用しているか確認するためには、以下のコマンドを実行します。

ここで、「BUILDPACK_URL=git://github.com/iphoting/heroku-buildpack-php-tyler.git」といった文字列が表示されたら、BuildPackを使用しています。BuildPackを使用しないようにするには、以下のコマンドを実行します。

BuildPack設定を削除すると、herokuは自動的にデフォルトのPHPを使用するようになります。次に、HHVMを使うための設定を行います。Wordpressのディレクトリに移動して、「composer.json」という名前で以下のファイルを作成します。

作成できたら、このファイルを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」という名前で以下のファイルを作成します。

あとは、このファイルを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形式のエクスポート機能を無料で利用できるので、

  1. FC2ブログのお引越し機能で、livedoor Blogから記事データを抜き出す
  2. FC2ブログのエクスポート機能でMovable Type形式の記事データを書き出す

という手順でインポートするための記事データを作成しました。

ただ、改めて調べてみると、有料プランで書き出されるデータ形式は Movable Type形式のようです(公式ヘルプ)。livedoor Blogの書き出し機能は月額300円程度で使えるので、有料機能を使っても良かったですね。。。

感想

PaaSをちゃんと利用するのはこれが初めてだったのですが、herokuは非常に便利ですね。多少クセはあるものの、「基本無料」の魔力には逆らえません。今はWordpressだけですが、アプリケーションを動かすのにも使ってみようと思います。

また、Wordpressは食わず嫌いをしていましたが、管理画面の使いやすさと、情報の豊富さはとても素晴らしいです。