関数型とWeb
Ruby on RailsでWebを書くのもいいけど、静的型付け言語でWebを書けないか
…と探していたらHaskellのWebフレームワークのYesodというものを見つけました。
Yesodの日本語記事も増えてきましたね。ちょくちょくSlideshareなんかで見かけるようになってきました。
なぜHaskell?
とのことですが、Haskellは型ではなく型クラスと言われるように、振る舞いの情報が型に集約されています。
例えば、プロダクションレベルのコードを書く時は、
RoRだとと期待する振る舞いを規定するテストコードを書いて今書いているコードが正しいかどうか判定してやる必要がありますよね。
Haskellでは型に振るまいの情報が詰め込まれているため、そこまでテストコードを書く必要がありません。
ほとんど必要ない場合もあります。
RoRと比べて幸せになれそうな点を幾つか:
- コンパイル時にかなりのエラーが検出でき、コンパイルが通る≒期待したどおりの動きをする
- typoが発見しやすい ←これ重要
- テストコードを書く分量を減らせる、一人の開発だとほぼ要らないかも?
- 動きがもっさりしない!
- YesodのGoogle Groupで質問するとYesodの作者、又はYesodのプラグインの作者からの反応を直接受け取れる(著名なライブラリだとそうも行かないかも…)
型がかなり厳密なため、最初は全くコンパイルが通らないことが頻発します。
うっ、つらい…
どのWebフレームワークを使うにしろ、依存関係は問題になります。RoRも依存関係がかなり有りますからね。
Yesodは…と言うと、やはりかなり有ります。120程度のHaskellのライブラリに依存しています。
Yesodにはプラグインという概念があり、プラグインを入れると更に30程度は引き連れてきます。
インストールに上手くいけば数時間、上手くいかなかった場合は…聞かないでください。
と、まとまりのない文章を書いていても説得力がないので実際に書いてみました。
自宅ネットワークの内部だけで動かすちょっとしたメモを書き留めるブログアプリの予定だったのでこんなにゴリゴリかく予定はありませんでしたが、
認証やら、Markdown→HTMLやら、全文検索やら、管理画面やら色々つけてしまったのでした。
Webの知識が全くない状態から、JavaScript(+jQuery-1.10)、bootstrap2.3(+CSS3)、yesod-1.1.9.2を勉強して書いたので結構ひどいコードがあるやもしれません。
bootstrapを使っているのでまぁ見た目は予想も付くでしょう。下の画像のような感じです。

記事を書くために書いたコードはGithubで公開しています。
ちょっとしたものを書くのにバグで悩みたくない!という奇異な方は是非触れてみるといいかも知れません。