連載 [第4回] :
  RustNL 2024レポート

RustNL 2024から2次元のGUIを実装するXilemを解説するセッションを紹介

2024年8月23日(金)
松下 康之 - Yasuyuki Matsushita
RustNL 2024から、2次元のGUIを実装するXilemについて、デモを交えながら解説したセッションを紹介する。

Rustに特化したカンファレンスRustNL 2024から、2次元のGUIをRustで実現するツールキットXilemを解説するセッションを紹介する。プレゼンターはGoogleのFonts Teamに所属するRaph Levien氏だ。

セッションを行うLevien氏

セッションを行うLevien氏

動画は以下から参照して欲しい。

●動画:Xilem: Let's Build High Performance Rust UI

セッションのタイトルは「Let's build high performance Rust UI」で、高機能ではなく高性能という部分が強調されていることに注目したい。それは次に使われたスライドでも明確に示されている。

Xilemのゴールは何よりも高性能であること

Xilemのゴールは何よりも高性能であること

Xilemの設計思想は何よりも高性能であることで、これはユーザーインターフェースのツールキットとしては異例なのであろう。ニッチな領域であることも説明されている。そして2Dに特化していること、デスクトップとモバイルに対応すること、また重要なのはGoogleがこのプロジェクトに予算を割いており、それはAndroidのためであることが説明された。

Xilemのアーキテクチャーをレイヤー構成で説明

Xilemのアーキテクチャーをレイヤー構成で説明

ここではユーザーインターフェースの構成をレイヤー図で説明。一番下にあるインフラストラクチャー層がいわゆるツールキットの部分で、その上にMasonryとTaffyというユーザーインターフェースの要素を扱う層が存在する。さらにその上に今回のトピックであるXilemが存在している。XilemはReactivityと命名された層で、いわゆるユーザーが操作を行う部分かと思われるが、その部分については詳しい説明は省かれた。

実際にデモを行ってRustのコードとUIを解説

実際にデモを行ってRustのコードとUIを解説

ここでは簡単にVisual Studio Codeを使ってコードを見せながら簡単なデモを実施。ここではウィンドウを表示し、そこに置かれたボタンをクリックするとカウンターが足されていくデモだ。そしてそこにチェックボックスを表示してカウンターの値がゼロであればチェックボックスをオンにするという変更を加えている。ここまですべてRustのコードだけでユーザーインターフェースを実装できていることがわかる。

Rustのコードの一部を紹介

Rustのコードの一部を紹介

そしてコンパイル時に変数の型指定が行われる静的型指定であることを示し、これはAppleのSwiftUIに影響されたと明かす。ここでは動的型指定の言語であるJavaScriptとの違いを説明した。

2次元のレンダリングエンジン、Velloを紹介

2次元のレンダリングエンジン、Velloを紹介

そしてXilemが利用する2次元のレンダリングエンジンVelloを紹介。ここではCPUを使ってグラフィックスを描画するのではなく、GPUのマルチスレッドをフルに活用して高速化を行っていることを説明した。デモでは高速に2次元の描画を行うベンチマークを使って、マルチスレッド化されたGPUのパワーを見せた。

2次元の描画ベンチマークを実行

2次元の描画ベンチマークを実行

Levien氏の本業でもあるフォントの描画処理も高速に実行されていることがわかる。

フォントの描画も高速化

フォントの描画も高速化

またベクター描画の要素が多い地図データについても、高速に拡大縮小が可能になっていることを見せた。

ベクター要素が多い地図データも高速に拡大縮小が可能

ベクター要素が多い地図データも高速に拡大縮小が可能

またParleyというテキストレイアウトのツールキットも紹介し、フォントや文字列の処理も高速化されていることを説明した。

Parleyを紹介

Parleyを紹介

さらにアクセシビリティについてもAccessKitというツールキットを紹介。

アクセシビリティのためのツールキットAccessKitを紹介

アクセシビリティのためのツールキットAccessKitを紹介

デモでは音声による読み上げを実施したが、ここでは上手く動かず、録画されたデモではなくリアルタイムでデモを実施していることを感じさせる場面となった。

音声読み上げのデモ。要素を説明する字幕は表示されるものの読み上げは上手くいかなかった

音声読み上げのデモ。要素を説明する字幕は表示されるものの読み上げは上手くいかなかった

また国際化(I18n:Internationalization)についてもToDoリストのデモアプリケーションを使い、英語から日本語に切り替えて日本語を入力、それがそのまま正しい日本語のシステムフォントを使って表示されるところを見せた。

日本語に言語を切り替えても正しく文字列が表示されるデモ

日本語に言語を切り替えても正しく文字列が表示されるデモ

次のデモではWebブラウザーで実行されるWASMのモジュールをRustで記述し、内容を変更して即座にブラウザー内の描画が変更されることを見せた。ここでは赤色だった線分が緑色に変更されている。

xilem_webを使ってブラウザーで実行されるコードを生成

xilem_webを使ってブラウザーで実行されるコードを生成

ソースコードを変更して、即座にWASMにコンパイル実行までを実演

ソースコードを変更して、即座にWASMにコンパイル実行までを実演

また非常に細かい部分に関する今後の開発計画についても解説を行った。ここではリストウィジェットに巨大なデータを表示させるような場合、すべてを描きかえたりせずに表示されている部分(マテリアライズされた部分)だけを再描画するようなケースに関して解説を行っている。

web/DOMが提供する機能を超える高速性を実現したいという内容

web/DOMが提供する機能を超える高速性を実現したいという内容

コミュニティとの連携という部分では、ウィンドウを操作するライブラリーwinitで独自に開発していたGlazierを置き換えること、wgpuをGPUのライブラリーとして採用したこと、ParleyやTaffyなどの他のRustコミュニティが開発するツールを使うことで、コミュニティの力を最大限に使うようになったことなどを説明した。XilemはGoogleがファンディングを行っているプロジェクトではあるが、単独で進めるのではなく他のコミュニティとの協力を選択したことを説明したわけだ。

他のコミュニティとのコラボレーションを説明

他のコミュニティとのコラボレーションを説明

Levien氏はGoogleの社員であり、XilemはGoogleからファンディングを受けているプロジェクトではあるが、他のコミュニティに貢献することも計画としてあることを強調した。

また将来の計画としてより完全なウィジェットのセットを完成させること、高速なリストビューを実装すること、モバイル向けに必要な機能、特にIMEの統合を計画していることなどを示した。

将来に向けた計画を紹介。ここでもリストビューの高速化が提案されている

将来に向けた計画を紹介。ここでもリストビューの高速化が提案されている

最後にXilemのコミュニティへの参加を呼びかけてセッションを終えた。

Xilemのコミュニティ関連の情報を最後に紹介

Xilemのコミュニティ関連の情報を最後に紹介

このスライドで紹介されているブログは、主にXilemのコントリビューターによって書かれているソフトウェア更新の記録という内容となっているが、コミュニティに参加しているエンジニア以外にはとっつきにくい内容とも言える。この部分については新規に参加したいと思うエンジニアにウェルカムなイメージを与える工夫が必要だろう。同じ企業のエンジニアから始まったオープンソースソフトウェアにはありがちな状況かもしれない。Google以外の貢献がどれだけ増えていくのか、コミュニティとしての拡大に期待したい。

●Xilemのブログ:https://linebender.org/blog/

なおXilemのベクターグラフィックスを解説するLevien氏の動画は以下から視聴できる。

●Xilem Vector Graphics:Bay Area Rust May 2023: Raph Levien on Xilem Vector Graphics

●GitHubのXilem公式ページ:https://github.com/linebender/xilem

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

開発ツールイベント
第5回

RustNL 2024番外編、GitのアクティビティからChagelogを生成するgit-cliffを紹介する

2024/8/27
RustNL 2024レポートの番外編として、GitのログからChangelogを自動作成するツールをRustで開発した経緯を紹介する。
ミドルウェアイベント
第4回

RustNL 2024から2次元のGUIを実装するXilemを解説するセッションを紹介

2024/8/23
RustNL 2024から、2次元のGUIを実装するXilemについて、デモを交えながら解説したセッションを紹介する。
ミドルウェアイベント
第3回

RustNL 2024から、マシン間コミュニケーションをRustで実装したpostcardのセッションを紹介

2024/8/16
RustNL 2024からマシン間コミュニケーションを実現するライブラリーをRustで実装したpostcardのセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています