Giraffeは、F#でWebアプリケーションを構築できるマイクロフレームワークである。Webフレームワーク向けのF# APIを提供し、ASP.NET Core上で動作する。Giraffeは、F#でWebアプリケーションを構築したい開発者に対して、ASP.NET Coreとそのエコシステムを活かすことができる。
Giraffeの構文は、人気のあるF#WebフレームワークのSuaveと似ている。これらが似ていることにより、2つのフレームワークを統合するか、APIセットを共有してはどうかという提案も出された。Giraffeの開発者は、この統合があまり価値がないと思う理由を以下のように説明している。:
GiraffeとSuaveの主な違いのひとつは、Giraffeの基本的な方針がASP.NET Coreと密接に統合していることです。関数型言語を好む.NET開発者が、ASP.NET CoreのWebアプリケーションを関数型言語で構築したいというニッチを埋めるためにGiraffeは生まれました。Giraffeは、ASP.NET Core上に薄いレイヤーを提供し、ASP.NET Coreの主要なビルディングブロック(DI、HttpRequest、HttpResponse、Configなど)を保持することで、このニッチを埋めています。これにより、F#開発者は既に存在する(今後登場する)ASP.NET Coreエコシステムを多数使用することができます。
Giraffeの主要なビルディングブロックはHttpHandlerだ。HttpHandlerは、IApplicationBuilderを使用したASP.NET Coreと同様のパイプラインだ。ハンドラは、次のハンドラを呼び出してパイプライン処理を継続できる。
type HttpHandler = HttpFunc -> HttpContext -> HttpFuncResult
Giraffeは、HttpHandlerを統合して高いレベルで抽象化を行い、最終的にアプリケーションを作成するコンビネータ的なアプローチを行う。
let webApp =
choose [
route “/foo” >=> text “Foo”
route “/bar” >=> text “Bar”
]
type Startup() =
member __.Configure (app : IApplicationBuilder)
(env : IHostingEnvironment)
(loggerFactory : ILoggerFactory) =
app.UseGiraffe webApp
GiraffeはF#の非同期ワークフローの代わりに.NET Task
を使用する(この2つの実装が異なり相互変換する必要があるため)。 Giraffeは、オーバーヘッドを減らすよう変換を最小限に抑える。
let personHandler =
fun (next : HttpFunc) (ctx : HttpContext) ->
task {
let! person = ctx.BindModel<Person>()
return! json person next ctx
}
サンプルアプリケーションがGitHubで利用できる。
Rate this Article
- Editor Review
- Chief Editor Action