OCaml Weekly News
こんにちは
2026年3月31日から4月7日までの週の OCaml Weekly News をお届けします。
Table of Contents
- restricted 2.0.0 — プログラムがアクセスできるシステム操作とファイルシステムの範囲を制限する
- 求人情報:CNAF(社会給付機関)における Catala のコンパイラエンジニア
- ocgtk 0.1: GTK 4 向け OCaml バインディング(プレビューリリース)
- out-channel-redirect 0.1 — out_channel の出力をリダイレクト・キャプチャする
- ppxlib.0.38.0
- OCaml コードにおける AI 使用の自発的開示に関する提案
- ブログ:Markdown としての OCaml ドキュメント
- hotseat Squava(小さな LablGtk2 デモ)
- opentelemetry 0.90(および関連ライブラリ)
- Dune 3.22
- 過去の CWN
restricted 2.0.0 — プログラムがアクセスできるシステム操作とファイルシステムの範囲を制限する
removewingman によるアナウンス
こんにちは、
restricted の新バージョンをお知らせできることを嬉しく思います。
このライブラリを使うと、プログラムがアクセスできるシステム操作とファイルシステムの範囲を制限できます。プログラムのできるだけ早い段階で呼び出すことで、それ以降のコードが縮小された権限で実行されるようになります。現在、実際に強制される制限は以下のオペレーティングシステムで実装されています:
- OpenBSD
- Linux(ファイルシステムビューのみ)
他のオペレーティングシステムでも、restricted を使用してプログラムが必要とする権限を文書化できます。ユーザーはその後、pledge on Linux などのツールを使って、プログラムがこれらの宣言を遵守しているかテストできます。ぜひお楽しみください :slight_smile:
CHANGELOG:
- テスト済み環境:
- x86_64 openbsd(16/16 テスト通過)
- x86_64-alpine-linux(Landlock ABI version: 7)(4/12 テスト通過:file_read_unv, file_write_unv, file_create_unv_linux, file_cwrr_unv_linux)
追加
- API: exec promises および accesses をオプション化
- OpenBSD: exec promises
削除
- SystemOperation.TmpPath(非推奨、
pledge (2)を参照)
求人情報:CNAF(社会給付機関)における Catala のコンパイラエンジニア
Denis Merigoux によるアナウンス
[以下はフランス公共部門の求人情報のため、フランス語で記載されています]
Candidatez ici : https://www.lasecurecrute.fr/offre-emploi/ingenieur-expert-en-compilation-langages-de-programmation--f-h/normandie/1065497
La CNAF (Caisse Nationale des Allocations Familiales), tête de réseau des 101 CAF, représente la branche Famille de la Sécurité sociale et a pour mission de piloter la politique familiale et l'aide aux populations en situation de précarité ainsi que la politique d'action sociale.
Au sein de la Direction des Systèmes d'Information (DSI), comptant environ 880 collaborateurs, la Direction Prestations Flux et Décisionnel (DPFD) est découpée en 4 départements et vous serez rattaché au département « Prestations Individuelles et Référentiels Métiers » qui est présent sur les sites de Caen, Le Mans et Rennes.
Ce département a pour mission principale de concevoir, développer et maintenir le système d'information lié aux prestations individuelles (prestations versées aux allocataires telles que l'allocation familiale, l'allocation logement, la prime à la naissance, le RSA, la prime d'activité, …). Le département fournit ainsi des moteurs de règles, ainsi que les spécifications fonctionnelles associées afin de calculer le bon droit, au bon moment, pour les allocations versées par les CAF.
Dans le cadre de projets stratégiques pour la branche famille, la ou le candidat intégrera le centre technique Catala de la CNAF.
Catala est un langage de programmation dédié développé par l'Institut National de Recherche en Informatique et en Automatique (Inria), spécialement adapté à la transformation de spécifications juridiques et réglementaires en code informatique. La CNAF ayant décidé de s'appuyer sur Catala pour les projets de modernisation de son système de calcul des prestations sociales, elle souhaite également internaliser des compétences de maintenance sur l'outillage de Catala au travers de ce poste.
Le centre technique Catala a ainsi vocation à produire des contributions open-source sur Catala, mais aussi à répondre aux besoins d'expertise technique du département « Prestations Individuelles et Référentiels Métiers » pour ses projets liés aux moteurs de calcul des prestations sociales.
採用される方は Inria の Catala チーム(Louis Gesbert、Vincent Botbol、Romain Primet、そして私)と一緒に働くことになります! このポジションについてご質問がある方は遠慮なくご連絡ください :slight_smile:
Catala のコンパイラに関して行われてきたこと・今後行うことの概要はこちら:https://blog.merigoux.ovh/en/2026/02/19/building-proper-pl.html
ocgtk 0.1: GTK 4 向け OCaml バインディング(プレビューリリース)
Chris Armstrong によるアナウンス
GTK 4 向け OCaml バインディングである ocgtk の最初のプレビューリリース(v0.1-preview0)をお知らせできることを嬉しく思います。
これは何ですか?
ocgtk は、GTK 4 ウィジェットツールキットおよびその関連ライブラリ(GDK、GIO、Pango、GdkPixbuf、GSK、Graphene、Cairo)向けの OCaml バインディングを提供します。現時点では OCaml >=5.3 を対象としています。
lablgtk3(長年使われてきた GTK 3 バインディングライブラリ)に触発されており、いくつかのコアコードと多くの設計思想を参考にしています。ただし、API には互換性がありません。lablgtk3 のバインディングが主に手書きであるのに対し、ocgtk は GObject Introspection(GIR)定義ファイルを読み込んで C スタブと OCaml ラッパーの両方を生成するコードジェネレーターを使用しています。これにより、バインディングのカバレッジは手書きの作業量ではなく GIR 定義に追随し、生成されたコードは一貫した手続き型の構造に従っています。
ツーリングに関する注意:コードジェネレーター自体は LLM の大きな支援を受けて開発されました。ただし、実際のライブラリを構成する C スタブと OCaml モジュールという出力は、LLM ではなく GIR 定義からプログラム的に生成されています。
実装済みの内容
- GTK 4、GDK、GIO、Pango、GdkPixbuf、GSK、Graphene、Cairo のバインディング
- クラス、レコード、列挙型、ビットフィールド
- コンストラクター、メソッド、プロパティ
- シグナル(戻り値なし・パラメーターなし)
- 動作するサンプル:GTK 4 の電卓アプリケーション
未実装の内容
これは最初のマイルストーンであり、プロダクション対応のリリースではありません。いくつかの重要な機能はまだサポートされていません:
- インターフェース:GObject インターフェースはまだサポートされていません。これは見た目以上に広範な影響があります。インターフェース型自体が存在しないだけでなく、インターフェースをパラメーターとして受け取ったり返したりするクラス上のメソッドも除外されます。つまり、その他の点ではサポートされているクラスの一部のメソッドがバインディングに含まれない場合があります。
- コールバック:シグナル以外で OCaml のコールバックを引数として受け取る関数はまだサポートされていません。これにより、多くの非同期 GIO API や一部の GTK パターンの使用が制限されます。
- フリー関数:クラスに紐づかないトップレベル関数はまだ生成されません。そのため、一部のユーティリティ API が利用できません。
- 非 opaque なレコードフィールドへのアクセス:非 opaque な GLib/GDK レコードのフィールドはまだ直接読み取ることができません。
- 複数パラメーターのシグナル:ゼロパラメーターで戻り値なしのシグナルのみサポートされており、複雑なシグネチャを持つシグナルは無視されます。
- GLib 型:ほとんどの GLib 型がバインドされていないため、リスト、バイト配列、GVariant(DBus で多用される)を使用するいくつかの有用な API が利用できません。
これらの欠点により、基本的な GTK アプリケーションは構築できますが、より高度なウィジェットの使用、非同期 I/O、またはインターフェースに大きく依存する API では壁にぶつかることが予想されます。
上記の多くに対処するための大まかな計画を記載した ROADMAP.md があります。
ドキュメント
API リファレンスドキュメントは現時点では不十分です。GIR 定義から正確なドキュメントを生成することはこのプロジェクトにとってまだ未解決の問題であるため、生成されたモジュールはほとんどドキュメント化されていません。当面は、GTK 4 のドキュメントが各バインディングに対応するものを理解するための最良のリファレンスです。リポジトリ内のサンプル、特に重要でない GTK 4 アプリケーションを示す電卓サンプルが実際の使用方法を示しています。
安定性
このコードはプロダクション環境でテストされていません。生成されたバインディングは広い表面積をカバーしていますが、テストカバレッジはまだ包括的ではありません。この段階では、プロダクションや安全性が重要なコンテキストでの使用は避けることをお勧めします。コメントや MR は歓迎します。
このコードは Linux 環境以外ではテストされていません。
インストールと使用方法
現時点ではソースコードをダウンロードしてピンしてください(opam リリースの準備中です。クロスプラットフォームの問題を整理するのに時間がかかっているため、利用可能になり次第コメントで更新します)。
バインディングは GTK 4.14.5(Ubuntu 24.04)に対して生成されています。古いバージョンをお持ちの場合、理論上はコンパイルできますが、お使いのバージョンで利用できない API についてはランタイムエラーが発生します。
- リポジトリをダウンロードする:https://github.com/chris-armstrong/ocgtk%EF%BC%88%E3%81%93%E3%81%93%E3%81%A7%E8%A8%98%E8%BC%89%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%86%85%E5%AE%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF v0.1-preview0 タグを使用できます)
- それぞれのサブディレクトリにある conf-gtk4 と ocgtk パッケージをピンする
opam pin conf-gtkopam pin ocgtk
opam install ocgtkを実行する
各ライブラリは ocamlfind レベルで ocgtk.<libname> として公開されています。例えば、dune ファイルに ocgtk.gtk や ocgtk.gdk を追加し、opam / dune-project ファイルでは ocgtk に依存します。
ソースコードと Issue トラッカー:https://github.com/chris-armstrong/ocgtk
フィードバックやバグレポートをお待ちしています。
out-channel-redirect 0.1 — out_channel の出力をリダイレクト・キャプチャする
Hhugo によるアナウンス
out-channel-redirect の最初のリリースをお知らせできることを嬉しく思います。これは out_channel に書き込まれた出力をリダイレクトおよびキャプチャするためのライブラリです。
機能:
- 任意の out_channel を文字列にキャプチャ(stdout と stderr 用の便利な省略記法も含む)
- あるチャネルを別のチャネルへリダイレクト
- native(dup/dup2 経由)、JavaScript(js_of_ocaml)、WebAssembly(wasm_of_ocaml)で動作
- リダイレクトのライフタイムを手動で制御するエキスパート API
インストール:
opam install out-channel-redirect
簡単な例:
let output, result =
Out_channel_redirect.capture_channel some_channel ~f:(fun () →
Printf.fprintf some_channel "hello";
42)
(* output = "hello", result = 42 *)
ppxlib.0.38.0
Nathan Rebours によるアナウンス
ppxlib チームは ppxlib.0.38.0 のリリースをお知らせできることを嬉しく思います。
このリリースの主な機能は OCaml 5.5 のサポートと、OCaml 5.4 および 5.3 のサポートの改善です。また、いくつかのバグ修正と新しい API エントリも含まれています。詳細なリリースノートはこちらでご覧いただけます。
これはこのスレッドで新しいコンパイラサポートのアプローチを発表して以来の最初のリリースです。>= 5.3 のコンパイラバージョンへのサポートはすべてこの技術を使用して実装されており、新しい言語機能は AST にエンコードされています。ラベル付きタプルやエフェクトパターンなど、それらを操作するための Ast_builder および Ast_pattern 関数を追加しました。これらはこちらとこちらの API ドキュメントでご覧いただけます。また、新しいマニュアルセクションでそれらの使用方法を示しています。現在の内部 AST(5.2)では表現できない他の新しい言語機能を生成または使用することに興味がある場合は、issue を開いていただければ、関連するヘルパーを追加します。
エコシステムがまだ 5.2 AST のバンプと ppxlib.0.36.0 から回復していない中、さらなる破壊を導入することなく新しいコンパイラのサポートを追加し、メンテナンスの負担を ppxlib の範囲内に収めることができることを嬉しく思います。
今後このアプローチをさらに実用的にするために、コンパイラチームとの議論を始めました。
このリリースで唯一の外部コントリビューターである @ceastlund に感謝します。
個人的には、このリリースを完成させるのを助けてくれた @patricoferris、そして ppxlib における私の作業に資金提供してくださった OCaml Software Foundation と OCamlPro に感謝します。
お読みいただきありがとうございます。良い前処理を!
OCaml コードにおける AI 使用の自発的開示に関する提案
Anil Madhavapeddy によるアナウンス
皆さん、
opam メタデータとソースコードの拡張属性を使用して、公開された OCaml コードにおける AI 使用を自発的に開示できるようにする ocaml-ai-disclosure 提案をまとめました。
リポジトリとブログ投稿に詳細、属性を抽出するためのプロトタイプツール、そして FAQ があります。簡単に言えば、HTML 向けの W3C 開示提案に非常に似たものを提案しています。
パッケージレベルの開示
opam パッケージは拡張フィールドを使用して開示を宣言できます:
x-ai-disclosure: "ai-assisted" x-ai-model: "claude-opus-4-6" x-ai-provider: "Anthropic"
注意:最終的な提案ではこれが値のリストになる可能性がありますが、趣旨はご理解いただけると思います。
OCaml モジュールレベル
OCaml は拡張属性をサポートしており、コンパイル単位全体に適用されるフローティング属性を通じてこれを使用します:
[@@@ai_disclosure "ai-generated"] [@@@ai_model "claude-opus-4-6"] [@@@ai_provider "Anthropic"] let foo = ... let bar = ...
これらは単一のバインディングに適用される宣言属性を介してより細かくスコープを設定することもできます:
[@@@ai_disclosure "ai-assisted"] let human_written x = ... let ai_helper y = ... [@@ai_disclosure "ai-generated"]
開示は W3C HTML 提案と同様の最近接祖先継承モデルに従い、明示的なアノテーションが継承された値を上書きします。
詳細についてはブログ投稿を書きました。また、いくつかの影響についての提案リポジトリの FAQ もご覧ください。
他の言語エコシステムが同様のことを試みている先行事例は見つけられませんでしたので、皆さんがご存知のものがあればぜひ教えてください。より広いエコシステムでこれに興味を持つ方がいなければ、自分自身で使用するだけですが、議論を始めることに害はないと思いました!
ブログ:Markdown としての OCaml ドキュメント
David Sancho によるアナウンス
odoc の Markdown バックエンドについて、そしてそれを使って melange.re のドキュメントをより良くした方法についてのブログ投稿を公開しました。お楽しみいただければ幸いです:
https://sancho.dev/blog/ocaml-documentation-as-markdown
これを可能にした作業をレビューしてくれた @jonludlam、@rgrinberg、@Alizter に感謝します。
hotseat Squava(小さな LablGtk2 デモ)
Damien Guichard によるアナウンス
Squava 1.1 はベクターグラフィックを持ちませんが、./squava.png を編集・縮小・拡大すると、プログラムが新しいピックスマップを使用してボードを適応させます。
opentelemetry 0.90(および関連ライブラリ)
Simon Cruanes によるアナウンス
こんにちは、
opentelemetry 0.90(および opentelemetry-client、opentelemetry-client-cohttp-lwt など)をお知らせできることを大変嬉しく思います。
Opentelemetry は https://opentelemetry.io/ の OCaml 向け実装です。コアの クライアント API(ライブラリなどのインストルメンテーション用)と、各種 エクスポーター を備えたフル SDK の両方をカバーしています。Trace と互換性があります。
このリリースは数ヶ月の作業の成果であり、1.0 前の最後のリリースの一つになることが期待されます。changelog は非常に大きく、多くのことを見直しました。主な変更点は以下の通りです:
- ocaml-protoc/pbrt 4.0 への移行(ミュータブルフィールドと異なる protobuf コードジェネレーターを持つ)
- API が https://opentelemetry.io のガイドラインに近くなった(まだ完全ではないが改善)
- シグナルの内部処理のモジュール性が大幅に改善され、コードの再利用が向上し、すべてがプラグイン可能に、キューイング/バッチング、HTTP リトライも改善
- protobuf の代わりに JSON としてエクスポートするサポート
- trace 0.11 のサポート。これにより
opentelemetry.traceはグローバル OTEL エクスポーター以外のすべてのグローバル状態を排除できるようになった - ライフサイクルとクリーンアップの改善
API ドキュメントはこちらでご覧いただけます。いつものように、フィードバックやバグレポートなどは大歓迎です。
Dune 3.22
このスレッドの続きとして、Shon によるアナウンス
Dune チームは dune 3.22.1 のリリースをお知らせできることを嬉しく思います。
このリリースで問題が発生した場合は、Issue トラッカーにご報告ください。
修正内容
- Windows 7 との互換性を復元 (#13905, @nojb)
dune testがデフォルトコンテキストのみでテストを実行するようになりました。単一のコンテキストがある場合、それがデフォルトとして扱われます。これにより、ワークスペースに "default" という名前のコンテキストがない場合のクラッシュが修正されます。(#13930, fixes #13904, @Alizter)dune trace cat --chrome-traceが、タイムスタンプと期間をマイクロ秒の精度で提供することで Chrome Trace Event Format に準拠するよう修正しました (#13911, fixes #13906, @Alizter)
過去の CWN
CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。またはアーカイブやアーカイブの RSS フィードをご覧ください。
毎週メールで受け取りたい場合は、caml-list に登録してください。