Ecosystem News

WebAssembly 用の Kotlin がアルファ版に

Read this post in other languages:

Kotlin Multiplatform の最新ターゲットプラットフォームである Kotlin/Wasm がアルファ版になりました! この変更について知っておくべき点をまとめました:

  • Kotlin/Wasm が JetBrains によってアルファ版に昇格され、皆さんにもお試しいただけるようになりました。 皆さんのフィードバックは、Kotlin を使ったウェブアプリケーションの未来を形成するのに役立ちます!
  • アルファリリースの Kotlin/Wasm は本番前のシナリオで使用できる状態ですが、まだ開発中の部分がたくさん残っています。 コミュニティの皆さんを頼りに Kotlin/Wasm に影響を及ぼす決定事項を通知し、優先順位を付けます。
  • Compose for Web(現時点では実験的機能)は Kotlin/Wasm を使用しています。 これら 2 つのテクノロジーを組み合わせることで、100% Kotlin のウェブアプリケーション用の宣言型ユーザーインターフェースを作成できます。

Kotlin/Wasm を使い始める

WebAssembly: Kotlin Multiplatform の最新ターゲット

WebAssembly はブラウザーをターゲットとする言語の標準コンパイルターゲット以上の地位を確立しつつあります! Kotlin/Wasm では Kotlin Multiplatform を通じてこの新しいターゲットを利用する機能を提供しています。 私たちは Kotlin 1.8.20 で Kotlin/Wasm を実験的テクノロジーとして導入した後、改良に改良を重ねました。

Kotlin は自動的にメモリを管理する言語であるため、最近フェーズ 4(標準化)に達したガベージコレクションの提案に基づいて構築されています。 つまり、今では多くの主要ブラウザーでデフォルトで使用できます。 たとえば、Chrome と Firefox の最近のバージョンでは何も調整しなくても Kotlin/Wasm アプリケーションを実行できます。 Safari は現時点では Wasm GC をサポートしていませんが、JavaScriptCore で必要な機能の実装はすでに進行中です。

はじめの一歩: Kotlin/Wasm

Kotlin/Wasm コミュニティに参加する

Kotlin/Wasm を使い始めるには、「はじめに」ページを参照するのが簡単です。 このテクノロジーの概要と独自の Kotlin/Wasm アプリケーションをセットアップするための手順がそこに記載されています。 また、ブラウザーでの使用方法や Compose Multiplatform との併用など、Kotlin/Wasm のさまざまな側面を紹介するプロジェクトやサンプルプロジェクトへのリンクもあります。

Kotlin/Wasm がアルファになりました: テクノロジーとサンプルプロジェクトを確かめてください

Kotlin Playground も Kotlin/Wasm をサポートするようになったため、ブラウザーで直接初めての WebAssembly コードスニペットを書き、Kotlin/Wasm が提供する機能を確かめることができます。

WebAssembly で最初の「Hello World」サンプルを超えるものを作成できるよう、Kotlin/Wasm に `kotlinx` ライブラリ一式も導入しています。 このライブラリには kotlinx-atomicfukotlinx.coroutineskotlinx.serializationkotlinx-datetime、および kotlinx-io が含まれています。

ネットワーク対応アプリケーションを構築するための JetBrains フレームワークである Ktor も WebAssembly に導入されます。 次のリリースでは、Ktor の HTTP クライアントを使用して Kotlin/Wasm コードからネットワークリクエストを直接送信できるようになります。

Compose Multiplatform: Kotlin/Wasm を使用

Kotlin/Wasm は特定の UI フレームワークに縛られていません。 ブラウザーで Kotlin コードを実行する汎用的な手段ですが、 Google の Jetpack Compose をベースにした JetBrains の宣言型マルチプラットフォーム UI ツールキットである Compose Multiplatform の実験的なウェブターゲットに使用される基盤テクノロジーです。 ウェブ用の Compose Multiplatform はキャンバスベースのレンダリングを採用しているため、他のプラットフォームで使用するのと同じレイアウトとコンポーネントを使用できます。 初期状態では Material と Material 3 のデザインコンポーネントが搭載されています。

Compose Multiplatform を使うと、最も重要なプラットフォームである Android と iOS、デスクトップ、さらにはブラウザー(Kotlin/Wasm の力によって実現)をターゲットとする共有アプリケーションをビルドできます。 独自の共有 UI を作成し始める場合、同じように Kotlin/Wasm ターゲットを実験的にサポートしている Kotlin Multiplatform Web ウィザードを使用してプロジェクトを生成できます。

パフォーマンス

WebAssembly は言語用のコンパイルターゲットとしてゼロからデザインされているため、Kotlin コンパイラーはソースコードをパフォーマンスに優れた WebAssembly バイトコードに変換できます。 弊社では Kotlin/Wasm に定期的にベンチマークを実行し、実行時のパフォーマンスを確認しています。 Kotlin/Wasm はまだアルファ版であるため、継続的にパフォーマンス改善が行われてはいますが、以下のように Kotlin/Wasm はほぼすべてのマクロベンチマークですでに Kotlin/JS のパフォーマンスを上回っています。

同様に、Kotlin/Wasm で動作する Compose Multiplatform は JVM 上で同じアプリケーションを実行する場合と同等の実行速度となっており、すでに有望なパフォーマンス特性を示しています。

AnimatedVisibility: Wasm の実行時間は JS 実装の 0.5 倍
LazyGrid: Wasm の実行時間は JS 実装の 0.5 倍
VisualEffects: Wasm の実行時間は JS 実装の 0.5 倍

これらのベンチマーク結果は弊社が Google Chrome の最近のバージョンでテストした結果ですが、他のブラウザーでも同様の結果が出ています。

進行中の作業

現在アルファ版のテクノロジーである Kotlin/Wasm は急速に進化しており、活発に改善と強化が行われています。 そのため、まだ開発が進行中の分野がいくつかあります。

現時点では Kotlin/Wasm のデバッグサポートには制限があり、今後はその機能を改善していく予定です。 また、ウェブをターゲットとする際にはバンドルのサイズが重要であることも認識しているため、特に Compose Multiplatform プロジェクトを対象にコンパイラーが生成する出力の最適化を進めたいと考えています。

WebAssembly は進化し続けていますが、弊社は スタックの切り替えスレッド化 などの新しい提案が公開されるたびにそのメリットを利用したいと考えています。 また、WebAssembly Component Model のサポートを Kotlin に導入するための作業に取り組んでいます。これは、相互運用可能な Wasm ライブラリとアプリケーションのビルドが可能にするものです。 さらに、WASI(WebAssembly System Interface)のサポートなど、Kotlin/Wasm をブラウザー外部の素晴らしい開発ターゲットにする作業にも取り組んでいます。 弊社は WebAssembly Community Group の一員として WebAssembly VM のベンダーと積極的に連携し、Kotlin/Wasm が実行場所に関係なく優れたエクスペリエンスを確実に提供できるように努めています。

優れた開発者エクスペリエンスをユーザーに提供し、パフォーマンスとバンドルサイズの要件を満たせるようにすることが目標です。 これらの分野で進展があるたびに、更新情報と詳細な情報を必ずお伝えします!

コミュニティに参加して更新情報を入手し、フィードバックを共有しましょう!

Kotlin/Wasm コミュニティに参加する

Kotlin/Wasm に期待しているチームや他の開発者とつながりたい方は、Kotlin Slack でのディスカッションにご参加ください(こちらで招待を受けてください)。 #webassembly チャンネルでは、Kotlin と WebAssembly のすべてに関するディスカッションをご覧いただけます。

Kotlin/Wasm はアルファ段階にあるため、弊社はユーザーの要件に基づいてテクノロジーを進化させ続けたいと思っています。 問題の報告や足りないと思われる API のご連絡、実装を希望する機能のリクエストにより、改善にご協力ください。 要件を伝えるには、YouTrack の Kotlin プロジェクトに課題を追加してください。

Kotlin の次のステップに踏み出せたことを嬉しく思っており、Kotlin/Wasm で皆さんが何を作成されるのかを楽しみにしています!

Kotlin/Wasm の実際の動作をご覧ください!

2023 年 12 月 12 日火曜日に Kotlin 公式の YouTube チャンネルで Kotlin/Wasm チームリーダーの Zalim Bashorov が「Kotlin and WebAssembly: Unleashing Cross-Platform Power(Kotlin と WebAssembly: クロスプラットフォームの力を解放)」というタイトルでライブセッションを開催しました。こちらから動画をご覧ください。

以下もご確認ください

image description

Discover more