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

BeepBeepのチュートリアルをやってみた

Erlang

BeepBeepはErlang製のWebアプリケーションフレームワーク

以下のチュートリアルを参考にBeepBeepプロジェクトを作成し、自分のビュー関数、テンプレートを定義するところまでやってみる。

基本は上記のチュートリアル通りに進めており、詳細な記録を残そうというより第一印象を残すつもりで書いているので、詳細は元ページを見ていただきたい。英語なのがつらいという方は、shibu.jpの中の人にそれとなくつぶやいてみたりすると翻訳してもらえるのではないだろうか。(もしかしてどっかにもう翻訳やもっと良い日本語のチュートリアルがあったりする?)

最初にあげたBeepBeepの公式ページ?によると以下の二つgithubのどちらからソースコードを取得せよということなので、最終コミット日時が新しい方のレポジトリからソースを取得した。

$ git clone git://github.com/davebryson/beepbeep.git
$ cd beepbeep
$ make

BeepBeepのmakeの後、"Primes"というプロジェクトを"../BB_Primes"というディレクトリに作る。

$ ./script/new_beep.erl Primes ../BB_Primes
$ cd ../BB_primes/primes

このプロジェクトをコンパイルして、サーバーを起動。

$ make
$ ./start_server.sh

http://localhost:8000にブラウザでアクセスするとBeepBeepのスタートページが表示される。

BeepBeepはMochiWebErlyDTLを使ってるということなので、あらかじめダウンロードしておいたのだが、MochiWebとErlyDTLのパスを設定しなくても普通に起動してしまった。なぜだろうと思ったら、チュートリアルに書いてあった。

deps contains the BeepBeep, MochiWeb and and ErlyDTL sources, which means you don't need to ensure those are in your Erlang path. Not too much to do here, although you might want to add other dependencies your project uses.

http://lethain.com/entry/2009/jul/05/getting-started-with-beepbeep/

プロジェクトディレクトリのdepsの中にMochiWebとErlyDTLがあるから、Erlangパスに含める必要はないとのこと。

続いて、チュートリアルにあるとおりsrc/home_controller.erlを書き換える。このチュートリアルの内容は「ランダムに素数を表示する」というものらしいが、素数を求める部分の実装は省略されている。

random_prime(N) ->
    % skipping the logic for finding
    % nth prime to keep things concise ;(
    101.

handle_request("index",[]) ->
    N = random:uniform(100),
    SomePrime = random_prime(N),
    {render, "home/primes.html", [{prime, SomePrime}]};

簡潔明解。Djangoで書き直せば、

import random
from django.shortcuts import render_to_response

def randome_price(n):
    return 101

def handle_request(req):
    n = random.randint(1, 100)
    some_prime = random_prime(n)
    return render_to_response("home/primes.html", { "prime": some_prime })

のようなことをやっている。テンプレートはプロジェクトディレクトリ/viewsに置くのが流儀らしいので、チュートリアルの通りに、

{% extends "../base.html" %}
{% block content %}
    <p>Prime is : {{ prime }}</p>
{% endblock %}

というテンプレートをviews/home/primes.htmlに作る。テンプレート継承も使える。Djangoテンプレートは、{% %}を打つのも、{{ }}を打つのも指が慣れているので楽だ。

あとは、

$ make
$ ./start-server.sh

でコンパイルし、再度サーバーを起動する。

「テンプレートのファイル名を間違えた場合はブラウザにエラー画面が表示されるよ」のようなことがチュートリアルに書いてあったが、この画面は表示されなかった。何か設定があるのだろうか?