F#でASP.NET MVCを構築する基本

F# Advent Calendar 2011の参加エントリです。

F# まだあまりいじれてません

去年も参加して、 F# 初体験、F# はやっぱり .NET でした。と書いてみました。とは言いつつ忙しさにかまけて F# はそれ以来おざなりになり、CLR/H での勉強会の度やその前後でコードをみてみる程度になってました。この1年間のぶひさくんや、zecl さんさかもとさんにレクチャー頂いて何となく F# プログラミングをするための留意点や考え方などを理解できて来たのでそろそろと考えた時に折角だから ASP.NET MVC F# でかけないのかな?と疑問が浮かびました。

 

それ、Visual Studio ギャラリーにあるよ

zecl さんにアドバイス頂いて色々検索してみると、現在 VS 2010 から利用可能な Visual Studio ギャラリー 上でいくつか F# + ASP.NET MVC なテンプレートを見つけることができました。なるほど!さっそく目星をつけて落としてみることに。今回私が見つけたのはF# C# ASP.NET MVC3VS 11 DP とか書いてますが、ちゃんと後ろに VS 2010 も書いているので普通に使えます。

このテンプレートはASP.NET MVC 3ASPX + C#)と、F# プロジェクトで作られているテンプレートです。ダウンロードして、インストールしたらすぐに使えます。新しいプロジェクトダイアログ上で Visual F# → ASPNET → F# and C# Web Application というテンプレートがあるので、それを選択するとプロジェクトが生成されます

f:id:naoki0311:20111211113522p:image 

 

ASP.NET MVC + F#

実際にプロジェクトを生成した際のソリューション構成がこちら。

f:id:naoki0311:20111211113523p:image 

この構成を見るときれいに Controllers / Model フォルダと、 Global.asaxの実装コードが F# プロジェクト上に展開されていることが確認できます。詳しくは実際のコードを見てみるとよりわかりやすいのですがここでは省略。Global.asax F# プロジェクトの Global.fs を呼び出しているだけなので、ルーティング処理などは全て Global.fs に記載されています。

上記テンプレートでは Web  App でプロジェクトが分かれていますが、サーバーサイド(App)とクライアントサイド(Web)実装を綺麗に分けることができるので、これはこれで有かなと。後は普通に F# コード書いていくだけですし。スキャフォールドの恩恵や、コントローラーの作成などが受けられないなど制約はありますが、これで一応 ASP.NET MVC + F# な開発は進められそうです。

ちなみに単体テスト周りは onigiri オニギリアタタメマスカ・・・)とか、FSTest とか、fsunit とか色々あるようです(NUnit もいけるみたい)。

 

正直なところ、業務で使うにはあまり勧められそうもないですが、ASP.NET MVC 使いの方が F# の勉強に!とか、F#er な方が ASP.NET MVC の勉強に!という場合にはいい感じじゃないでしょうか。

来年は少しこれで遊んでみようかなぁとか思いました。不明な点があれば是非 F#er な先輩方に色々質問させていただきたいところです。

かなーり薄い内容になっちゃいましたが以上です。