OCaml Web App Development 2026 - エムスリーテックブログ

エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

OCaml Web App Development 2026

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

記事とはなんの関係もない自作の苔テラリウム

OCaml、書いてますか。私は書いています。仕事として。

そんな話の詳細は今年の関数型まつり 2026 で話すとして、今回は「実際、OCaml で Web やれんの?」という疑問にお答えしようと思います。

実際に利用しているものから、なんとなく良さそうなものまで、Web アプリ開発の文脈で必要になりそうなものをさらっていきます。

この記事を見て、ぜひ、OCaml で Web アプリ開発にチャレンジしてみてください!

はじめに

OCaml が大好き、基盤開発チームの田尻です。

今年は、関数型まつり 2026 で話すことになりました。Track A でぼくと握手!*1

fortee.jp

タイトルからも分かる通り、今は OCaml 製の Web アプリを開発しています。 正確には OCaml で API サーバーを書き、ReScript という OCaml に関連した AltJS で SPA を構成しています。

具体的な話は関数型まつりを楽しみにしていただくとして、今回は OCaml を 2026 年に利用しようとした時に、どんな技術選定があるのかについて記録しておこうと思います。 もちろんこれが全て、という訳ではないですが、特に最近の動向に注目して集めてみました。

これを見れば、あなたも今日から OCaml で Web アプリ開発できるはずです!

OCaml で Web アプリを作るなら

OCaml デファクトスタンダードライブラリの基礎知識

どの言語にも「標準ライブラリ」と呼ばれるものがあります。

当然、OCaml にも存在していますが、他言語と比べると、機能的に不足している部分もあります。 近年は標準ライブラリも充実してきており、十分使えるのですが、それでももうちょっと色々欲しいなんて声も聞こえてきそうです。

そのため、ユーザーの中で作成されたライブラリがいくつかあります。 これから紹介する Web のためのライブラリの前提にもなるので、先にここで紹介してしまいましょう。

Base/Core/Async

最初に紹介するのは、世界でも 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

Vif はまだ beta バージョンのフレームワークです。 miou というエフェクトによるスケジューラーを用いており、これからの開発が期待されます。

HTTP ライブラリ

さて、もし、フレームワークを使わない場合、何らかの方法で HTTP を扱える必要があります。 EIO を使って自分で実装するには大変ですから、いくつかのライブラリを紹介しましょう。

cohttp

mirage という unikernel プロジェクトによる HTTP ライブラリです。 Async/Lwt だけでなく、EIO の対応もあり、直近では私も利用しています。

httpaf

こちらはパフォーマンスを意識した HTTP ライブラリになります。 dream でもこちらが利用されています。

JSON ライブラリ

JSON を扱いたいのであれば yojson がデファクトスタンダードでしょう。 yojson は文字列をパースし、専用の型へ変換します。

一方で、実際に使う際にはドメインモデルへ楽に変換したいですよね?

そんな時に使える機能として、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 は複数あります。

上から順に 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 日本コミュニティとして勉強会を開催する予定です。 ぜひこちらもご興味あればご参加ください。

ocaml.jp

We are hiring !!

OCaml が書けるエムスリーではソフトウェアエンジニアを積極募集しています。新卒・中途それぞれの採用、カジュアル面談やインターンも常時募集しています!

エンジニア採用ページはこちら

jobs.m3.com

カジュアル面談もお気軽にどうぞ

jobs.m3.com

インターンも常時募集しています

open.talentio.com

*1:エムスリーからはもう1人登壇予定です。嬉しい。

*2:私の個人的なトレンドは言語標準ライブラリを信じることです

*3:ppx_yojson_conv の README にて、以前 Jane Street 社のものを利用するように記載されていましたが、現在は削除されているようです

*4:その内に私が作ったものは公開していけたらと思っています

*5:体感として、Java を書いている時と大差ないと思います。情報が多すぎても混乱する LLM らしい結果かもしれません。