【基盤開発チーム ブログリレー1日目】の記事です。

OCaml、書いてますか。私は書いています。仕事として。
そんな話の詳細は今年の関数型まつり 2026 で話すとして、今回は「実際、OCaml で Web やれんの?」という疑問にお答えしようと思います。
実際に利用しているものから、なんとなく良さそうなものまで、Web アプリ開発の文脈で必要になりそうなものをさらっていきます。
この記事を見て、ぜひ、OCaml で Web アプリ開発にチャレンジしてみてください!
はじめに
OCaml が大好き、基盤開発チームの田尻です。
今年は、関数型まつり 2026 で話すことになりました。Track A でぼくと握手!*1
タイトルからも分かる通り、今は OCaml 製の Web アプリを開発しています。 正確には OCaml で API サーバーを書き、ReScript という OCaml に関連した AltJS で SPA を構成しています。
具体的な話は関数型まつりを楽しみにしていただくとして、今回は OCaml を 2026 年に利用しようとした時に、どんな技術選定があるのかについて記録しておこうと思います。 もちろんこれが全て、という訳ではないですが、特に最近の動向に注目して集めてみました。
これを見れば、あなたも今日から OCaml で Web アプリ開発できるはずです!
OCaml で Web アプリを作るなら
OCaml デファクトスタンダードライブラリの基礎知識
どの言語にも「標準ライブラリ」と呼ばれるものがあります。
当然、OCaml にも存在していますが、他言語と比べると、機能的に不足している部分もあります。 近年は標準ライブラリも充実してきており、十分使えるのですが、それでももうちょっと色々欲しいなんて声も聞こえてきそうです。
そのため、ユーザーの中で作成されたライブラリがいくつかあります。 これから紹介する Web のためのライブラリの前提にもなるので、先にここで紹介してしまいましょう。
Base/Core/Async
- GitHub - janestreet/base: Standard library for OCaml · GitHub
- GitHub - janestreet/core: Jane Street Capital's standard library overlay · GitHub
- GitHub - janestreet/async: Jane Street Capital's asynchronous execution library · GitHub
最初に紹介するのは、世界でも OCaml をよく利用している企業の1つ Jane Street による OSS ライブラリです。
Base/Core はその名の通り、標準ライブラリを置き換えるための「基礎」や「核」となるライブラリです。 特に、Base は多くの標準ライブラリに欲しいモジュールが実装されており、今後紹介するライブラリの依存になっていることも多くあります。 直接的にせよ、間接的にせよ、OCaml を書いていれば、これらのライブラリに触れることになるでしょう。
また、同様にして非同期のためのライブラリとして Async が存在します。 5.0 で並行並列が実装されるまで、後述する Lwt と並んでデファクトスタンダードなライブラリの1つでした。 今でも、いくつかの理由で十分に利用する価値のあるライブラリです。
Batteries Included
一方で、Batteries Included はコミュニティによる標準ライブラリを強化するライブラリです。 Core を使うのか、Batteries Included を使うのか、あるいは、言語標準のライブラリを使うのかは趣味が分かれるところです。*2
Lwt
Lwt は ocsigen プロジェクトの一部です。 標準ライブラリではありませんが、並行処理のためのライブラリで、プロミスなどの実装があります。 Async と並ぶ2つ目の選択肢であり、ここにも選択の余地があります。
EIO
EIO はこの中で最も新しい、エフェクトを利用した I/O ライブラリです。 ocaml-multicore プロジェクトから生まれており、I/O のための並列並行ライブラリになります。
Algebraic Effects and Handlers を活用した最新の並列並行を体験したい時には選ぶと良いでしょう。
過去の記事: 実用 Algebraic Effects and Handlers ~本番環境で OCaml を利用するために~ - エムスリーテックブログ
Web FW
私はあまりフレームワークを使わないのですが、OCaml にもいくつか Web フレームワークがあります。 まずはここから始めるのも良いでしょう。 今回は特に新しいものを紹介します。
Dream
ocaml.org にも利用されているフレームワークです。
基本的な API サーバーやフロントエンドも含めたフルスタック構成だけでなく、WebSockets や GraphQL まで対応しています。 このフレームワークを使う場合には EIO 対応がまだないため、Async か Lwt を使うことになります。
Vif
- GitHub - robur-coop/vif: A simple HTTP server for OCaml 5 · GitHub
- GitHub - robur-coop/miou: A simple scheduler for OCaml 5 · GitHub
Vif はまだ beta バージョンのフレームワークです。 miou というエフェクトによるスケジューラーを用いており、これからの開発が期待されます。
HTTP ライブラリ
さて、もし、フレームワークを使わない場合、何らかの方法で HTTP を扱える必要があります。 EIO を使って自分で実装するには大変ですから、いくつかのライブラリを紹介しましょう。
cohttp
mirage という unikernel プロジェクトによる HTTP ライブラリです。 Async/Lwt だけでなく、EIO の対応もあり、直近では私も利用しています。
httpaf
こちらはパフォーマンスを意識した HTTP ライブラリになります。 dream でもこちらが利用されています。
JSON ライブラリ
JSON を扱いたいのであれば yojson がデファクトスタンダードでしょう。 yojson は文字列をパースし、専用の型へ変換します。
一方で、実際に使う際にはドメインモデルへ楽に変換したいですよね?
- GitHub - ocaml-ppx/ppx_deriving_yojson: A Yojson codec generator for OCaml. · GitHub
- GitHub - janestreet/ppx_yojson_conv: [@@deriving] plugin to generate Yojson conversion functions · GitHub
そんな時に使える機能として、OCaml には PPX という仕組みがあります。 マクロのようなものと認識しておくと良いでしょう。
yojson に対する PPX は現在、公式のものと Jane Street 社がメンテナンスしているものがあります。*3 これもお好きな方を使うと良いでしょう。
DB ライブラリ
現在、OCaml で DB 操作をするなら現実的に caqti を使うことになるでしょう。 Async/Lwt をはじめ、EIO や Miou にも対応しようとしています。
ロギング
癖のないロギングライブラリです。
今後はエフェクトを使ったようなものも出るかもしれませんが、ただログを記録するだけであれば、logs でもあまり困りません。 いくつかのライブラリでは integration もあるので、これを使うのが良いでしょう。
SSG
最後に紹介するのは SSG です。 Web サーバーではありませんが、このライブラリは ocaml.jp でも利用しています。
markdown からの変換やテンプレート機能など、欲しい機能が揃っています。 使ってみたい方はぜひ https://github.com/ocaml-jp/ocaml-jp.github.io を覗いてみてください!
OCaml 由来の AltJS
最後に、幾つかの AltJS について触れておきます。
OCaml から派生した AltJS は複数あります。
- Js_of_ocaml
- Reason · Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems.
- The ReScript Programming Language
上から順に OCaml に近い言語になっています。
中でも、3つ目、ReScript を私は使っています。 理由としては、言語は適材適所であるべきではないかと私が思っているためです。
ReScript は3つの中でも OCaml との互換性を捨てる代わりに JavaScript ユーザーとの親和性を大事にしているように思います。 その上で、OCaml の関数型プログラミング言語としての側面を取り入れ、TypeScript とは異なる道を進んでいます。
他の2つも非常にユニークで、それぞれに特徴があり、今もメンテされているので、ぜひ使ってみてください。
まとめ
私は今回紹介した中でも EIO + cohttp を中心に利用しています。 十分実用に耐える Web アプリが作れていると感じています。
読者の皆さんはこの記事を読んで「意外とライブラリが揃ってる」と感じたか、「アレやコレがないじゃないか」と感じたか分かりません。 しかし、実際のところ、現実的な範囲で使っていくことは可能です。
マイナーな言語というのはライブラリやエコシステムの不足が課題になってきます。 ないなら作れば良い、というのは少し暴論ですが、現代はそれが非常にやりやすくなったことが、この課題に対する回答になっています。 言うまでもなく、LLM のおかげですね。
例えば、今回話題にあげなかった AWS SDK 周りについては、現在、自分で実装する方が良いように感じています。 OSS ライブラリはあるのですが、まだ発展途上のものやメンテが止まっているものが多いためです。*4
LLM もマイナーな言語 (OCaml や ReScript) や最新のライブラリ (EIO) にも十分適応しており、ハルシネーションもひどいものはありません。*5
もっと詳細な話を関数型まつりでするつもりなので、ぜひ、発表を聴きにきてください!
再掲: fortee.jp
また、最近、OCaml 日本コミュニティとして勉強会を開催する予定です。 ぜひこちらもご興味あればご参加ください。
We are hiring !!
OCaml が書けるエムスリーではソフトウェアエンジニアを積極募集しています。新卒・中途それぞれの採用、カジュアル面談やインターンも常時募集しています!