Rust Tokyo 2024 開催レポート

2024年11月30日に、GMO Yours・フクラス(東京・渋谷)+オンラインでRustに関する技術カンファレンスRust.Tokyo 2024が開催されました。

今年のRust.Tokyoは、同時間帯に2つの並行トラックが実施されました。この記事では、 サポーターとして運営に協力したエンジニア2名の目線から、当日の開催風景やそれぞれが興味を持ったセッションの内容を紹介します。

Rustでマルチスレッドプログラミング! リアルタイム通信ではどのようにスレッドを立てるのか

yuki-uchida@yuki_wtzさんによるショートセッションでは、QUICプロトコルをベースとしたリアルタイム通信プロトコル「Media over QUIC Transport(MoQT⁠⁠」を例に挙げながら、マルチスレッドの必要性とRustを活用したスレッドの立て方、そしてその実装について解説が行われました。

Media over QUIC Transport(MoQT)は、遅延と品質を両立するメディア通信プロトコルで、中継サーバーの高負荷を効率的に処理するためにマルチスレッド処理を活用してCPUをフルに使う必要があるそうです。

Rustでマルチスレッドを実装するにあたって、OSスレッドとグリーンスレッドを用途に応じて使い分け、I/O中心のタスクにはグリーンスレッドを採用するといった考え方や、tokioを活用し、WebTransportコネクションやストリームの処理を効率化する実装が紹介されました。

マルチスレッド設計では、その処理の特性に応じてOSスレッドとグリーンスレッドを適切に選定したり、複数スレッドから参照するデータをどう扱うかが難しく、スレッドで行われる処理や扱うデータのサイズなどを考慮して設計する必要があるそうです。リアルタイム通信のような負荷の高いユースケースにおける、Rustを用いたマルチスレッド処理の設計とその具体的な実装について、要件の立て方から丁寧な説明で、とても学びの深いセッションでした。

さらに、スレッド間のデータのやり取りには、tokioが提供するチャネルを活用すること、特に1対多(1:n)の通信ではmpscを用いることやその実装例の解説もありました。

ビデオ会議や映像配信などでメディアを高速かつ並列に処理する重要性が増す中で、マルチスレッドプログラミング技術の需要が高まっています。特に、マルチスレッドと相性が良いRustへの注目も同時に高まっていると感じます。Rustでマルチスレッドを扱う上では、スレッドごとの特性を理解し、タスクの内容やデータの性質に応じて適切に設計することが求められますが、こうした難しさを乗り越える設計の工夫がリアルタイム性や高効率な通信の実現につながります。本セッションは、そうした課題と工夫の面白さを存分に伝えてくれる非常に魅力的な内容でした。

日本全国⁠都市3D化フロシェクト「PLATEAU」とデータ変換OSS「PLATEAU GIS Converter」の公開

Satoru Nishio@nokonoko_1203さんによるロングセッションでは、国土交通省主導の日本全国・都市3D化プロジェクト「PLATEAU」と、そのデータ変換ツールである「PLATEAU GIS Converter」の概要と技術的な背景が紹介されました。

Project PLATEAUは、日本全国の都市を3Dモデル化し、災害対策やエンタメなど多分野で活用される地理空間情報を提供する国主導のプロジェクトです。XMLで記述されたCityGMLというデータ形式が基盤となっており、札幌市で約70GBに達する大規模データが特徴です。

「PLATEAU GIS Converter」の開発にRustを採用した理由として、このような大規模データを高速かつ現実的な時間で処理できる性能、クロスプラットフォーム対応、そして直感的なGUI構築が可能であるTauriの存在を理由として挙げていました。例えば、Rustにはquick-xmlというクレートが存在します。quick-xmlはStAXベースのパーサーのため、メモリ効率がよいことや、オーバーヘッドも少ないため、高速なXMLパースの実現が行えるという話がありました。

また、RustはGIS関連のクレートは存在するものの、3次元に対応したものや、PLATEU仕様に準拠したCityGMLをパースするためのクレートが存在せず、今回のプロジェクトでは独自のクレートを実装する必要があったとのこと。タイル分割の並列化では、Rayonとmpscでタイル分割処理を並列化することで処理速度の効率化を行ったり、パイプラインアーキテクチャを採用し、各処理はチャネルを利用して並列処理を安全に実装していたため、メモリにおけるバグを防げたなどの利点があったそうです。

「PLATEAU GIS Converter」のプロジェクトは、国主導の事業でありながら技術基盤にRustが採用されるという、非常に珍しい事例である点が印象的でした。また、独自クレートの開発が、地理空間情報分野におけるOSS貢献への取り組みに繋がっているという余談も非常に素敵でした。

先に挙げたTauriはバージョン2.0からiOSとAndroidをサポートし、従来のデスクトップアプリに加えてモバイルアプリの開発も可能になりました[1]。こちらもUIのさらなるリッチ化やモバイルアプリなど、将来的にプロジェクトの利便性が一層広がることも期待できそうとのことです。

いちエンジニアとして技術的な深掘りがしたくなることはもちろん、プロジェクトの今後にますます注目が高まる内容のセッションでした。

Rust Unlinked - a Journey Through rustc, Linkers, Symbols, and Static Libraries

Balaji@shrirambalajiさんによるロングセッションでは、Rustのコンパイラとリンカーの内部動作について、コンパイルプロセスからリンク時最適化まで、実践的な観点から詳細な解説が行われました発表スライド⁠。

特に、コンパイラの各フェーズ(レキシング・パーシング、HIR、MIR、LLVM IR)の役割とその変換過程、またELFフォーマットの各セクション(.text、.data、.bss、.symtab)の意味と用途について具体的に説明していた点と、リンク時最適化(LTO)における4つのモード(No LTO、Fat/Full LTO、Thin/Parallel LTO, Thin-Local LTO)の違いを明確に解説していた点が印象的でした。

システム開発において重要なコンパイルからリンクまでの全体像と、大規模プロジェクトでの最適化手法について、Rustのコンパイルを理解するのに有益なセッションでした。また、Stabbyライブラリを使用したABI安定化の新しいアプローチも実践的な内容でした。

Rustを使ったRubyライブラリの開発

ahogappa@ahogapPartyさんによるショートセッションでは、C/C++からRustへの移行トレンドという背景のもと、実際にRuby Gemを開発した経験から得られた知見や課題が共有されました。

開発における実装のアプローチでは、メソッドチェーンと型推論を活用することで少ない記述量で実装できる利点が示されました。一方で、FFIにおけるStr型の扱いが複雑で、頻繁な型変換が必要になるという課題も明らかになりました。さらに、Rustの特徴である安全性が活かせないほどunsafeブロックを多用せざるを得ない点など、実践から得られた具体的な課題が印象的でした。

本セッションでは、Rustの採用を検討する際の判断材料が数多く示されました。既存のC実装を維持すべきケースとRustの特性を活かせるプロジェクトの見極めという観点で、学びのあるセッションでした。

当日の会場の様子

RustTokyo 2024の当日の会場の様子を紹介します。

当日、会場内には、スポンサーブースが設置されました。 各スポンサーブースではRustを実際に利用しているサービス事例の紹介やデバイスを体験できる機会が提供されました。来場者はブースを通じて、各企業がRustをどのように活用しているのかを知ることができました。

参加者特典としては、RustTokyo 2024オリジナルのトートバッグを制作・配布しました。また、海外からの参加者も迎え、RustChinaの運営チームの御好意により提供いただいたRustバッジを、数量限定ではありましたが来場者に配布することもできました。

おすすめ記事

記事・ニュース一覧