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

RustNLからマルチプラットフォームのアプリ開発のためのツールRobiusのセッションを紹介

2024年8月2日(金)
松下 康之 - Yasuyuki Matsushita
オランダで行われたRustNL 2024からマルチプラットフォームのアプリ開発に向けたフレームワークRobiusを紹介する。

メモリーセーフなプログラミング言語Rustに特化したカンファレンスRustNL 2024がオランダのデルフトで開催された。2024年5月7日、8日の2日間に約500人の参加者を集めてカンファレンスとワークショップが行われた。今回はこの中から、マルチプラットフォームでのアプリケーション開発を可能にするRobiusというオープンソースプロジェクトに関するセッションを紹介する。

セッションのプレゼンターはHuaweiのグループ会社であるFuturewei Technologies, Inc.のプリンシパルアーキテクトであるKevin Boos氏だ。Boos氏はRustでゼロから開発されたOSであるTheseusのデベロッパーでもあり、FutureweiではRobiusの開発をリードするデベロッパーという職務に携わっている。

2日目の午前中に行われたセッション。多くの参加者の注目を集めていた

2日目の午前中に行われたセッション。多くの参加者の注目を集めていた

セッションの動画は以下のリンクから参照できる。

●動画:Robius: Immersive and Seamless Multiplatform App Development in Rust

最初にRobiusのゴールについて解説し、デベロッパーが複数のプラットフォームに対応したアプリケーション開発をRustで行えるようにすること、モバイル向けの開発を最優先のプライオリティにすることなどを挙げた。これまでシステムプログラミングのための言語と思われてきたRustによるGUIを含めたアプリケーション開発、特に複数のプラットフォームへの対応を1つのソースコードで実現することがゴールであると強調した。

Rustでマルチプラットフォーム対応アプリ開発を可能にしたいという発想

Rustでマルチプラットフォーム対応アプリ開発を可能にしたいという発想

Robiusはオープンソースプロジェクトとしてコミュニティによって運営され、多くの独立したデベロッパーによって開発されていると説明。その背景について、GUIのライブラリーだけであればRustにも多くのプロジェクトやソフトウェアが存在するが、アプリケーション開発にはそれ以外にも認証やメッセージングなどの多くの要素が必要になることを主な要点として説明した。またRustでコアのロジックを開発したとしてもそれを複数のプラットフォームに対応させるためには多くのラッパーコードが必要となり、必ずしも最良の開発体験とは言えないことにも言及している。

Robiusの特徴と背景を説明

Robiusの特徴と背景を説明

さらにアプリケーションデベロッパーがRustを使いたいと思っても、現状ではどこから始めたら良いのかわからないという状況であり、これを変えたいと語る。またマルチプラットフォームに対応したフレームワークがあれば、すべてのデベロッパーに対して利益となること、Rustが持つメモリーセーフや高速といった利点をシステムプログラマー以外にも提供したいと思ったことなども解説された。

Robiusがスタートした背景をさらに詳しく説明

Robiusがスタートした背景をさらに詳しく説明

Rustによるアプリケーション開発の実例として、Signalというメッセンジャーアプリケーションの構造を説明した。Signalの中核となるSignalプロトコル自体はRustで書かれているが、それ以外の部分にはiOSであればSwift、AndroidであればJava/Kotlin、デスクトップであればTypeScript、JavaScriptなどが使われているという。さらにサーバーに関してもJava EEが使われており、Rust自体がアプリケーション開発に占める割合は低いことを解説した。

Rustによるアプリケーション開発の実態を解説

Rustによるアプリケーション開発の実態を解説

より詳細にはSignalのコードはデスクトップ、iOS、Androidで共有されている部分は少なく、それぞれのプラットフォームに特化したコードになっているという現状を紹介。

Signalを例にそれぞれのプラットフォームごとのコード量を紹介

Signalを例にそれぞれのプラットフォームごとのコード量を紹介

またRustの持つ良い特徴を引き出せるという意味で、Rustを選択すること自体は良い判断だが、UIを開発するデベロッパーにとってはなじみのない言語であり、理解するのに時間が必要となる。またコンパイルの速度が遅いことも欠点のひとつとして挙げ、マイナス面についても言及した。

UIデベロッパーにとってRustへの移行は難しい

UIデベロッパーにとってRustへの移行は難しい

アプリケーションプログラミングについては、ユーザーインターフェース以外の部分にも重要な機能があるとして挙げたのが次のスライドだ。ここではネットワーク、ストレージ、ステートの管理、スマートフォンであればセンサーやカメラへのアクセスなどの多くの要素をコードとして入れこまなければならないことを説明。UI自体についてはMakepadDioxusと言ったツールキットが存在するが、それ以外を機能として提供する必要があることを強調した。

アプリケーション配下のスタック例を紹介。UI以外にも多くの要素が必要

アプリケーション配下のスタック例を紹介。UI以外にも多くの要素が必要

マルチプラットフォームでの開発については、基本としてプラットフォームに特化したコードは書かないことが最も重要なルールで、2番目のルールはプラットフォームに依存しない部分のコードについて、処理速度の低下を避けることであると説明。

マルチプラットフォーム実装のルールを説明

マルチプラットフォーム実装のルールを説明

またマルチプラットフォームの課題としてOSのサービスやAPIをどうやって抽象化するのか、各プラットフォームのビルドシステムへの最適化と標準化、アーティファクトに対するコードサインやパッケージ配布の整理、マルチスレッドによる並列化に対する機種依存しない抽象化などを挙げた。

マルチプラットフォーム対応における課題を整理

マルチプラットフォーム対応における課題を整理

ここでは単にOSやプロセッサの違いを抽象化によって乗り越えるだけではなく、パッケージシステムやコードサインなどについても注意が向けられていることに注目したい。単にツールを用意するだけではなく、デベロッパーの体験として差をなくしたいという意図が感じられるスライドとなっている。

Robiusを中心としたコミュニティ関連の概要を紹介

Robiusを中心としたコミュニティ関連の概要を紹介

Robiusはこのセッションの中心的なトピックだが、他のプロジェクトとの関係について解説したのがこのスライドだ。OSIRISがパッケージツール、Quake-buildはビルドツール、MakepadはUIのためのツール、DioxusはUIのためのRustのライブラリー、Tauriはデスクトップアプリケーション構築のためのツールとしてそれぞれ紹介されている。UIに関して、RustにはUIのためのさまざまなツールが存在していると前述していたが、TauriやLinebender、Xliemなどもその一つだ。

そしてMatrixというチャットサービスのクライアントとして開発されたRobrixというアプリケーションのアーキテクチャーダイアグラムを紹介。ここではUIだけではなくチャットサービスのために必要な機能要件が整理されている。

Matrixというチャットサービスのためのクライアントアプリのアーキテクチャー

Matrixというチャットサービスのためのクライアントアプリのアーキテクチャー

Robiusの進捗についてだが、多くの要件については未完成ではあるものの、すでに実装されているUI関連のプロジェクトからコードを流用することで進歩していると説明。このスライドのマーカーで塗られている項目に着手していると説明した。

Robiusプロジェクトの進捗状況

Robiusプロジェクトの進捗状況

開発の思想としては、なるべく依存関係を作らないでOSのネイティブコードに近付けることを目指していると説明した。プラットフォームの選択についてはmacOS、Windows、Linux(Debian)、Android、iOSだけではなく、ファーウェイが開発するOSのOpenHarmonyも視野に入れているという。WebAssemblyについてもRustとの親和性からみれば妥当な選択肢だろう。

Robiusがサポートするプラットフォームについて

Robiusがサポートするプラットフォームについて

そしてここからは実際にMacBookからデモを行い、Android、iOSのシミュレータを使ってアプリケーションからユーザーがログインを行うケースをデモで見せた。

スマートフォンアプリからログイン操作のようすをiOS、Androidで実施

スマートフォンアプリからログイン操作のようすをiOS、Androidで実施

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を使ったアプリケーションをアプリストアにリリースすること、デベロッパーのためのガイドを作成することなどを説明してセッションを終えた。

Robiusのまとめ。まだ多くのタスクが残っていることを紹介

Robiusのまとめ。まだ多くのタスクが残っていることを紹介

会場からは多くの質問が投げかけられ、マルチプラットフォームのアプリケーション開発に参加者が注目していることがわかる。

会場からの質問に答えるBoos氏

会場からの質問に答えるBoos氏

「Rustはシステムプログラミングのためのプログラミング言語」というキャッチフレーズをコミュニティが使わなくなっていることと、スマートフォンアプリのためのマルチプラットフォーム開発のフレームワークが注目されていることは同期しているのだろう。Rustがメモリーセーフで高速なことは知っていても、複数のプラットフォームを一度に開発できるフレームワークの開発が進んでいることに関してはまだ多くのデベロッパーには届いていないと思われる。今後Robiusがどのように発展していくのか要注目だ。

●Robiusの公式ページ:https://github.com/project-robius

著者
松下 康之 - 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メルマガ会員のサービス内容を見る

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