読者です 読者をやめる 読者になる 読者になる

初めてのHeroku&PHP、つまり飯豊まりえさんのInstagramが最高

http://instagram.com/iitoyomarie
世界は飯豊まりえで回っている。そう言っても過言ではないほど、飯豊まりえさんのInstagramで世界は変わりました。
飯豊まりえさんのInstagram動画がとにかくすごい。
もし僕が飯豊さんと同い年ぐらいの女子だったら、絶望に叩きのめされるぐらい可愛い。
どうあがいても敵わないなと思わせる可愛さがある。
そんな飯豊まりえさんの動く姿をずっと見ていたいなと思って、初めてHerokuで作ってみました。


Endless Movin Iitoyo Marie
http://endlessmoviniitoyomarie.herokuapp.com/


まずはHerokuに登録してアプリケーション名決めて、そうするとgit cloneしなさいよと言われたのでします。
https://www.heroku.com/
まあ、git cloneしても何も無いのでそこから作り始めます。
今は仕事でPHPしか触っていないのでHerokuでもPHPですよ。
PHPだと今流行りはComposerらしいです。
http://getcomposer.org/
オフィシャルの通りにやろうとしたらエラーが出たので以下のようにインストール。

curl -s https://getcomposer.org/installer | php -d detect_unicode=Off


続いてcomposer.jsonを編集します。
今回はSlimというマイクロフレームワークとMongoDBを使ってみます。
http://www.slimframework.com/
http://d.hatena.ne.jp/brtRiver/20120729/1343573858
https://github.com/alexbilbie/MongoQB
調べつつ以下のように。

{
    "require": {
        "slim/slim": "2.*",
        "alexbilbie/mongoqb": "*"
    }
}
php composer.phar install

でvendors以下にそれぞれのライブラリがインストールされます。便利すぎる。。
Slimだとtemplates以下にテンプレートを置いてrender('index.php')のように描画できます。


HerokuのMongoDBはMongoHQを使いました。
MongoHQへの接続は環境変数のMONGOHQ_URLに保存されます。
これを本番ではMONGOHQ_URLを読み込み、開発環境ではローカルのMongoDBに接続するようにしています。
また、コミットしたくない系の設定情報はheroku config:addで追加です。


後はちょちょっとデータ作ってMongoDBに保存して、ローカルで確認したらHerokuにpushします。
本番用のデータはローカルのMongoDBをダンプして、そのまま本番用にインポートします。

mongodump -h localhost:port -d dbname -o dumpfile
mongorestore -h mongohq_url:port -u username -p password -d dbname dumpfile

超楽。


残るはデプロイです。
Herokuは公式にはPHPをサポートしてないよーと言ってるけど、ルートディレクトリにindex.phpが置かれていると自動でPHPと判断してPHP用のデプロイをしてくれます。超頭いい。しかしPHPのバージョンが5.3系でちょっとこれは…という感じなのです。
そこで有志がBuildpackを作成してくれています。
調べてみると5.4でNginxとMongoDBも使えるBuildpackがあったのでそれを使わせてもらいました。
https://github.com/ilanco/heroku-buildpack-with-mongodb

heroku config:set BUILDPACK_URL=https://github.com/ilanco/heroku-buildpack-with-mongodb

それからconfディレクトリを作ってそこにnginx.conf.erbを置いて好きなように編集します。
参考
http://tkyk.name/blog/2012/11/28/php-on-heroku/


最後にpush

git push heroku master
heroku open

で確認です。


簡単!!(実際簡単じゃなかったけど!!)
実はMongoDBが含まれているBuildpackを見つけられなくて、いろいろ試行錯誤して最終的に自分でBuildpack作ろうかってところまで考えたのだけど、GitHubのNetwork Graphを丁寧に調べてみたらなんとか見つかってホッとしてます。
https://github.com/heroku/heroku-buildpack-php/network
いや、PHPのバージョン的にはもっと新しいのがいいんですがね。


ということで飯豊まりえさん最高です。