Kotlin/Wasmでサーバサイドアプリケーションを開発するフレームワーク「KoWasm」が登場。WebAssemblyのガベージコレクションやコンポーネントの活用を想定

2023年4月5日

JetBrainsでKotlinの開発を担当するZalim Bashorov氏と、VMwareでSpring Frameworkのコミッタとして働くSébastien Deleuze氏は、Kotlinで書かれたコードをWebAssemblyバイナリにコンパイルする機能を備えた「Kotlin/Wasm」を用いて、WebAssemblyベースでサーバサイドアプリケーションを開発するフレームワーク「KoWasm」を発表しました

fig

KoWasmの開発にはKotlinおよびKotlin/Wasmの開発元であるJetBrainsのKotlin/Wasmチームと協力しているとのことです。

Kotlin/WasmはWebブラウザ上のアプリを想定していた

KoWasmの説明の前にKotlin/Wasmについて説明しましょう。Kotlin/Wasmは、Kotlinで書かれたコードをWebAssemblyバイナリとするコンパイル機能を搭載した、Kotlinのマルチプラットフォーム対応プロダクトの1つです。

今年(2023年)2月のKotlin 1.8.20ベータ版で、KotlinにKotlin/Wasmが加わりました。

参考:KotlinからWebAssemblyバイナリを生成するコンパイラ搭載、「Kotlin/Wasm」が試験的プレビュー公開。Kotlin 1.8.20ベータ版で

ただし現時点でKotlin/Wasmを利用するには、WebAssemblyのガベージコレクション機能が要求されます。そのため、Google ChromeもしくはFirefoxで開発者向けのフラグを操作してWebAssemblyのガベージコレクション機能を設定する必要があります。

KotlinはもともとJavaVM言語の1つとして登場し、2017年にAndroidの正式な開発言語になったことで急速に注目度を高めました。

その後、Kotlinの開発元であるJetBrainsは、iOSやWindowsアプリケーションの開発に対応するKotlin/Nativeや、サーバアプリケーションの開発に対応するKotlin/JVM、Webアプリケーションの開発に対応しJavaScriptを生成するKotlin/JSなどマルチプラットフォームに対応した言語への進化を進めてきました。

Kotlin/WasmはそうしたKotlinのマルチプラットフォーム戦略の1つであり、Webブラウザ上で実行されるWebAssemblyアプリケーションをKotlinで開発することが想定されていました。

WebAssemblyのガベージコレクションやコンポーネントの活用を想定

しかしガベージコレクション機能がChromeやFirefoxなどのWebブラウザだけでなく、Node.jsのJavaScriptエンジンであるV8や、スタンドアロンのWebAssemblyランタイムであるWasmtimeやWasmEdge、Wasmerでもサポートされることを想定すると、Kotlin/Wasmを用いてサーバサイドのアプリケーション開発が現実味を帯びてきます。

KoWasmはWebAssemblyのガベージコレクション機能だけでなく、OSなどのプラットフォームを抽象化してアクセスできるWASI(WebAssembly System Interface)やWebAssemblyのコンポーネント機能など、現在仕様策定や開発が進められている技術が機能し始める状況を想定したサーバサイド向けのフレームワークだと説明されています。

参考:WebAssemblyの「WASI Preview 2」で、WebAssemblyコンポーネントの組み合わせによるアプリケーション開発を実現へ

下記はそのビジョンを示した図で、次のような想定がなされていることを示しています。

  • WebAssemblyのガベージコレクションが機能するようになればKotlinを始めとしたJava言語での利用がはじまる(図右)
  • Webブラウザだけでなくクラウドやエッジサーバなどの環境でスタンドアロンのWebAssemblyランタイムが稼働することで、WebブラウザのフロントエンドとクラウドやエッジのバックエンドのどちらでもWebAssemblyのアプリケーションが実行可能になる(図左)
  • バックエンドではWASIによってファイルシステムなどプラットフォームの機能が抽象化されてアクセスできるようになる
  • WebAssemblyコンポーネントによって、Node.jsのnpmのように、さまざまな言語(主に低レベル)で作られたWebAssemblyベースのさまざまなコンポーネントが利用可能になる
  • WebAssemblyコンポーネントのリポジトリとしてWargが使われる
fig

KoWasmは、Kotlinのマルチプラットフォーム対応のライブラリを基盤に、HTTPルーティング機能やKotlin DSLによるHTMLコンテンツの生成機能などが含まれる見通しです。

現時点ではKoWasmのアプリケーションはWASIとWebAssemblyガベージコレクションが試験的に実装されているNode.jsを用いてデプロイします(下図左)。

今後スタンドアロンのWebAssemblyランタイムにもWebAssemblyガベージコレクションが実装されるようになれば、WASIを使ってHTTPを実装できるようになるため、Node.jsに依存せず、さまざまなスタンドアロンのWebAssemblyランタイムにデプロイできるようになることが想定されています(下図右)。

fig

代表的なコンテナランタイムであるcontainerdには、WebAssemblyランタイムをコンテナとみなすインターフェイス「runwasi」が統合されているため、Kubernetesなどのコンテナ環境にもそのままWebAssemblyサーバアプリがデプロイできそうです。

参考:コンテナランタイムのcontainerdに、WebAssemblyをコンテナとして扱うための「runwasi」が統合。これからのコンテナランタイムはWebAssemblyと統合されていく

KoWasmは5月にバージョン0.1のリリースを目指しているとのことです。

あわせて読みたい

WebAssembly プログラミング言語 Kotlin




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本