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

RustNL 2024から、2次元のGUIを実装するXilemについて、デモを交えながら解説したセッションを紹介する。

松下 康之 - Yasuyuki Matsushita

2024年8月23日 6:00

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

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30