TL;DR
- opam でローカルスイッチを作り、dune でプロジェクトを作成して、Dream のプロジェクトの雛形を作った。
- 依存パッケージは dune-project に書き、
dune buildで opam ファイルを生成してからopam install . --deps-onlyで入れる。
背景
Dream は、OCaml で一番メジャーな Web フレームワークのようである。OCaml の公式ドキュメントの Web フレームワークの一覧でも、一番上に載っている。Dream のサイトには、次のようなコードが載っている。
let hello who =
<html>
<body>
<h1>Hello, <%s who %>!</h1>
</body>
</html>
let () =
Dream.run
@@ Dream.logger
@@ Dream.router [
Dream.get "/" (fun _ ->
Dream.html (hello "world"));
]@@ は左向きのパイプ演算子である。
環境
- opam はグローバルにインストール済み
検証
mkdirで空のディレクトリを作るcdで移動し、opam switch createでローカルスイッチを作る。Python の virtualenv をイメージすると分かりやすいeval $(opam env)を実行するopam install duneで dune をローカルに入れるdune init proj .でプロジェクトを作る- dune-project の
dependsを書き換え、dream や utop など、開発に必要なパッケージを追加する dune buildを実行し、opam ファイルを生成するopam install . --deps-onlyで依存パッケージをインストールする
6 で書き換えた dune-project は次のとおり。
(package
(name dream_tutorial)
(synopsis "A short synopsis")
(description "A longer description")
(depends ocaml dune dream ocamlformat utop ocaml-lsp-server)
(tags
(topics "to describe" your project)))考察
OCaml は始めたばかりなので、この手順が正しいかは自信がない。dune の立ち位置もまだよく分かっていない。
別のパッケージを追加するときも、6〜8 の手順が必要なのかは分かっていない。面倒なので直接 opam install したいが、それでは opam ファイルや dune-project に反映されないようなので、この手順を踏むしかなさそうである。
@@ は、F# のように <| だと良かった。
キーワード
- OCaml
- Dream
- opam
- dune
- virtualenv