OCaml Weekly News

先週号 上へ 次週号

こんにちは

2026年3月24日から31日までの週の OCaml Weekly News をお届けします。

Table of Contents

Merlin の signature-help 機能の改善

Charlène_Gros によるアナウンス

Tarides の私たちは、Merlin の signature-help 機能に加えられた改善点を発表できることを大変嬉しく思います!

念のため説明しますと、signature-help は Merlin の機能で、関数シグネチャを表示し、アクティブなパラメータをハイライトします。エディタ上では、通常ツールチップ、フローティングウィンドウ、またはミニバッファに表示されます。以下の画像は、VSCode で関数 exec_progsignature-help を表示した例です。

46e99c5c69bab991b8dd6a6a7494db5c2f32e07b.png

signature-help コマンドの実装にはいくつかの問題点があり、それらが修正されました。これらの修正により、機能がより快適に使えるようになりました。改善点の一部はすでに最新の Merlin および ocaml-lsp リリースに含まれており、その他は次のリリースに含まれる予定です。

修正内容:

  • Merlin は関数のパラメータにのみ signature-help 情報を表示するようになり、関数名には表示しなくなりました。
  • signature-help はアクティブなパラメータの情報のみを表示するようになり、最後のパラメータの後に最初のパラメータに戻るループが発生しなくなりました。
  • 関数呼び出しの後に in がまだ書かれていない let .. in バインディングの内部でも signature-help がトリガーされるようになりました。
  • アクティブなパラメータとしてオプションパラメータの記述が始まったとき、そのオプションパラメータが検出されハイライトされるようになりました。

フィードバック募集: 2026年 OCaml ユーザーサーベイの設問について

Sabine Schmaltz によるアナウンス

皆さん、こんにちは。 OCSF を代表して 2026年 OCaml ユーザーサーベイを準備しています。設問を確定する前に、皆さんのご意見をいただきたいと思います。

設問案はこちらでご覧いただけます: Proposed OCaml Users Survey Questions 2026 参考として、2023年のサーベイからの変更点のまとめもご覧ください。

2023年のサーベイからの変更点の概要

新しいセクション:

  • AI/LLM の使用について(4問) - OCaml 開発に AI/LLM ツールを使っていますか?どのツールを?何のために?
  • デバッグとプロファイリング(3問) - どのようなデバッグ手法やツールを使っていますか?最大の課題は何ですか?(2023年の自由記述回答でデバッグの難しさが頻繁に言及されたことを受けて追加されました。)

新しい単独設問:

  • コミュニティの規模に関する希望(「コミュニティが~であればよいと思う」)
  • 使用しているドキュメントツール(odoc、ocamldoc など)
  • ツールおよびパッケージリポジトリに関するフィードバック用の専用自由記述欄

削除された設問(合計10問) - 実用性の低いデータしか得られなかった、または重複していた設問。最大プロジェクトサイズ、リリーススケジュールへの満足度、ソースホスティングプラットフォーム、Webデプロイプラットフォーム、「OCaml のツールは快適なワークフローを提供している」、「OCaml のライブラリは十分安定している」、「OCaml で書かれたソフトウェアは保守しやすい」、および言語機能ウィッシュリスト(エフェクトハンドラーが OCaml 5 でリリース済みのため)などが含まれます。

修正された設問 - エコシステムの進化を反映した新しい回答選択肢:OxCaml、Zig、Helix、Zed、WebAssembly ターゲット、dune パッケージ管理、Nix ベースのビルド、Bluesky、「強く望むこと」セクションへの AI/LLM 関連の選択肢の追加。古いコンパイラバージョン(4.02〜4.06)は「≤4.07」に統合されました。ベンチマークツールはカテゴリではなく具体的な名前で一覧表示されるようになりました。

以下の点についてご意見をお聞かせください:

  • 追加または削除すべきだと思う設問はありますか?
  • 回答の選択肢に不足しているものはありますか?
  • OCaml コミュニティにとって重要な新しいトピックで、聞くべきものはありますか?
  • 58問というサーベイの長さは、長すぎる、短すぎる、それとも適切だと思いますか?

サーベイをできる限り有益なものにするためのご協力をよろしくお願いします! :two_hump_camel: :orange_heart:

Sabine

PS: 2023年 OCaml ユーザーサーベイの結果もご覧ください!

2023年 OCaml ユーザーサーベイの結果

Sabine Schmaltz によるアナウンス

皆さん、こんにちは。

OCSF を代表して、2023年 OCaml ユーザーサーベイの回答に関する(遅ればせながらの)レポートを発表できることを嬉しく思います。評価の遅延についてお詫び申し上げます。今後は毎年定期的に OCaml ユーザーサーベイを実施することをお約束します。

前置きはこのくらいにして、レポートへのリンクをお伝えします:

https://ocaml-sf.org/docs/2023/survey-results.html

レポートに関するフィードバック、回答や数値に関する議論(解釈やご意見をぜひ共有してください)、またはその他のコメントをお待ちしています。

OCaml とそのエコシステムの現状をより深く理解するためのサーベイにご参加いただいた皆さんに感謝します! :orange_heart: :two_hump_camel:

Sabine

PS: 2026年 OCaml ユーザーサーベイが近づいています。2026年サーベイの設問変更に関するフィードバックスレッドへのご意見を大変重視しています。

ortac-0.8 - Domains を用いた仕様駆動テスト

Nicolas Osborne によるアナウンス

こんにちは!Tarides の私たちは、仕様駆動テストのための ortac-0.8.0 のリリースを発表できることを大変嬉しく思います!

ortacGospel エコシステムのツールです。核心となるアイデアは、Gospel 仕様言語のサブセットを OCaml コードに変換し、その変換を使ってランタイムチェックを生成することです。

ortac はプラグインアーキテクチャを採用しています。opam 経由でインストールできます:

$ opam install ortac-wrapper    # install the wrapper plugin for runtime assertion checking, with all the other necessary parts (runtime and cli)
$ opam install ortac-qcheck-stm # install the qcheck-stm plugin that generates QCheck-STM tests, with all the other necessary parts (runtime and cli)
$ opam install ortac-dune       # install the dune plugin to generate dune boilerplate to use the two previous plugins

このリリースは、Ortac/QCheck-STM が QCheck-STM テストフレームワークのより多くの機能を活用できるようにすることに焦点を当てています。具体的には、並列コンテキストでのテストとコマンド生成の柔軟性です。

動作の仕組みについてはドキュメントをご覧ください。

並列コンテキストでのテストについて:バージョン 0.2 でのバグレポート機能の導入とバージョン 0.4 での SUT を返す関数のカバレッジにより、並列コンテキストでの QCheck-STM テストの生成が容易ではなくなっていました(手書きの QCheck-STM テストでは比較的簡単です)。この問題が修正されました。

バグレポートの情報は、実際のテスト(実際の実行結果とモデルの結果を比較する)を行う関数内で部分的に収集されます。これは、並列テスト用のバグレポート機能を実装するには、QCheck-STM+Domains の核心部分でありテスト実行時に信頼している関数を書き直す必要があることを意味します。同じ動作を保持し、生成されたテストが対応する手書きの QCheck-STM テストと同じセマンティクスを持つことを確認するために、情報収集を導入するコミットの差分を最小化し、ロジックの保存が明確になるようにしました(最終的には、人間によるレビューが信頼の拠り所です)。

バージョン 0.4 以降、SUT を返す関数がテストに含まれるようになっています。新しく作成された SUT は、次の呼び出しの引数として選択される SUT のストアに追加されます。ここでの問題は、並列コンテキストでそれらをどう扱うかです:並列ブランチで作成された SUT はドメイン間で共有されるべきではないため、グローバルなストアに追加することはできません。シンプルな設計として、並列コンテキストに入ったら新しく作成された SUT のストア追加を停止することにしました。ご安心ください、これらの SUT を返す関数は、テストの逐次部分(逐次モードおよび/または並列モードの逐次プレフィックス)で引き続き完全にテストされます。

QCheck-STM テストフレームワークの強みの一つは、コマンドジェネレータの柔軟性です。この柔軟性は QCheck.Gen API 自体と、QCheck-STM コマンドジェネレータが現在のモデルの状態に対してパラメータ化されているという事実から来ています(キーバリューストアの lookup コマンドの生成を考えてみてください。実際に値と関連付けられているキーを検索するコールを生成できる確率を持たせたいでしょう)。自動生成されたコマンドジェネレータはやや単純になりがちです。この単純さを軽減するために、ユーザーが以下を提供できるようにしました:

  • 特定のコマンド生成に適用するウェイト。例えば、work stealing queue のキューを所有すべきでないドメインでの push コマンドの生成を無効化するのに有用です。
  • コマンドジェネレータが現在のモデルの状態に対してパラメータ化されることを活用したい場合の、完全なコマンドジェネレータの実装。

テストを楽しんでください!

OCaml 5.5.0 の第3アルファリリース

octachron によるアナウンス

OCaml 5.5.0 の安定化作業の進展に伴い、OCaml 5.5.0 の第3アルファリリースを発表できることを嬉しく思います。

第2アルファは、再配置可能コンパイラとブートストラップの間に予期しない相互作用が発見されたためリリースされませんでした。この問題は第3アルファで修正されました。

この重要な変更に加え、第1アルファと比べてこの新しいアルファリリースには以下が含まれています:

  • コード生成の修正 2件
  • 型システムの修正 3件
  • 標準ライブラリの修正 1件

(完全なリストは以下の変更履歴をご覧ください)

全体的に、5.5.0 の安定化は順調に進んでいるようで、ほとんどの開発ツールのアルファ版が利用可能です。そのため、4月上旬にはベータリリースに切り替える予定です。

具体的には、エコシステムの安定化の進行状況は opam 上の 5.5.0 準備メタ Issue で追跡されています。

このアルファリリース用のコンパニオン alpha opam リポジトリも利用可能です:

$ opam repo add alpha git+https://github.com/kit-ty-kate/opam-alpha-repository.git

このリポジトリには OCaml 5.5.0 向けに更新中の opam パッケージの進行中のアルファリリースが含まれています。

最終リリースは引き続き5月から6月の間を予定しています。

バグを発見した場合は、Issue トラッカーに報告してください。

新機能とバグ修正の完全なリストに興味がある場合は、更新された OCaml 5.5.0 の変更履歴 をご覧ください。

Happy hacking, OCaml チームを代表して Florian Angeletti

第1アルファからの変更点

  • コンパイラ成果物の修正
    • ブートストラップに対してより友好的な再配置可能コンパイラ
    • js_of_ocaml が報告した compiler-libs 関連の問題を修正するためのブートストラップ
  • コード生成のバグ修正
    • #14583: 特定の状況でコンパイルの誤りを引き起こす可能性があった線形スキャンのスピルヒューリスティックのバグを修正。 (Nicolás Ojeda Bär、Vincent Laviron によるレビュー)
    • #13693#14514: s390x: OCaml のファイバースタックに FPR を保存する PLT 遅延バインディングトランポリンによって libasmrun_shared.so で発生するヒープ破損を修正。s390x コードエミッタで PLT 呼び出しを GOT 間接呼び出しに置き換え。 (Zane Hambly、David Allsopp および Xavier Leroy によるレビュー)
  • 型システムのバグ修正
    • #14434#14652: check_counter_example_pat を多相型から保護し、型の健全性を回復。 (Stephen Dolan および Jacques Garrigue、Alistair O'Brien による報告とレビュー)
    • #14603#14604: 多相型とアンボックスコンストラクタを組み合わせた際の Ctype.apply の失敗を回避。 (Gabriel Scherer および Stefan Muenzel、Brandon Stride による報告、 Florian Angeletti によるレビュー)
    • #14626#14675: オプション引数が消去不可能かどうかを判断する際に、モジュール依存関数を考慮に入れるよう修正。 (Alistair O'Brien および Florian Angeletti、Gabriel Scherer によるレビュー)
  • 標準ライブラリの修正
    • #14635: caml_floatarray_gather のバグを修正。このバグにより、Float.Array.subFloat.Array.appendFloat.Array.concat(空の場合)の結果が [||] と等しくならないことがありました。 (Marc Lasson、Gabriel Scherer によるレビュー)
  • ドキュメントの更新
    • #13590: Windows 上でのランタイムによる * および ? ワイルドカードの自動コマンドライン展開を文書化。 (Benjamin Sigonneau、Nicolás Ojeda Bär によるレビュー)

ocaml-openapi-gen 0.1.0、ocaml-forgejo

Zoggy によるアナウンス

こんにちは、

openapis 仕様からコードを生成するツール ocaml-openapi-gen の最初のリリースを行いました。

openapi_gen パッケージは私の個人 opam リポジトリから入手できます。

このツールは ocaml-forgejo のコード生成に使用されています。ocaml-forgejo は、提供されている REST API を通じて Codeberg やその他の forgejo ベースのプラットフォームと連携するためのライブラリです。

生成されたインターフェースは将来的に変更される可能性があります。

CS6868 並行プログラミング – コース教材

KC Sivaramakrishnan によるアナウンス

現在、IIT Madras で「CS6868: 並行プログラミング」というコースを教えています。このコースの目標は、OCaml 5 を使って並行・並列プログラミングを教え、その後、安全で高速な並列処理のために OxCaml を紹介することです。OCaml 5 の部分はすでに終わり、次は OxCaml を始める予定です。コミュニティとコース教材を共有することが良いと思いました。

https://github.com/kayceesrk/cs6868_s26

CS6868 は OCaml の知識を前提としており、CS3100: プログラミングパラダイムでカバーしています。このコースには、すべての講義、ノートブック、課題を含むYouTube プレイリストがあります。

CS6868 では、並列性の基礎、線形化可能性による正確性の推論、スピンロック・ミューテックス・条件変数を通じた並列プログラミング、メモリ整合性モデル、パフォーマンスの基礎とノンブロッキングデータ構造(ロックフリー連結リスト、キュー、スタック)を構築します。ここでは、The Art of Multiprocessor Programming という書籍に密接に従っています。すべてのコードは OCaml 5 で書き直されています。書籍の内容に加え、コースでは OCaml の緩和メモリモデルもカバーしています。また、qcheck-lin と qcheck-stm を使った並行プロパティベーステストや、TSAN を使ったデータ競合検出など、OCaml 固有のツールも相当量カバーしています。

その後、Control structures in programming languages: from goto to algebraic effects の特定の部分に従って、エフェクトハンドラーの基礎をカバーします。そして、軽量スレッド、バッファードチャネル、選択的通信(Concurrent ML 的な)、ネスト並列プログラミング(domainslib のような)、基本的な非同期IO(Eio のような)を備えた、本格的な Go 風マルチコア対応並行プログラミングライブラリを構築します。

コース教材を通じて取り組めば達成可能なコースプロジェクトも増えています。コースプロジェクトのアイデアがあればお知らせください。

このコースは、過去に行った多くのチュートリアル内容をまとめることを目指しています。フィードバックがあればお知らせください。小さな問題を修正する PR は受け付けますが、現在進行中のコースであるため、大きな PR はおそらく受け付けられません。皆さんが私が作るのと同じくらい楽しんで取り組んでいただけることを願っています。

libinput - Linux 入力デバイス向け OCaml バインディング

Thomas Leonard によるアナウンス

libinput-ocaml(libinput C ライブラリの OCaml バインディング)の最初のリリースを発表できることを嬉しく思います。

libinput は、マウス、キーボード、タッチパッドなどにアクセスするために Wayland コンポジターなどのアプリケーションで使用されています。

Linux input devices (with libinput-ocaml) では、Linux での入力デバイスの動作を説明し、このライブラリを使って小さなゲームを作成する方法を示しています:

87988f00d0f601de559c15f736118a8928c54664.png

OCaml コンパイラ オフィスアワー

このスレッドの続きとして、gasche によるアナウンス

4月3日(金)11:00-12:00 UTC(現地時間では [date-range from=2026-04-03T11:00:00 to=2026-04-03T12:00:00 timezone=UTC])に OCaml コンパイラ オフィスアワーを開催することを提案します。

過去の CWN

CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。また、アーカイブアーカイブの RSS フィードもご覧いただけます。

毎週メールで受け取りたい場合は、caml-list に登録してください。