Scalaを少しだけ使いやすくするAirframe: Updates 2023

Taro L. Saito
Airframe
Published in
Dec 31, 2023

AirframeはScalaでの開発を支援するOSSライブラリ集です。Scalaというプログラミング言語は、オブジェクト指向と関数型言語の良いところ取りをした言語で拡張性が優れているため、静的型付けを活かした高速化とコードの品質を同時に追い求められるような開発経験の深いエンジニアほどその恩恵にあずかりやすいのが特徴です。Scalaを使い始めて10年以上になっていますが、年々できることが増えていて手放せない言語になっています。

2023年には、Scala 3への完全対応、HTTP/RPCバックエンドのNettyへの切り替え、Futureに替えてRx (reactive)インターフェースでの非同期(async)処理の標準化、RxによるDOMレンダリング機能の強化(tap, onMountなど)、DuckDBサポート、JDK21、Node.js 20への対応、SQLコンパイラの機能・品質改善など、多くの更新がなされました。リリースノートをPull Requestのタイトル、ラベルからGitHub Actionで自動生成するようにしたことでメンテナンスも楽になりました。

他にもscala-cliでもAirSpecなどが動くようになり、手軽に使い始められます。

AirframeのSQLコンパイラは、現在、差分プライバシー(Differential Privacy)の技術を取り入れたクエリエンジンサービスのコアとして、プロダクションでも使われています。この内容は2023年12月のTrino Summit 2023で紹介しました。

Scala.jsを活用したUI開発では、Vite.jsと組み合わせることで、コードを変更するなりブラウザに反映されるというインタラクティブなUI開発体験が実現され快適になってきました。RPCと合わせると、フロントエンド・バックエンドを同じScalaで統一できるため、学習曲線が低くなります。Scalaすら知らなかった同僚が、たった1日でRPCと通信するUIコードを書けるようになったり、社外でもAirframe RPCを試してくれる方が出てきたりもしました。

バックエンド、フロントエンドの双方を同時に作れるようになると、ちょっとしたデータからでもUIを作って情報を共有するなどが短期間で開発できるようになりました。以下はサービスの利用状況をAirframe RPCとRxで可視化した内部サービスのスクリーンショットです。今まで複雑な分析クエリを書ける一部の人でないと得られなかったデータを、社内の多くの人に手軽に届けられるようになりました。

テストフレームワークであるAirSpecも、shouldContain, shouldMatchなど便利な構文が追加され、同僚のTakezoeさんがInteliJ用のプラグインも作成してくれました。VSCodeとMetalsの組み合わせではこのようなプラグインなしでもテスト実行ができます。

Scala 3への対応も一通り終わりScalaの機能を拡張するライブラリとしての役割が落ち着いてきたので、2024年はAirframeとScala 3を最初から使ったアプリケーションの開発をいろいろ進めていこうと考えています。特にScala 2との互換性が必要ない新しいプロジェクトではEnumOptional BracesをはじめとするScala 3の簡潔なシンタックスを気兼ねなく使えるようになってきたので、また新たな楽しみとなっています。

関連

--

--

Taro L. Saito
Airframe

Ph.D., researcher and software engineer, pursuing database technologies for everyone http://xerial.org/leo