Dreamという新しい OCaml 製の Web framework が公開されていたので, 早速ちょっと試してみた.
公開といっても, まだリポジトリが public になっただけでリリース等はまだ
公開されたばかりだが Tutorial/Example があるので, それらを読みながら触ってみつつ, ここにメモしていこうと思う.
インストール
まだリリースされてないので自分でインストールする必要がある.
Getting started 参照.
Note: opam のパッケージについて, システム側で必要なライブラリは
depext
で調べられる.
Hello, world!
Tutorials を参考に Hello World してみる.
まず必要最低限の構成でプロジェクトを作る. ビルドシステムとして dune
を使う.
まだ OCaml の言語機能の勉強しかしてないので
dune
とかその辺のエコシステムは何もわからないが, とりあえずやってみる.
dune
のクイックスタートをみると, 最低限 dune
ファイルがあればいいらしいので作る.
依存するライブラリとして Dream
を書く.
(executable
(name dream_test)
(libraries dream))
Dream の examples を参考に Hello world を書く. とてもシンプル!
let () = Dream.run (fun _ -> Dream.respond "Hello, world!")
Dream.run は
request -> response promise
.
ビルド&実行してみる
dune exec ./hello.exe
サーバーが立ち上がるので http://localhost:8080
をブラウザで見る. Hello, world! 完.
次
ドキュメントをチラ見してなんとなくの全体の雰囲気を見て, そして Tutorial をざっくり進めてみた.
以下気になったところとかのメモ.
middleware のチュートリアルで中値演算子である @@
を知る(知らなかった). 4.01 からの機能らしい. ('a -> 'b) -> 'a -> 'b
してくれる. g (f (x))
を g @@ f @@ x
と書ける. カッコが不要になって便利, というもの.
promise のチュートリアルで Lwt を始めて触る. 正直なにもわかってないが, とりあえず tutorial から, let%lwt
で await して変数束縛, try%lwt
で exceptions と rejections の捕捉, Lwt.return
で resolve, みたいな, とてもざっくりした理解をする.
template のチュートリアルにて, テンプレート部分のシンタックスが VSCode 上ではエラーになってしまってちょっと困った. が, ビルド/実行は通るので一旦そのまま進めた.
その後, template の記述に Tyxml を試してみたところ, Tyxml のスタンダードな記法(呼び方がわからない)だったら特に VSCode 上でも問題なく書けそうだった.
フルスタックの Example もあって, クライアント側に js_of_ocaml を使って全部 OCaml で書く, クライアントもサーバーも Reason で書く, あるいはクライアント側だけ ReScript で書く, といった場合の例があったがそこまでは今回は試していない.
所感
いかんせん OCaml 初心者なので Web フレームワークとしての出来の良し悪しはわからないが, とにかく軽く触れる感じがよいと思った(雑).
Tutorial/Example に大量の説明が書いてあって情報量に溺れる...みたいなことはなく, ほどよく小粒で親切な説明が書いてあってとっつきやすい.