ニュース

Clojure 1.13.0-alpha1、チェック付きデストラクチャリングキーを追加

Clojure 1.13.0-alpha1では、マップデストラクチャリングのチェック付きキー、キーワード専用PersistentArrayMapのしきい値拡大、静的初期化子からACC_FINALの削除が導入されました。

July 6, 2026· 1 min read
Clojure 1.13.0-alpha1、チェック付きデストラクチャリングキーを追加

Clojure 1.13.0-alpha1がリリースされ、現役エンジニア向けの品質向上機能がいくつか追加されました。目玉機能はマップデストラクチャリングにおけるチェック付きキーです。これは長らく要望されていたエルゴノミクス改善で、ボイラープレートなしで必須バインディングを強制できるようになります。

チェック付きキー: :keys!:syms!:strs!

デストラクチャリングディレクティブのバングバリアント — :keys!:syms!:strs! — を使用すると、指定したキーがマップに存在しない場合に例外をスローできます。これにより、必須キーがバインドされていることを保証したい場合に、手動でgetを呼んだりパターンマッチングの回避策を使う必要がなくなります。さらに、どのディレクティブでも&の後にキーを含めて、バインドせずにドキュメントやバリデーション目的で使用できるようになりました。この機能はCLJ-2961で追跡されており、付随するスペックも提供されています(CLJ-2960)。

関連するユーティリティとして、req!getのバリアントで、キーが見つからない場合に報告します(CLJ-2949)。また、letlooplet*では&をローカルバインディング名として使用できなくなり(CLJ-2954)、微妙な落とし穴を防止します。

PersistentArrayMapのしきい値引き上げ

キーワードキーのみで構成されるPersistentArrayMapは、PersistentHashMapに変換される前に最大サイズ64(従来は8)まで成長するようになりました。この範囲ではPAMの同一性スキャンがPHMのルックアップよりも効率的なため、この変更によりより多くの使用箇所がモノモーフィックになり、JITが最適化しやすくなります。ホットパスにとっては小さいながらも歓迎すべき改善です。

バイトコードベースラインの準備

静的初期化子定数からACC_FINAL指定が削除されました(CLJ-2891)。これはJavaバイトコードベースラインを新しいベリファイアチェックに対応させるための準備段階であり、まだユーザー向けの変更ではありませんが、ランタイムの方向性を示しています。

入手方法

deps.ednの依存関係を更新してください:

org.clojure/clojure {:mvn/version "1.13.0-alpha1"}

または、Clojure CLIでREPLを起動:

clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.13.0-alpha1"}}}

これはアルファリリースですので、安定版カットまでにさらに磨きがかかるでしょう。チェック付きキー機能だけでも、存在を強制するデストラクチャリングを望んでいたなら試す価値があります。