RustNLからマルチプラットフォームのアプリ開発のためのツールRobiusのセッションを紹介
メモリーセーフなプログラミング言語Rustに特化したカンファレンスRustNL 2024がオランダのデルフトで開催された。2024年5月7日、8日の2日間に約500人の参加者を集めてカンファレンスとワークショップが行われた。今回はこの中から、マルチプラットフォームでのアプリケーション開発を可能にするRobiusというオープンソースプロジェクトに関するセッションを紹介する。
セッションのプレゼンターはHuaweiのグループ会社であるFuturewei Technologies, Inc.のプリンシパルアーキテクトであるKevin Boos氏だ。Boos氏はRustでゼロから開発されたOSであるTheseusのデベロッパーでもあり、FutureweiではRobiusの開発をリードするデベロッパーという職務に携わっている。
セッションの動画は以下のリンクから参照できる。
●動画:Robius: Immersive and Seamless Multiplatform App Development in Rust
最初にRobiusのゴールについて解説し、デベロッパーが複数のプラットフォームに対応したアプリケーション開発をRustで行えるようにすること、モバイル向けの開発を最優先のプライオリティにすることなどを挙げた。これまでシステムプログラミングのための言語と思われてきたRustによるGUIを含めたアプリケーション開発、特に複数のプラットフォームへの対応を1つのソースコードで実現することがゴールであると強調した。
Robiusはオープンソースプロジェクトとしてコミュニティによって運営され、多くの独立したデベロッパーによって開発されていると説明。その背景について、GUIのライブラリーだけであればRustにも多くのプロジェクトやソフトウェアが存在するが、アプリケーション開発にはそれ以外にも認証やメッセージングなどの多くの要素が必要になることを主な要点として説明した。またRustでコアのロジックを開発したとしてもそれを複数のプラットフォームに対応させるためには多くのラッパーコードが必要となり、必ずしも最良の開発体験とは言えないことにも言及している。
さらにアプリケーションデベロッパーがRustを使いたいと思っても、現状ではどこから始めたら良いのかわからないという状況であり、これを変えたいと語る。またマルチプラットフォームに対応したフレームワークがあれば、すべてのデベロッパーに対して利益となること、Rustが持つメモリーセーフや高速といった利点をシステムプログラマー以外にも提供したいと思ったことなども解説された。
Rustによるアプリケーション開発の実例として、Signalというメッセンジャーアプリケーションの構造を説明した。Signalの中核となるSignalプロトコル自体はRustで書かれているが、それ以外の部分にはiOSであればSwift、AndroidであればJava/Kotlin、デスクトップであればTypeScript、JavaScriptなどが使われているという。さらにサーバーに関してもJava EEが使われており、Rust自体がアプリケーション開発に占める割合は低いことを解説した。
より詳細にはSignalのコードはデスクトップ、iOS、Androidで共有されている部分は少なく、それぞれのプラットフォームに特化したコードになっているという現状を紹介。
またRustの持つ良い特徴を引き出せるという意味で、Rustを選択すること自体は良い判断だが、UIを開発するデベロッパーにとってはなじみのない言語であり、理解するのに時間が必要となる。またコンパイルの速度が遅いことも欠点のひとつとして挙げ、マイナス面についても言及した。
アプリケーションプログラミングについては、ユーザーインターフェース以外の部分にも重要な機能があるとして挙げたのが次のスライドだ。ここではネットワーク、ストレージ、ステートの管理、スマートフォンであればセンサーやカメラへのアクセスなどの多くの要素をコードとして入れこまなければならないことを説明。UI自体についてはMakepadやDioxusと言ったツールキットが存在するが、それ以外を機能として提供する必要があることを強調した。
マルチプラットフォームでの開発については、基本としてプラットフォームに特化したコードは書かないことが最も重要なルールで、2番目のルールはプラットフォームに依存しない部分のコードについて、処理速度の低下を避けることであると説明。
またマルチプラットフォームの課題としてOSのサービスやAPIをどうやって抽象化するのか、各プラットフォームのビルドシステムへの最適化と標準化、アーティファクトに対するコードサインやパッケージ配布の整理、マルチスレッドによる並列化に対する機種依存しない抽象化などを挙げた。
ここでは単にOSやプロセッサの違いを抽象化によって乗り越えるだけではなく、パッケージシステムやコードサインなどについても注意が向けられていることに注目したい。単にツールを用意するだけではなく、デベロッパーの体験として差をなくしたいという意図が感じられるスライドとなっている。
Robiusはこのセッションの中心的なトピックだが、他のプロジェクトとの関係について解説したのがこのスライドだ。OSIRISがパッケージツール、Quake-buildはビルドツール、MakepadはUIのためのツール、DioxusはUIのためのRustのライブラリー、Tauriはデスクトップアプリケーション構築のためのツールとしてそれぞれ紹介されている。UIに関して、RustにはUIのためのさまざまなツールが存在していると前述していたが、TauriやLinebender、Xliemなどもその一つだ。
そしてMatrixというチャットサービスのクライアントとして開発されたRobrixというアプリケーションのアーキテクチャーダイアグラムを紹介。ここではUIだけではなくチャットサービスのために必要な機能要件が整理されている。
Robiusの進捗についてだが、多くの要件については未完成ではあるものの、すでに実装されているUI関連のプロジェクトからコードを流用することで進歩していると説明。このスライドのマーカーで塗られている項目に着手していると説明した。
開発の思想としては、なるべく依存関係を作らないでOSのネイティブコードに近付けることを目指していると説明した。プラットフォームの選択についてはmacOS、Windows、Linux(Debian)、Android、iOSだけではなく、ファーウェイが開発するOSのOpenHarmonyも視野に入れているという。WebAssemblyについてもRustとの親和性からみれば妥当な選択肢だろう。
そしてここからは実際にMacBookからデモを行い、Android、iOSのシミュレータを使ってアプリケーションからユーザーがログインを行うケースをデモで見せた。
KubeConと併催されたWASM DayでSecond StateのCEOであるMichael Yuan氏お気に入りのデモ、LLMのモデルをローカルのPCにダウンロードして実行するデモアプリケーションもMoxinという名称で紹介した。ここではWasmEdgeのランタイムにも説明の中で触れていた。実際にMacBookにダウンロードしたモデルを使って「オランダで訪れるべき5つの街を教えて」という質問を投げて回答が返ってくるデモのワンシーンも紹介された。
このスライドで紹介されたMakepadのシンプルなデモに関しては以下のリポジトリーから参照できる。
●参考:https://github.com/project-robius/robius-demo-simple/
Robius版のMatrixクライアントについては以下の公式GitHubページを参照して欲しい。
●参考:https://github.com/project-robius/robrix
MakepadとRobiusで開発されたアプリケーションについては、アーティファクトのサイズを削減できることを紹介。RobiusのサイトではWeChatやTaoBaoのアプリケーションをMakepad+Robiusでビルドして計測しているブログ記事を公開している。
●参考:Robiusのブログ:https://robius.rs/blog/
そしてRobiusを使ったアプリケーション開発に関連して、非同期処理については多くの発見があったことを紹介。例えばスマートフォンから画像などへのアクセスを同期式で実行すると当然ながら通信速度やサイズによって処理待ちが発生する。スマートフォンユーザーなら誰もが経験したであろう、画像がダウンロードされて表示されるまで操作できないという状態だ。その待ち時間を削減するために別のスレッドを生成し、そのプロセスと非同期に並列処理することでユーザーの体験を改善できるという。
最後にまとめとしてRobiusはまだ始まって1年に満たない開発プロジェクトであるため、多くのタスクが待っていること、Robiusを使ったアプリケーションをアプリストアにリリースすること、デベロッパーのためのガイドを作成することなどを説明してセッションを終えた。
会場からは多くの質問が投げかけられ、マルチプラットフォームのアプリケーション開発に参加者が注目していることがわかる。
「Rustはシステムプログラミングのためのプログラミング言語」というキャッチフレーズをコミュニティが使わなくなっていることと、スマートフォンアプリのためのマルチプラットフォーム開発のフレームワークが注目されていることは同期しているのだろう。Rustがメモリーセーフで高速なことは知っていても、複数のプラットフォームを一度に開発できるフレームワークの開発が進んでいることに関してはまだ多くのデベロッパーには届いていないと思われる。今後Robiusがどのように発展していくのか要注目だ。
●Robiusの公式ページ:https://github.com/project-robius
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Rustと非同期ライブラリーTokioで作成した簡易版Redisを紹介
- GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催
- RustNL 2024から、マシン間コミュニケーションをRustで実装したpostcardのセッションを紹介
- KubeCon China 2024から、ローカルでLLMを実行するSecond Stateのセッションを紹介
- RustConfで見えてきたRustプロジェクトが最も大事にする価値とは?
- Rustで書かれたシステムのトレーシングを実装するtracing
- RustNL 2024からデータ圧縮ライブラリーzlibをRustで書き直したプロジェクトのセッションを紹介
- Cloud Native Wasm Dayから大規模言語モデルをWasmで実行するデモを解説するセッションを紹介
- 高速でメモリーセーフなプログラミング言語、Rustの特徴を紹介
- Microsoftの年次イベントBuild 2020でメモリーセーフなプログラミング言語Rustを紹介