Mango は、D 言語でサーバサイドプログラミングをやるためのフレームワークだ。Java の Servlet 仕様をもとにしているので、Java でサーバサイドをやったことがあれば、簡単にいじれそう。
とりあえず、Hello World までやってみた。
必要なもの
- DMD
- D 言語コンパイラ。DMC も忘れずに。
- Build
- D 言語用のビルドツール。公式サイト (http://www.dsource.org/projects/build/) の "Windows Executable" というリンクをクリックすると exe が落ちてくる。名前を build.exe にして PATH を通す (または、dmd\bin に入れちゃってもいい)。
- Mango 本体
- 公式サイトのダウンロードページ (http://www.dsource.org/projects/mango/wiki/Downloads) から mango_release_2-0.zip を持ってきて、適当な場所に展開する。
Mango のサイトには他にも 4 つほど zip ファイルがあるけど、後回しでいい。
ソースを書く
テキストファイルに以下の内容を書き、UTF-8 で保存する。UTF-8 に対応したエディタがない場合は、中の日本語を半角英数字にしておけばいい。
ファイル名は、仮に hello.d としましょう。
import mango.http.server.HttpServer; import mango.servlet.Servlet, mango.servlet.ServletContext, mango.servlet.ServletProvider; import mango.io.Writer, mango.io.Socket; import mango.sys.System; version (Win32) pragma (lib, "wsock32"); class Hello : Servlet { void service (IServletRequest request, IServletResponse response) { response.setContentType ("text/html"); IWriter output = response.getWriter; output("<title>許せないぜ!</title>"c); output("くっ Mango で Servlet という算段か!"c); } } int main () { ServletProvider sp = new ServletProvider(); ServletContext example = sp.addContext (new ServletContext ("/example")); sp.addMapping("/hello", sp.addServlet (new Hello, "hello", example)); InternetAddress addr = new InternetAddress(80); HttpServer server = new HttpServer (sp, addr, 1); server.start(); System.sleep(); return 0; }
ビルド用の設定ファイルを書く
急がば回れ。build.exe に食わせるための設定ファイルを書く。ファイル名は、hello.brf とでもしましょうか。上で書いたソースと同じディレクトリに置く。
-ID:\mango_release_2-0 -O -release -cleanup hello.d
1 行目は、Mango を展開したディレクトリ。最後の行は、上で書いた D 言語ソースのファイル名。
ビルドと実行
後は、コマンドラインで
build @hello
とするだけ。'@' を忘れずに。うまくいけば、これで hello.exe ができる。
実行したら、ブラウザで http://localhost/example/hello を開けば、動作を確認できる。
仕組み
Java ではサーブレットコンテナが単体の製品になっていることが多い。Tomcat とか。一方、Mango はフレームワークなので、その機能を使って自分でサーバを書くというスタイルになる。OOWeb とかみたいな感じ。
ただし、Servlet 周りの仕様については、Java とほぼ同じ。上記のソースで ServletContext とか addServlet() とか addMapping() とか見えているが、これはつまり web.xml での Servlet 設定と同じことをしているわけだ。
あと、Mango には I/O ライブラリとしての側面もある。D 言語の標準ライブラリである Phobos は、十分整備されているとは言いがたい。その分、Mango に java.io や java.net などに相当する機能が用意されている。
もっと知るには
Hello World 以降をやるには、Mango のダウンロードページに行き、残りの zip をダウンロードしてくる必要がある。
example パッケージの servlets.d というソースが、より充実したサンプルだ。これを見れば、上記のソースで省略した部分を理解することができる。
doc パッケージは、リファレンスなどの文書類。Mango の機能は多岐に渡っているので、全体像をつかんでおくとよさそう。