TL;DR
スキーマをデータとして定義する、Clojure と ClojureScript 向けのデータ仕様ライブラリ。metosin が開発しており、README では「高性能でデータ駆動のデータ仕様ライブラリ」と説明されている。
なぜ必要か
Clojure は動的型付けなので、データの形が正しいかを実行時に確かめる手段が必要になる。たとえば Biff では、スキーマレスなデータベースの XTDB に対して、Malli でスキーマを明確にし、不正なデータを防いでいる。
仕組み
README によると、スキーマはデータとして書き、既定では hiccup に倣ったベクタ構文([:string {:min 1, :max 10}] など)を使う。マップ構文やより簡単な Lite 構文もある。主な機能は次のとおりである。
- 値の検証と変換
- スペルチェック付きのエラーメッセージ
- スキーマからの値の生成と、サンプル値からのスキーマの推論
- 関数スキーマと、その動的・静的なチェック
- JSON Schema や Swagger2 への変換
例
README の Quickstart では、定義したスキーマ User に対して m/validate で値を検証している。
(m/validate User *1)
; => true注意点
ClojureScript (Squint) で React フロントエンド開発 2025 年版によると、Squint では既存の ClojureScript の資産を使えないので、Malli も使えない。