OCaml初心者はDreamでWebの夢をみるか

#プログラミング

#OCaml

投稿日: 2021-04-11

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 に大量の説明が書いてあって情報量に溺れる...みたいなことはなく, ほどよく小粒で親切な説明が書いてあってとっつきやすい.

Author

profile icon

тars (たーず)

tars0x9752

Japan, Tokyo

TypeScript

プログラミング, 音楽, Turntablism, Video Game, スノーボード, 味噌汁(特に赤味噌), 味噌煮込みうどん, 川魚(特に鮎)

Tags

#Contentful

#Domain

#Gandi

#Git

#GitHub

#KaTeX

#Linux

#Markdown

#Next.js

#Nix

#Nix Flakes

#NixOS

#OCaml

#PEG

#Phenyl

#React

#SVG

#Terminal

#Turntablism

#TypeScript

#VSCode

#Vercel

#WSL

#Windows

#Yarn

#Yoyo

#lsp

#npm

#sitemap

#アルゴリズム

#データ構造

#プログラミング

#携帯

#数学

#映画

#競技プログラミング

#雑記

#音楽