Rust.Tokyo 2023参加記
こんにちは。Zennでは初めまして。cordx56です。
今回は、先日開催されたRust.Tokyo 2023の参加記を書きたいと思います。よろしくお願いします。
Rust.Tokyoとは?
Rust.Tokyoとは、プログラミング言語であるRustのカンファレンスです(念の為)。そこまで多くの情報は載っていませんが、公式サイトもあります。
なぜ参加したの?
私は今回のRust.Tokyo 2023がRust.Tokyoの初参加でした。今回はRust.Tokyoのしばらくぶりのオフライン開催だったようです。
私自身、最近何かを作る際にはRustを用いることが多くなったこと、そして今のインターン先がRust.Tokyo 2023のスポンサー企業であったこともあり、現地で参加してきました。
オフライン会場は六本木のメルカリさんのところで、とてもいい会場でした。また現地では知り合いに会うこともできました。現地にはボタンを押すだけで飲み物が出てくる魔法の自動販売機があり、私も一本いただきました。ありがとうございました。
やはりオフライン開催の楽しみはこれですよね。
内容
さて、早速ですが内容について少しまとめて書いておこうと思います。
なお、本章での内容については可能な限り正確に記述するよう努めていますが、元の発表とのニュアンスの違いなどは含まれている可能性がありますので、参考にする際には他の文献等も確認しつつ慎重に行なってください。(内容について責任は負いかねます)
IoTとRustの話
まず一つ目のセッションは、IoT分野でのRustの活用についてでした。IoTと言ってもラズパイで動かしているので、OS上でのRustの話でした。AWS IoT Coreを利用したサービスの提供をしているようです。
Rustの変遷の話に始まり、古いRustコードを新しいものに置き換えていく苦労の話などがありました。async / awaitの導入や、failureからanyhow / thiserrorへの移行が苦労したようです。
またRustでメモリリークを起こした話などもありました。 std::mem::forget
はメモリリークを起こすがsafeであるという話、 std::rc::Rc
で循環参照してもメモリリークする話、そして実際に遭遇した話としてはスレッドのjoin忘れによるメモリ使用の増大などの話がありました。
開発の工夫としてはCI/CDを短くするキャッシュの話などがありました。sccacheやGitHub Actionsのrust-cacheを利用しよう、というものです。
かにさんタワーバトル
タイトルがいい
タワーバトルとはなんぞやと思ったら、tower crateの話でした。日経の方の発表です。
Rustでwebフレームワークを提供するaxumというcrateはtower crateを利用しています。このaxumの実装を眺めながら、towerで型バトルをしていく話でした。実際にこれらのcrateのコードを読みながら、実装について理解を深めていこうという内容でした。
質疑応答ではRustの教育や移行の説得などについての質問に対して、テストを充実させることによって移行障壁を下げる試みなどについて説明されていました。
他言語からFFIする話
みんな大好き(?)FFIのお話です。
Cy#さんでは普段ほとんどのコードをC#で記述されているそうですが、ネイティブのAPIを利用したくなった際やCで作られたライブラリを利用したくなった際などに困っていたようです。これに対し、C言語のプログラムをRustからFFIで呼び出すなどの対応をされているようでした。
Rustではbindgenを利用してFFI対応も容易に行えます。Rustを採用した理由としては、まともなパッケージマネージャがあり、開発環境が整っており、クロスプラットフォーム対応が容易であることを挙げていました。
また、C#を普段の開発で利用していることから、RustのFFIをC#から行う csbindgen の開発を行った話をされていました。SWIGのような中間生成の手法に頼らないやり方として十分な成果をあげているようです。
AGCさんが内製開発でRustを使っている話
Rust.Tokyo 2023のスポンサーであるAGCさんの方の発表でした。
AGCさんではデータサイエンスを利用した取り組みが長くなされていたようですが、この取り組みの成果を実世界で利用していく場合、ソフトウェアエンジニアリングの技術が必要になってきたようです。
Rustではコンパイラが信頼でき、可読性が保て、やばいコードのコンパイルを通さないことによる初心者への優しさ、そしてClippyの活用による恩恵が得られるという利点の再確認でした。
ただやはり、学習コストやビルド時間などは難しい点のようです。
ユニークビジョンさんの話
こちらもRust.Tokyo 2023のスポンサーであるユニークビジョンさんの方の発表でした。
そもそもRustを導入した経緯としては、元々Rubyを使っていたところに大きなCSVファイルを扱う必要が発生し、そしてRustを導入したところこれらのパフォーマンス問題が解決したというのが出発点のようです。
実際に使ってみると、rustcとcargoが優秀、clippyが便利と、良い開発体験を享受できたとのことでした。
しかし、所有権はまだしもライフタイムとなるとなかなか扱いが難しいと感じる人も多いようで、そうした問題点についても言及されていました。
並行キャッシュライブラリMokaの話
並行キャッシュライブラリであるMokaをRustで開発した際の知見についてのお話でした。
JavaのCaffeineを参考にしたライブラリであるMokaは、TinyLFUというアルゴリズムを採用した並行キャッシュライブラリだそうです。
ロック競合が起きるとスレッド稼働率が下がりパフォーマンスが低下する問題に対処するために、キャッシュアクセスを一度チャンネルという概念に保存し、チャンネルに溜まったアクセスを一括でキャッシュに適用するといったテクニックや、チャンネルをロックフリーにしてレイテンシを減らしてMutexと先述の一括適用によりスループットを向上させる、排他ロックを行わないデータ構造とアルゴリズムについての解説がなされていました。
またRustの問題としてFutureのサイズが大きくなってしまう問題や、asyncのキャンセルに関する問題についても言及されていました。
キャッシュの高速化に関する話題から、Rustが抱えている、抱えていた問題などについても言及された、内容の濃い発表でした。
Rustで汎用ツールを作る話
RoggolというRust製汎用ツールに関するお話でした。
設定をyamlで記述し、複数プロセスがデータ取得を行なっても重複なしでデータ取得が可能と言った特徴を備えているようです。
開発チームはRustの業務経験がないメンバーですが、開発環境の支援などもあり、想定よりもうまく開発が進んだとのことでした。
Rust in critical environments
こちらは英語で、rust-analyzerで有名なFerrous Systemsの方の発表でした。私の言語能力の不足で、発表中のいくつかの英語を日本語にうまく翻訳できなかったので、ここからはところどころに英語のまま引用させていただく点をご容赦ください。
いくつかの場面でプログラムの機能、製品の安全性を担保したいということがあり、そう言った場面でのRust活用の模索についてのお話でした。
実際にFerroceneというプロジェクトを進めているようで、これはRustにおいて品質担保を十分に行うコンパイラツールチェインを開発するプロジェクトのようです。
実世界の品質管理(Quality Management)には様々な観点がありますが、重要な観点として qualified tool の充実があり、これにはコンパイラ、仕様、テストなどが含まれます。これらの充実を図り、Rustでの安全性の確立、そしてrust-lang/rustへの貢献が、プロジェクトのゴールとしてあるようです。
ターゲットとなるユーザには高い保証などを要求する銀行などが考えられ、また実世界での利用環境の例としてはOxidOSなどがあるようです。
仕様はこちらにまとまっているようです。
まとめ
全体を通してみると、やはりRustという言語の習得、導入、教育の難しさに関連した話が多かったように思います。Rustに慣れてしまうと逆にCとかC++は書けなくなってしまいますが(書けても不便を感じたりライフタイムの怪しいコードで不安になったりしますが)、初学者にはやはりRustは難しいという印象が持たれるようです。また、まだ出てきたばかりで実験的な機能も多く、業務でのRust採用がしづらいのもわかります。
ですが、各社それぞれの工夫や考え方でRustを導入しているのもまたよくわかりました。今後もRust採用企業が増え、Rustコミュニティが盛り上がると嬉しいですね。やはり人がいなければ、プログラミング言語も成り立たないですから。
また、いくつかのセッションでは自分の詳しくない分野についての解説もなされていて、勉強になりました。新しい観点や今まであまり気にしていなかったことについても認識することができたので、今後に活かしていきたいところです。
さいごに
ちょっと宣伝をして終わらせます、読んでいただけるとありがたいです。
私は現在、Rust.Tokyo 2023のシルバースポンサーでもある株式会社LabBaseでインターンをしています。今回のRust.Tokyo 2023もLabBaseの一員として参加させていただきました。
LabBaseでは、プログラミング言語Rustを使い、Webアプリケーションなどを開発しています。また、これらの開発を通じ、研究者を対象にした就活支援などのサービスを運営しています。
LabBaseでは共に働く仲間を募集しています。Rustが好きな皆様、Rustに興味がある皆様と共に働けるのを楽しみにしています。
さいごに。Rust.Tokyo 2023は面白い会でした。関係者・発表者の皆様、ありがとうございました。次回の開催が楽しみです。
Discussion