OCaml Weekly News
こんにちは
2026年4月28日から5月5日までの週の OCaml Weekly News をお届けします。
Table of Contents
Oc — OCaml 初心者向けの Cargo ライクな CLI(AI 支援、フィードバック歓迎)
Emil Kloeden が発表しました
皆さん、こんにちは。
私は OCaml の初心者で、つまずいていたことのひとつがツールのセットアップです。opam スイッチの理解、`eval $(opam env)` を忘れずに実行すること、`.opam` ファイルをいつ再生成すべきかを把握することなど。そこで(Claude Code とともに)`oc` を作りました。`opam` と `dune` をラップし、Cargo や uv に似たインターフェースを提供する小さな CLI です。
oc new my_app # プロジェクトのスキャフォールド + 独立したスイッチの初期化 oc add yojson # 依存関係の追加、oc.toml の更新、インストール oc build # 依存関係の確認、dune build oc run # 依存関係の確認、dune exec
`opam switch create` も、`eval $(opam env)` も、`.opam` ファイルの手動編集も不要です。
これは何か:
opam と dune 以外の依存関係を持たない、小さく薄いオーケストレーション層です。スイッチの管理とパッケージの解決には opam を、ビルドには dune を呼び出します。コミュニティがすでに使い信頼しているツールを置き換えるのではなく、それらをラップしています。意図的に機能を絞っており、環境を完全に制御したい場合は opam を直接使えます。
これは何ではないか:
opam や dune の代替品ではありません。始めたばかりの方にも、長年 OCaml を書いてきて日常的な作業の煩わしさを減らしたい方にも、よりシンプルな操作面を提供することが目的です。
AI 支援についての注記:
正直に申し上げます。このプロジェクトはほぼ全面的に Claude Code の助けを借りて開発されました。仕様の作成、設計判断、レビューは私が行いましたが、コードはほぼ全て AI が生成したものです。透明性のためにも、小さなツールにおける AI 支援開発の興味深い事例として、あえて明記しておきます。
先行事例:
いくつかの類似した取り組みを把握しています。`esy` が最も近い思想を持っています。サンドボックスビルド、ロックファイル、シンプルなマニフェストを備えていますが、異なる選択をしています。Node.js が必要(`npm install -g esy`)で、opam に委譲せず独自の依存関係リゾルバを持っています。`oc` はより限定的なツールです。追加のランタイム依存関係はなく、標準の opam と dune の上で動作し、機能の豊富さよりシンプルさを優先しています。`dune init project` はスキャフォールドを処理しますが、スイッチ管理はユーザーに委ねられます。opam のローカルスイッチ(`opam switch create . 5.2.0`)は、`oc` が自動化していることの本質ですが、手動で操作する必要があります。これらをすでにきれいに解決している何かを見落としていたら、ぜひ教えてください。
シェルエイリアスではなぜだめか:
いくつかのシェル関数でほぼ同じことができるかもしれません。それ以上に踏み込んだ理由は、クロスプラットフォームのバイナリにはシェルのセットアップが不要であること、ロックファイルによってマシン間で再現可能なビルドが得られること、そして `oc.toml` を唯一の信頼できる情報源とすることが、どの opam コマンドを実行すべきかを覚えるよりクリーンだからです。それだけの価値があるかは公正な疑問です。
Go であって OCaml でない理由:
部分的にはブートストラップ問題です。OCaml のセットアップを助けるツールを、OCaml をセットアップする前に書くのは奇妙に感じました。より実際的には、Go によってランタイム依存関係のない単一の静的バイナリを簡単に配布でき、ツールの開発と反復が迅速にできました。誰かが OCaml への移植を引き受けたいなら、異論はありません。
現状:
このツールは個人的な用途では動作しており、テストスイート、ロックファイル、基本的な CI があります。まだ荒削りで、経験豊富な OCaml 開発者がたじろぐような部分もあるかと思います。それが投稿している理由のひとつです。以下についてフィードバックをいただけると本当に助かります。
- これは本当の問題を解決しているか、それともコミュニティにはすでに私が見落としていたより良い回答があるか?
- `oc` がスイッチを管理したり `.opam` ファイルを生成したりする方法に正確性の問題はあるか?
- あなたにとって有用になるために何が足りないか?
ホームページは emilkloeden.github.io/oc で、ソースは github.com/emilkloeden/oc にあります。
読んでいただきありがとうございます。フィードバックをお待ちしています。
Dune パッケージ管理のアップデート
Shon が発表しました
こんにちは!Tarides チームより、Dune パッケージ管理に関するアップデートをお知らせします。
背景
Dune パッケージ管理は、Dune でビルドされたプロジェクトにおける opam 依存関係の使用を簡素化することで、開発者のワークフローを改善することを目的としています。詳細はチュートリアル OCaml Package Management With Dune をご覧ください。
寄せていただいた多くの素晴らしいフィードバック への感謝の気持ちも込め、アップデートをお伝えするべき時期が来ました。Dune のコントリビューターたちは問題の修正と以前のイテレーションに存在したアーキテクチャ上の難しい問題の解決に懸命に取り組んできました。
現在利用可能な機能
多くのコントリビューターのおかげで、以下の機能が最新リリースの Dune (3.22) で Linux および MacOS にて利用可能になっています:
- opam リポジトリで公開されている依存関係の管理(opam パッケージの大多数はサポートされていますが、全てではありません)
- 依存関係のピン留め(再帰的)
- カスタム opam リポジトリのサポート(例えば、このドキュメント化された設定レシピに従って OxCaml プロジェクトに使用できます)
- 依存関係バージョンのロック:開発者と CI に対してサポートされているプラットフォーム間でポータブルな再現可能環境を提供
- 一部の開発者ツール管理のサポート(不安定ですが、ハッピーパスでは使用可能)
- 最近では、リロケータブルコンパイラのサポートを追加しました
さらに、以下のサポートユーティリティが利用可能です:
- サポートされているプラットフォーム向けのバイナリ配布:ナイトリービルドとリリース済みバージョンを提供
- setup-dune:Dune パッケージ管理を使用するプロジェクトの CI を素早く簡単に設定できる GitHub Action
現状と注力点
コミュニティの定期的なユーザーと私たちが管理する多くの CI システムでの使用により、継続的なフィードバックを収集しコア機能を活用しています。ただし、テストの結果、これらの機能は熱狂的なアーリーアダプター以外への広範な使用を推奨できるほど成熟していないことが分かっています。そのため、全ドキュメントにこの機能は実験的で変更される可能性があると警告しています。
現在は、パッケージ管理を実験的ステータスから成熟させることに注力しています。これには、開発者ツールサポートの再設計、シンボリックリンクを使用するパッケージのサポート、そして Dune パッケージ管理自身の開発で dogfood できるようにすることが必要です。現フェーズで計画していることを確認するには Non-experimental package management · Milestone #62 · ocaml/dune が最良の場所です。
次のステップ
コア機能が成熟した後は、サポートプラットフォームの拡張とエコシステム統合の改善に注力します。この作業には、Windows のサポート追加、クロスコンパイルの改善、高度なベンダリングワークフローのサポート、そして opam-ci への Dune パッケージ管理の統合が含まれます。さらなるアップデートとよりアクセスしやすい計画が続きます。
意見とコントリビューション
この取り組みに興味があり、お手伝いしたい方はぜひご連絡ください!
OCaml ユーザーサーベイ 2026
Sabine Schmaltz が発表しました
皆さん、こんにちは。
OCaml Software Foundation(OCSF)を代表して、OCaml ユーザーサーベイ 2026 をお知らせできることを嬉しく思います。10〜15 分ほどで回答できます。ぜひご参加いただき、他の OCaml プログラマーにもシェアしてください。
アンケートリンク: https://forms.gle/gt5nikqUmoQWeYYQ9
https://forms.gle/gt5nikqUmoQWeYYQ9
アンケートは 2026年5月25日(AOE) まで受け付けています。
今年の版は 2023年版 をベースにしています。時間の経過によるトレンドを追跡できるよう多くの質問を比較可能な形で維持しつつ、今年前半に収集されたコミュニティフィードバック(フィードバックスレッド)を基に更新・修正・追加が行われました。注目すべき追加事項には、AI/LLM ツールに関する質問とデバッグ&プロファイリングに関する質問が含まれます。
いくつかの注意事項:
- アンケートは Google Forms で管理されていますが、Google アカウントへのサインインは不要で、回答はいかなるアカウントにも紐付けられません。その結果、回答中にブラウザタブを閉じると進捗は保存されません。
- 全ての質問は任意です。
- 自由記述欄に個人情報を入力しないでください。生の回答は要約レポートと共にコミュニティに公開されます。検出されたものは編集しますが、見落とす場合があります。
- 公式の OCaml オンラインスペースとして、このアンケートは OCaml 行動規範を採用しています。
結果は OCSF ウェブサイトで公開され、discuss.ocaml.org でも発表されます。
ご参加に感謝します。アンケートを広く共有していただけると幸いです!
– Sabine Schmaltz、OCaml Software Foundation を代表して
OCaml Web チュートリアル
Frédéric Loyer が発表しました
OCaml Web チュートリアルのシリーズを始めました。複数のライブラリを試して、それらがどのように組み合わさるかを見ることが目的です。(ただし、Dream フレームワークのドキュメントとサンプルセットはすでに十分に充実しているため、それを言い換えることはしません。)
現時点ではサーバーサイドレンダリングのみを試しましたが、Ocsigen(や Vdom?)が活躍できそうなクライアントサイドレンダリングも試す予定です。
ほとんどの人が Web フレームワークに期待するもの(フォーム処理、データベースアクセスなど)を使うダミーアプリケーションを提案することが目的です。
OCaml web tutorials をご覧ください。
Calascibetta Romain が提案しました
私たちが `vif` について作ったチュートリアル vif から参考にできると思います。最後に WebSocket の内容が含まれており、`caqti` と `tyxml` も使っています :slight_smile:
Valkey 0.3.1:クライアントサイドキャッシング、ブロッキングプール、IAM 認証、mTLS
Avi Fenesh が発表しました
皆さん、こんにちは。
`valkey.0.3.1` が opam で公開されました。
これは `0.2.0` の発表後の次のリリースです。簡単に言うと、前回の投稿のロードマップ項目のいくつかが実装されました。クライアントサイドキャッシング、ブロッキングコマンドプール、IAM 認証、mTLS です。
opam update opam install valkey eio_main
リポジトリとドキュメント:https://github.com/avifenesh/ocaml-valkey
最大の新機能はクライアントサイドキャッシングです。
`valkey` は現在、有界なインプロセス LRU キャッシュ、RESP3 無効化プッシュ処理、シングルフライト保護、オプションの TTL セーフティネット、メトリクスを備えた Valkey `CLIENT TRACKING` をサポートしています。スタンドアロンモードとクラスターモードの両方で動作し、カバーしたかった 3 つのトラッキング形式をサポートしています:
- デフォルトトラッキング
- `BCAST` プレフィックストラッキング
- `OPTIN` トラッキング
クラスターパスが難しい部分でした。OPTIN の読み取りでは、MOVED / ASK リダイレクトをまたいでも、`CLIENT CACHING YES` が実際の読み取りと隣接している必要があります。これは現在、呼び出し元に押し付けるのではなく、クライアント内部で処理されます。
2 つ目の大きな追加はブロッキングコマンドプールです。
通常のクライアントは依然として多重化接続を中心に構築されており、通常のトラフィックに適した形です。しかし、`BLPOP`、`BRPOP`、`BLMOVE`、`BLMPOP`、`BZPOP*`、`XREAD BLOCK`、`XREADGROUP BLOCK` などのコマンドはサーバー側で意図的にブロッキングです。これらを通常の多重化 FIFO 経由で送信すると、後続の無関係なリクエストが凍結する可能性があります。
`0.3.x` では、これらのコマンド用に狭いノードごとのリースプールを追加しています。ブロッキング呼び出しはコマンドの期間中に排他的な接続をリースし、通常のトラフィックは引き続き通常のクライアントで処理されます。プールは有界で、型付きエラーを持ち、トポロジの変更を処理し、設定しない限りデフォルトで無効です。
3 つ目の追加は IAM 認証と mTLS です。
静的なユーザー名/パスワード設定だけでなく、ファーストクラスの `Connection.Auth.provider` 抽象化が追加されました。つまり、すべての初期ハンドシェイクと再接続でプロバイダーから新鮮な認証情報を取得できます。
それに加えて、ライブラリには以下が含まれます:
- ElastiCache IAM 認証用の純粋 OCaml AWS SigV4 署名
- 自動更新 IAM プロバイダー
- `Client.connect_with_iam`
- ライブ `AUTH` 更新サポート
- `Tls_config.with_client_cert` による mTLS クライアント証明書設定
IAM パスは AWS SDK に依存しません。署名者は OCaml で実装され、AWS SigV4 テストベクターに対してテストされています。
正確性と運用性の改善もいくつかあります:
- 接続、クラスター検出、トポロジー更新のための OpenTelemetry スパン
- キャッシュとブロッキングプールのメトリクスブリッジ
- TLS / 接続エラーの編集の強化
- クラスター変更下での MOVED / ASK / トポロジー更新の改善
- アトミックフロー中にスロット所有権が変わる際の WATCH / MULTI / EXEC 周りの修正
- CSC 無効化、クラスター移行、ブロッキングプール動作、IAM 更新、mTLS 設定のテスト追加
`0.3.1` 自体は opam サンドボックステストをクリーンにする小さなフォローアップです。mTLS 設定テストは、ローカル開発スクリプトで生成された証明書に依存するのではなく、コミット済みのテストフィクスチャを使用するようになりました。
このプロジェクトはまだアルファ版であり、`1.0` 前に API が変更される可能性がありますが、表面が当初望んでいた形に近づいています。クラスター動作、RESP3、最新の Valkey 機能、本番環境での障害モードをファーストクラスの懸念事項として扱う、OCaml 5 / Eio ネイティブな Valkey クライアントです。
以下について、OCaml を本番環境で使用している方からのフィードバックを特にお待ちしています:
- API の形状と命名
- Eio のエルゴノミクス
- ドキュメントの明確さ
- キャッシング / ブロッキングプール / IAM API が自然に感じられるか
- `1.0` 前に何を優先すべきか
ロードマップに残っているのは、Valkey モジュールサポート(JSON、検索、ブルームフィルター)と `1.0` 前の深い監査パスです。
試してみた方は、良い点、使いにくい点、不足している点をぜひ教えてください。
過去の CWN
CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。また、アーカイブやRSS フィードもご覧いただけます。
毎週メールで受け取りたい場合は、caml-list を購読してください。