YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

(翻訳) Erlang Webライブラリ&フレームワーク

はじめに

こんにちは、Python界の情弱です。まだWSGIに関する諸々のエントリを訳したいのですが、その前にErlangで気になっていたWeb系のライブラリの比較記事があったので見てみます。僕の感想とは違うところもありますし、みなさんの感想とも違うかもしれませんが、そういう場合はぜひ本人にメールしてあげてください。
http://lenary.co.uk/erlang/2011/08/erlang-web-libraries/
原文には各ライブラリへのリンクが無かったので付け足しておきました。

Erlang Web Libraries & Frameworks

最近、簡単な社内APIのエンドポイントを書いている友人のために、必要に駆られて幾つかのErlang Webライブラリとフレームワークを比較しました。彼が是非多くの人にその要約を公開するべきだと言ったので、ここに公開します。
元記事を公開してから訂正や更新を教えてくださった皆様に感謝します。
(この記事は、より多くの情報を正確にしておきたいと思います。何か違っていることがあれば是非Emailをください。)

Yaws

Yawsは動的なWebページのサーバを想定した高性能Webサーバです。しかしながら、appmodsを使うことによって、代わりにAPIを作ることも可能です。Yawsのドキュメントはよく書かれていて、とても良くまとまっているようです。監視ツリーの中に入れることも可能です。
(Steve VinoskiさんにYawsが抜けていることを訂正してもらいました。ありがとうございます。)

Mochiweb

ErlangAPIの開発をする時に一番使われているライブラリのようです。全体としてよく機能していますが、ほんの少し気まぐれな動きをしたりします。Mochiwebのドキュメントはあまり良くありませんし、パラメータ化されたモジュールを多用します。個人的にはあまり好きな方法ではありません。とは言うものの、他のErlangアプリケーションに組み込む上では些細なことです。

Misultin

Misultinは一般的なアーキテクチャはMochiwebにとても良く似ていますが、WebSocketのサポートも含む点が違います。サンプルはとてもよくまとまっていて、簡潔です。Wikiに多くのドキュメントもあります。
(Andrew Thompsonさんに指摘して頂き、このセクションの他にCowboyとZotonicのセクションも追加しました)

Cowboy

CowboyもMochiwebにとてもよく似ています。リクエストを捌くのに、パラメータ化されたモジュールの代わりに普通にモジュールを使います。(私が思うに)Cowboyは、速度の向上とメモリ消費量削減のために、すべてバイナリで処理する唯一のHTTP Serverです。githubのレポジトリに使い方の例があります。

httpd

httpdモジュールはinetsアプリケーションの一部としてバンドルされています。多くのユーザにはこれで十分で、また素早くコードを書きたい場合にも有用です。httpdWSGIやRackのようなミドルウェア、つまり任意のリクエストハンドラをつなげるミドルウェアをサポートする唯一のモジュールです。
残念なのは、単一のコールバック関数を使うことに固執していること、ドキュメントがあまり優れていないことです。httpdモジュールを使って何か作るときには、Garrett Smithが書いたmodlibというラッパライブラリを使うとAPIがいくらかはすっきりします。

SimpleBridge

ラッパーといえば、SimpleBridgeは「Erlang HTTPサーバに単純で、標準化されたインターフェースを提供する」というプロジェクトです。これが実際に意味するところは、使っているフレームワークのリクエスト/レスポンスオブジェクトをSimpleBridgeアダプタにラップして、実際に使っているライブラリを取り替え安くする」ということです。
私は、SimpleBridgeはHTTPライブラリアダプタとして十分機能するにはまだまだだと感じます。SimpleBridgeはMochiweb, inets httpd, YawsやMisultinのパイプライン内のサポートもしています。
(Lo〓c HoguinとJesse Gummの両者にSimpleBridgeを指摘してくださったことを感謝します)

webmachine

これはMochiweb上に構築されていますが、多くの低レベルHTTPセマンティクスから解放してくれます。代わりに"RESTツールキット"を使うことになります。基本的なRPC over HTTPアプリケーションには、このモジュールを使うことはないでしょう。しかしながら、もしアプリケーションがリソース指向であれば、これはとても役に立ちます。Bashoから出てきたモジュールなので、よいコードが書かれていてドキュメントも良いものであることが期待されます。

Nitrogen

Nitrogenは関数型的なユーザインタフェースを作ることにより重点を置いています。これによって、クライアントとサーバの間でイベントを送り合えるようになりました。これはとても興味がそそられます。ここにNitrogenの紹介があります。各ページはただのモジュールで、テンプレートはオプションです。NitrogenでAPIを作るのは簡単です。
(Jesse GummがNitrogenでAPIエンドポイントを作ることができると教えてくれました。ありがとうございます。)

Zotonic

Zotonicは本格的なCMSで、WebSocketやCometのサポートもしています。拡張も簡単で、非常に多くのドキュメントが彼らのサイトに載っています。私からお伝えできることとしては、webmachineとNitrogenを使っているけれど、サイト内にOAuthサポートもできる独自のAPIを定義することも可能です。

Chicago Boss

このフレームワークRubyにとってのRailsのようなものです。モデルと、多くの実装済みビヘイビアが提供され、いち早く開発が出来るようになっています。おそらく、単純なAPIには複雑すぎますが、あなたが何をするかによってそれも変わるでしょう。