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 とは?
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 モジュールの出力は、GIR 定義からプログラム的に生成されたものであり、LLM によって書かれたものではありません。
実装済みの機能
- 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%AA%AC%E6%98%8E%E3%81%97%E3%81%9F%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 に依存するように設定してください。
ソースとイシュートラッカー: https://github.com/chris-armstrong/ocgtk
フィードバックやバグ報告を歓迎します。
out-channel-redirect 0.1 — out_channel の出力をリダイレクト・キャプチャする
Hhugo が発表しました
out_channel への出力をリダイレクト・キャプチャするためのライブラリ、out-channel-redirect の最初のリリースをお知らせします。
機能:
- 任意の out_channel を文字列にキャプチャ(stdout および stderr 向けの便利な短縮形あり)
- 一方のチャンネルを別のチャンネルにリダイレクト
- ネイティブ(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)では表現できない他の新しい言語機能の生成や消費に興味がある場合は、関連するヘルパーを追加できるようイシューを開いてください。
エコシステムがまだ 5.2 AST の変更と ppxlib.0.36.0 から回復しきっていない中、さらなる破壊を導入することなく新しいコンパイラーのサポートを追加し、メンテナンスの負担を ppxlib の範囲内に収められることを嬉しく思います。
このアプローチをより実現可能にするため、コンパイラーチームとの議論も開始しています。
このリリースで唯一の外部コントリビューターである @ceastlund に感謝します。
個人的には、リリースを助けてくれた @patricoferris、そして ppxlib での私の作業に資金を提供してくれた OCaml Software Foundation と OCamlPro に感謝します。
お読みいただきありがとうございます。Happy preprocessing!
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 は OCaml 向けの https://opentelemetry.io/ の実装で、ライブラリなどのインストゥルメンテーション用のコア クライアント 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 のリリースをお知らせします。
このリリースで問題が発生した場合は、イシュートラッカーにご報告ください。
修正内容
- Windows 7 との互換性を復元 (#13905, @nojb)
dune testがデフォルトコンテキストのみでテストを実行するようになりました。コンテキストが1つの場合、それがデフォルトとして扱われます。これにより、ワークスペースに "default" という名前のコンテキストがない場合のクラッシュが修正されます。(#13930, fixes #13904, @Alizter)dune trace cat --chrome-traceがマイクロ秒単位のタイムスタンプと所要時間を提供することで Chrome Trace Event Format に準拠するよう修正 (#13911, fixes #13906, @Alizter)
過去の CWN
CWN を見逃した場合は、メッセージを送っていただければメールでお送りします。また、アーカイブやRSS フィードもご覧いただけます。
毎週メールで受け取りたい場合は、caml-list を購読してください。