OCaml Weekly News

先週号 上へ 次週号

こんにちは

2026年6月2日から9日までの週の OCaml Weekly News をお届けします。

Table of Contents

Richard Bird Distinguished Dissertation Award

François Pottier が発表しました

OCaml ユーザーの皆さん、こんにちは。 関数型プログラミングに関連するテーマで 2025 年に博士号を取得された方、またはそのような学生をお持ちの方は、新設された Richard Bird Distinguished Dissertation Award にご応募いただけます。以下に告知文を転載します。

===============================================================

候補者募集のお知らせ

Richard Bird Distinguished Dissertation Award 2025

締め切り:2026年8月31日

http://tinyurl.com/jfp-bird-award

===============================================================

概要

Journal of Functional Programming は、関数型プログラミングにおける優れた博士論文を表彰するため、Richard Bird Distinguished Dissertation Award を設立しました。

Richard Bird(1943–2022)は、関数型プログラミングの分野を牽引した第一人者のひとりです。Oxford 大学の教授として Algebra of Programming グループを創設し、Computing Laboratory の所長を務めました。Richard は、明快かつエレガントな記述の高い基準を確立した関数型プログラミングに関する数多くの著書と「パール」で広く知られています。この分野においてこうした価値観をさらに奨励するために、彼の名を冠した賞が設立されることは誠にふさわしいことと言えます。

本賞には £1,000 の賞金が贈られます。賞金の財源は、関数型プログラミングの発展を目的として Richard 自身から寄せられた寄付によって支えられています。

選考基準

対象となる論文は、2025 年中に完成したものに限ります。機関によって、口述試験の日付、修正承認日、学位授与式の日付など、完成日の定義が異なる場合があります。

本賞は JFP の対象範囲内のすべてのトピックに開かれており、特に Richard 自身の価値観である明快さ・簡潔さ・エレガンスを体現した論文を重視します。審査対象となる論文は以下の条件を満たす必要があります。

  • 高水準の記述に達していること;
  • 分野において注目すべき貢献をなしていること;
  • 結果をコンピュータサイエンスの広い文脈に位置づけていること。

推薦方法

2026年8月31日までに、以下の情報を審査委員長 graham.hutton@nottingham.ac.uk 宛にご提出ください。

  • 推薦理由を説明する推薦状 2 通。1 通は指導教員から、もう 1 通は候補者と利益相反のない独立した立場の方(外部審査員や分野の専門家など)からのものとしてください。
  • 論文本体のコピー。

審査委員会

  • Graham Hutton(委員長)、University of Nottingham
  • Matthew Flatt、University of Utah
  • Jeremy Gibbons、University of Oxford
  • François Pottier、INRIA
  • Wouter Swierstra、University of Utrecht
  • Ningning Xie、University of Toronto

JFP の編集長は委員会のオブザーバーとして参加します。

===============================================================

Pyro Caml 発表:OCaml 向け継続的プロファイラー

Austin Theriault が発表しました

皆さん、昨年 Fun OCaml で observability に関するワークショップを行った際、継続的プロファイリングについて何が利用可能かを尋ねてくださった方が何人かいましたが、当時は OCaml を直接サポートするソリューションを把握していませんでした。

その後、開発に取り組む機会を得て Semgrep の本番環境に導入し、数ヶ月間の実運用テストを経て、Pyro Caml が公開されました。opam でもご利用いただけます。

ocaml-rs、runtime event システム、memprof など、多くの優れた OCaml ツールを活用できたので、実に楽しい開発でした 😄。詳細にご興味のある方は、こちらのブログ記事をご覧ください。

現在は CPU プロファイリングのみ対応していますが、今後数ヶ月のうちにメモリ/GC プロファイリングの追加も検討しています。ぜひご活用ください!

awso 0.9.1:400 以上の AWS API に対するタイプセーフなカバレッジ

Michael Bacarella が発表しました

OCaml ファンの皆さん、こんにちは。

`terraform plan` が 10 分後になってタイポを指摘してくることにうんざりしていませんか?クラウドの型が曖昧すぎることに不満を感じていませんか?(Abe Simpson がクラウドに向かって拳を振り上げているあのシーンのように)

あるいは、信頼できるエコシステム内で AWS ライブラリを使いたいと思っていませんか?

このリリースはまさにそんな方のためのものです!

awso、包括的な AWS ライブラリを発表できることを嬉しく思います。これは https://github.com/solvuu/awsm からフォークされたもので、opam には公開されていませんでした。awso は botocore のサービス定義から生成された、型付きの OCaml バインディングを AWS サービスに提供します。これにより、コンパイラがタイポや型の不一致を検出してくれます。

awso リポジトリ: https://github.com/mbacarella/ocaml-awso

内容

botocore 1.43.9 から生成された、AWS の全サービスに対応する型付きクライアント

4 つの I/O バックエンド:

  • awso-eio - Eio
  • awso-async — Async
  • awso-lwt — Lwt
  • awso-sync — libcurl による同期(ブロッキング)、スクリプトや CLI に最適

その他

  • awso-cli: 楽しみのために、Python の aws CLI の精神に倣い、全サービスを組み合わせ可能なサブコマンドとして公開するキッチンシンクバイナリ(約 400 のネイティブサービスライブラリをリンクすると ARM64 の実行ファイルサイズ制限を超えるため、バイトコードとして提供されます;本当の話です)

注意:AWS API は非常に大きいため、opam install には時間がかかる場合があります。

Eio を使ったサンプル

(* ec2_describe_instances.ml *)
module Ec2 = Awso_ec2_eio

let print_row a b c d = Printf.printf "%-16s  %-15s  %-39s  %-20s\n" a b c d

let print_instance instance =
  let name =
    Option.bind instance.Ec2.Instance.tags (fun tags ->
      List.find_map
        (function
          | { Ec2.Tag.key = Some "Name"; value = Some v } -> Some v
          | _ -> None)
        tags)
  in
  let instance_type =
    match instance.instanceType with
    | Some it -> Ec2.InstanceType.to_string it
    | None -> ""
  in
  print_row
    instance_type
    (Option.value instance.publicIpAddress ~default:"")
    (Option.value instance.ipv6Address ~default:"")
    (Option.value name ~default:"")
;;

let main env =
  let cfg = Awso_eio.Cfg.get_exn ~env () in
  match Ec2.describe_instances ~cfg (Ec2.DescribeInstancesRequest.make ()) with
  | Error e ->
    failwith
      (Printf.sprintf
         "Ec2.describe_instances: %s"
         (Yojson.Safe.to_string (Ec2.Ec2_error.to_json e)))
  | Ok { reservations; _ } -> (
    let instances =
      reservations
      |> Option.value ~default:[]
      |> List.concat_map (function
        | { Ec2.Reservation.instances = None; _ } -> []
        | { instances = Some instances; _ } -> instances)
    in
    match instances with
    | [] -> print_endline "no instances"
    | instances ->
      print_row "instance-type" "public ipv4" "public ipv6" "name";
      print_row
        (String.make 16 '-')
        (String.make 15 '-')
        (String.make 39 '-')
        (String.make 20 '-');
      List.iter print_instance instances)
;;

let () = Eio_main.run main

awsm からのフォークにおける主な変更点

  • 軽量な高階多相の代わりに functor を使ったアプローチを採用(アーキテクチャ上の詳細:エンドユーザーが functor を使う必要はありません!)
  • aws/{eio,async,lwt,sync}/ に再構成し、各バックエンドが必要なものだけを含むように
  • opam-repository チームの助言に従い、サービスごとの opam パッケージを各バックエンドのサブライブラリに統合。`opam install awso-async` で全サービスバインディングが awso-async として取得できます
  • トランスポートエラーは例外を投げるようになり、Result 型を汚染しなくなりました。AWS 側のエラーのみが Result に残ります。これは Async の慣習に合致しています
  • 小さな Jane_compat シムを通じて非 Async ランタイムから Jane Street Core を除外;アドホックな JSON の代わりに Yojson.Safe.t を全面採用;Base は一部のリライタや他のツールに引き続き必要ですが、Core 全体よりずっと軽量になっています
  • コード生成結果をツリーにコミットすることで、opam install 時に約 25 のビルド時パッケージが依存関係に引き込まれないようになりました
  • AWS 自体が required とマークしたフィールドを日常的に省略するため(あなたのことですよ、Message のない AccessDeniedException)、出力シェイプでは required をアドバイザリーとして扱います。入力シェイプは引き続き respect します
  • 動作するサンプルはこちら

opam からインストールするには OCaml 5.3.0 以上が必要です。スタック制限を引き上げれば OCaml 4.14 でもビルド可能です。

変更の全一覧は CHANGES.md を、既知の課題は TODO.md をご参照ください。

少し歴史について

OCaml の AWS バインディングの系譜はこのフォークより何年も前に遡り、Solvuu での多大な開発と Tarides との協力によって成り立っています。また、Jane Street のご貢献にも特別な感謝を申し上げます。以前にオープンソース化されてから、しばらく静かに置かれていました。

awso は、それを刷新し、現在の OCaml に対応させ、コミュニティが活用できる場所を提供しようとする試みです。このプロジェクトの基盤となったすべての方々の仕事に心から感謝します!内部には優れたエンジニアリングが詰まっており、引き続き動き続けるべきものです。

クレジットを正確にしたい

公開 solvuu リポジトリのコードは内部リポジトリからコピーペーストされたものであるため、公開 git の履歴には貢献者全員が反映されていません。以前のバージョンに携わっており、クレジットに名前を載せてほしい方は、ぜひご連絡ください。

今後の展望

0.9.1 は 1.0.0 に向けたリリース候補品質のベースラインとして位置づけています。近期的には:TODO.md の対応と、より多くの動作サンプルの追加。Issue や PR は歓迎します。特に実運用からのバグレポートをお待ちしています。

4.14 でも動作しますが、OCaml コンパイラの一部の非末尾呼び出し最適化部分を回避するために、スタックサイズを少し増やす必要があります。opam-ci で OCaml 4.14 を通過させるために処理を別の方法で分割できるか検討中です。

TODO.md の項目を GitHub Issues に転記する間、少々お待ちください。また、このリリースで何が不足しているかについてもぜひお聞かせください。

AI 利用に関する開示

この作業のほとんどは、複数の人間が数年にわたって直接コーディングしたものです。私自身のプロジェクトへの貢献の大部分は 2022 年に行われた、ppxlib へのポート、OCaml 5 での動作、対応サービスを少数から数百に拡大する作業(バグ修正、欠落サポート、botocore spec エラーの回避)でした。これらの作業の多くは LLM の時代以前に行われました。「生成されたコード」が「OCaml によって生成された」を意味していた時代を覚えていますか?私は覚えています。

その後、opam リリースに向けた作業では Claude Code with Opus 4.7 を活用しました:主にリファクタリング、最新の botocore spec へのキャッチアップ、依存関係の削減に使用しました。awso のすべてのコードを私は理解しており、責任を持てることをここに宣言します。

最後に

特に API のエルゴノミクスに関するフィードバックをお待ちしております。

<3 Michael

Plan 9 向け OCaml 4.14.3

Eduardo Cavazos が発表しました

皆さん 🙋‍♂️

Plan 9 向け OCaml 4.14.3 のポートをいろいろ試しています:

https://github.com/dharmatech/ocaml

ネイティブコンパイラはまだ対応していません。バイトコードのサポート、repl などのみです。

0b5d1dbf8b4ae9b3918143a6a790d19f422280bf.png

OCaml Workshop 2026 トーク提案募集

このスレッドを続けて、Sudha Parimala が発表しました

ウェブサイトが https://ocaml.org/ocaml-workshop-2026 で公開されました。最新情報はこちらをご参照ください!

提出締め切りはおよそ 3 週間後です!ぜひご自身の研究をご投稿ください。

Ahrefs OCaml グラントプログラム

このスレッドを続けて、Louis Roché が発表しました

グラントの受賞者は以下の通りです:

過去の CWN

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

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