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

.Netの軽量Webフレームワーク「NancyFx」を試してみた

最近はPlayFrameworkを勉強しているのですが、仕事ではC#を使うことが多いです。
なので、C#で使えるPlayみたいなWebフレームワークはないのかと探してみたところ「NancyFx」というフレームワークを見つけました。

公式サイト : http://nancyfx.org/
github : https://github.com/NancyFx/Nancy

HelloWorld

とりあえず HelloWorld です。

NancyFxを使い始めてびっくりしたのは、簡単に試すだけであればVSのコンソールアプリケーションからいけちゃうところです。
もちろん、ASP.NETやAzureにホスティング出来るようですが、ちゃちゃっと試せる環境があるというのはいいと思います。

HelloWorldも、コンソールアプリケーションで作ってみます。
プロジェクトの作り方などは省略。

NancyFxのパッケージを追加

Nugetを使い、以下2つのパッケージを追加します。

  • Nancy

NancyFx本体です。

  • Nancy.Hosting.Self

コンソールアプリケーションでNancyFxを動かすために必要です。


Program.cs

エントリーポイントでは、NancyFxを動かすサーバのインスタンスを生成して、スタートさせます。

using System;
using Nancy.Hosting.Self;

namespace HelloWorld {

  class Program {
    static void Main(string[] args) {
      // サーバのインスタンスを作成して
      var host = new NancyHost(new Uri("http://localhost:9001/helloworld/"));
      
      // サーバ開始!
      host.Start();
      
      // 入力を待って
      Console.ReadLine();
      
      // サーバ停止!
      host.Stop();
    }
  }
}

HelloWorld.cs

ルーティング情報は、NancyModuleを継承したクラスのコンストラクタに実装します。
ラムダ式で書いてますが、戻り値さえちゃんとしてれば普通のメソッドも使えます。

戻り値あたりは、調査不足です...

using Nancy;

namespace HelloWorld.Controller {
  public class Helloworld : NancyModule {
    public Helloworld() {
      // http://localhost:9001/helloworld/  もしくは  http://localhost:9001/helloworld
      Get["/"] = parameter => {
        return "Hello world!!";
      };
      
      // http://localhost:9001/helloworld/{name}
      Get["/{name}"] = parameter => {
        return string.Format("Hi {0}, Hello world!!", parameter.name);
      };
    }
  }
}

実行!

とりあえず、上記のクラスだけ作れば HelloWorld は完成です。
VSからデバッグ実行してみます。

ブラウザで http://localhost:9001/helloworld にアクセス。

f:id:rabitarochan:20120718130149p:plain

表示できました!


お次は http://localhost:9001/helloworld/rabitarochan にアクセス。

f:id:rabitarochan:20120718130237p:plain

こちらもちゃんと表示できました!


ちらっと使ってみた感想

まだちゃんと使ってみてはいないのですが、手軽にWebアプリが作れるのでいいなと思ってます。
(実は、ASP.NETを触ったことが無いので、いまは比較はできません・・。)


Playと比較するとですが、実行中にソースを変更することが出来ないという点がちょっと不便です。
デバッグ実行してるからしょうがないといえばしょうがないですが・・。

結構面白かったので、時間があるときにチュートリアル的なものを書いていこうと思います。
HelloWorldのソースも、これだけですが後で公開しようと思います。

( 2012/07/20 追記 )
ソース公開しました。
一部、ブログに書いているソースとは違いますが、うまく読み替えてください・・。

https://github.com/rabitarochan/NancyHelloWorld