facebookアプリのheroku上への構築手順と、開発言語の検討

facebookアプリをherokuに構築するのが恐ろしく簡単だったメモ。ついでにheroku上でfacebookアプリを作るなら何で作ればよさそうかも載せておいた。

前準備としてherokuのアカウントを取得しておく。

facebookのdeveloperページからherokuにアプリを設置

https://developers.facebook.com/からログインして、「新しいアプリケーションを作成」からアプリを作成する。すると作成したアプリの基本設定画面に遷移する。画面中段に以下の表示。

f:id:asanoboy:20120201003358j:plain

そのままGet Startedで進む。

f:id:asanoboy:20120201003756j:plain

今の環境だとherokuしか選択できないようなので、Next!

f:id:asanoboy:20120201004348j:plain

次に言語環境(現状はPHP、Node.js、PythonRuby)とherokuのID(E-mail アドレス)を入力して「作成」に進む。

f:id:asanoboy:20120201004549j:plain

数秒の間があって、Successページが表示される。Go to appを押すとherokuで作成されたページが表示される。

ちなみにすべての環境で試したところ、PHP、Node.jsの場合はアプリのインストールページにリダイレクトされるのだが、PythonRubyの場合は以下のようなデフォルトの静的ページが表示されるだけっぽい。

f:id:asanoboy:20120201011444j:plain

この辺りはPHPerに優しいfacebookに譲歩したherokuってことなのかな。っていうか、herokuのドキュメントはPHPの開発について全く触れられてないんだが、どうなってるんだろ?

せっかくなのでherokuにどんなアプリがデフォルトでデプロイされたか見てみる。ソースコードの取得はherokuの管理ページからアプリのGitリポジトリの場所を確認して

$ git clone git@heroku.com:hoge-hoge-1234.git

とかすればよい。

PHP

どうやらルートディレクトリのindex.phpがエントリポイントになっているみたい。httpのレスポンスヘッダー見るとApacheがheroku上で動いている様子。なるほどね。

Apacheのドキュメントルートでしか開発できないとなると制約が出てきて使いづらそう。今後の展開に期待しつつ、当面はPHPは保留だな。

python

チェックアウトしたrequirements.txtを見る。

Flask==0.7.2
Jinja2==2.6
Werkzeug==0.7.1
simplejson==2.2.1
wsgiref==0.1.2

とある。次にexampleapp.py

FBAPI_APP_ID = os.environ.get('FACEBOOK_APP_ID')

お、環境変数facebookのapp_idが設定済み?すごい!他にもいろいろfacebook APIがらみの関数が定義してあるので何かと使えそう。とはいえドキュメントが見当たらないので、当面は通信部分も含めて実装する必要がある。

Node.js

当面使う予定はなかったけれど一応見てみた。というのもfacebook公式SDKのうちheroku上でまともに動かせそうなのが、PHPJavascriptしかない。heroku上のPHP開発運用は不明点もあるので、もしかしてNode.jsが一番環境整っているのかもと思ったため。

というわけでpackage.jsonを見てみる。

{
  "name":        "facebook-template-node",
  "version":     "0.0.1",
  "description": "Template app for Heroku / Facebook integration, Node.js language",
  "dependencies": {
    "ejs": "0.4.3",
    "everyauth": "0.2.18",
    "express": "2.4.6",
    "facebook-client": "1.3.0",
    "facebook": "0.0.3",
    "node-uuid": "1.2.0",
    "socket.io": "0.8.4"
  }
}

おー、facebookSDKっぽいものが入ってる。これはもうNode.js時代が幕を開けているといっても過言ではないな。Pythonでやろうと思っていたが、これはNode.jsでやったほうが楽そうだ。

RubyはたぶんPythonと同じ扱いだろうということで割愛。以上。