Erlang製のWebフレームワークMochiWebをさらっと触ってみたでござるの巻

参考にしたのはVoluntasさんよりご紹介頂いたPragmatic Bookshelfの「Erlang in Plactice」にあるムービーの「Episode 6: Adding REST Support with MochiWeb」です。
有料(5ドル)ですが、個人的には5ドル払う価値は十分にあると思います。

では。

MochiWebの準備

まずはmochiwebをダウンロード、コンパイルします。ムービーではgooglecodeからダウンロードしてましたが、今はGithubに移ったようなのでこちらから落とします

$ git clone git://github.com/mochi/mochiweb.git

あとはmochiwebのディレクトリに移動してビルド。

$ cd mochiweb/
make

以上w

超簡単なWebアプリを作る
何事も最初はHello Worldです。
というわけでやってみましょ(๑◕∀◕๑)

mochiwebをビルドしたディレクトリから出て、同じ階層に"hello_mochiweb"というディレクトリをつくりましょ。

$ cd ..
$ mkdir hello_mochiweb
$ cd hello_mochiweb

そしてそこに "hello_mochiweb.erl" というファイルを新規で作って編集します。

$ emacs hello_mochiweb.erl &

ソースは以下の通り。

-module(hello_mochiweb).
-export([start/1, stop/0]).
-define(CONTENT, <<"<html><title>Hello Mochiweb!</title><body>Hello! MochiWeb!</body></html>">>).

start(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun(Req) -> Req:ok({"text/html", ?CONTENT}) end}]).

stop() ->
    mochiweb_http:stop().

ほぼムービーのコードそのままでごめんなサイ(*_*)
これをErlangノードを起動してコンパイルし、起動してみます。Erlangノード起動時にmochiwebのebinディレクトリをパスに追加する為に"-pa ../mochiweb/ebin" を追加しています。

$ erl -pa ../mochiweb/ebin

あとはノード内でコンパイルして起動

1> c(hello_mochiweb).
{ok,hello_mochiweb}

2> hello_mochiweb:start(9999).
{ok,<0.38.0>}

引数として与えた9999でポートオープンしている筈なのでブラウザでアクセスしてみます。
http://127.0.0.1:9999


おー

感想
今回は最初の一歩をやってみました。start/1内で引数として与えてるloopの関数のなかで条件によって呼ぶ先を変えたりすれば動的なコンテンツが生成出来ますね!

更に本格的なWebアプリケーションを作ろうと思ったらもう一枚フレームワーク的なものをかぶせる必要もありそうです。
そういう意味ではRubyでいうとRailsというよりはSinatraに近い感じでしょうか。

また、自作のアプリケーションにJSONによるAPIインターフェースを持たせようと思ったらmochiwebを使えばかなりシンプルにかぶせられそうという気もします。
なんといってもErlangの特徴である軽量プロセスとOTPを使う事で、軽量・堅牢なバックグラウンドプロセスを持つWebサービスが、少ないコード量で構築出来るってのが大きいですね。

超簡単ですが今回はこの辺でm(_ _)m