2025/09/101 に開催されたFindyさん主催 Rustの現場に学ぶ 〜Webアプリの裏側からOS、人工衛星まで〜 というイベントを現地参加で視聴してきたので、どんな発表があったかを自分なりに参加録としてまとめてみました!
もう2週間ほど前のイベントの参加録となってしまい己の怠慢さについて謝罪します...orz
先に社内勉強会でスライドを用いて共有した内容を文字起こしした記事です。イベントの雰囲気がどんな感じだったかが伝われば幸いです!
資料一覧
発表された方の資料一覧です!どんな内容のスライドだったかはここを参考にしていただければと思います。
- ゴリラさん: Rustから学ぶ非同期処理の仕組み https://speakerdeck.com/skanehira/rust-async
- nwiizoさん: Webアプリケーションにオブザーバビリティを実装するRust入門ガイド https://speakerdeck.com/nwiizo/webapurikesiyonniobuzababiriteiwoshi-zhuang-sururustru-men-gaido
- yukiさん: カジュアルコントリビュータと学ぶRustコンパイラ https://speakerdeck.com/helloyuk13/kaziyuarukontoribiyutatoxue-burustkonpaira
- KOBA789さん: 人工衛星のファームウェアをRustで書く理由 https://speakerdeck.com/koba789/why-rust-for-satellite
- hikaliumさん: RustでOSを書くときの利点と欠点 https://docs.google.com/presentation/d/e/2PACX-1vRUPBJNUCOU5a0mSCrh0op9nC3sWzzyCDyAdnO4cFBJJAFbYdC_I8vhhmA1HqzqJtVVlJZ6n4W4CnoJ/pub?start=false&loop=false&delayms=3000&slide=id.p
勉強会と関係あるようなないような宣伝: hooqクレート
宣伝を兼ねた背景情報の掲載というか自己紹介なのですが、本記事を執筆した私namniumはちょうどこのイベント参加前にまぁまぁ時間を掛けて作成した属性風マクロクレート hooq を公開したところでした!
詳細は本記事には書きません2が、hooqクレートを使えば、各 ?
演算子3にあらかじめ設定しておいた任意のメソッドをフックすることができます!
このフックがあれば、例えばanyhowクレートに存在する with_context
というとても便利な(でも毎回書くとノイズになる)メソッドをすべての ?
に適用する、といったことができます。
大げさに言えば、hooqはRustプログラムのオブザーバビリティを大幅に向上させる可能性を秘めたクレートなわけです!
そしてなぜ参加録でこのクレートを宣伝したかというと、もちろん純粋に宣伝したかったからというのもありますが、例えばnwiizoさんの発表はまさしくオブザーバビリティの話でしたし、その他の方の発表でも「これは hooq の貢献チャンスがある内容では...?」みたいに思える内容がたまにあったためです。本記事はそのようなバイアスがかかった筆者が発表を見た感想であることをご留意いただきたいです。(といっても振り返れば大したバイアスではないですが...)
ドキュメント類はまだ整備中ですが、整いましたら是非使っていただけると幸いです。
全体の俯瞰
各発表の詳細に入る前に、どんな人たちが登壇していたかですが、Rust.TokyoのオーガナイザでRustによるWebアプリケーション開発 著者であるyukiさんを筆頭に、Twitter(現X)でよくお見受けする技術系インフルエンサーの方々が発表されており、始まる前からとてもわくわくしていました!
その期待は裏切られることなく、案の定ハイクオリティな発表が軒並みを連ねていました。長らくお待たせしましたがここから紹介していきます!
Rustから学ぶ非同期処理の仕組み (ゴリラさん)
資料: Rustから学ぶ非同期処理の仕組み https://speakerdeck.com/skanehira/rust-async
トップバッターはRustに限らず様々な言語や技術への取り組みをXで発信されてるゴリラさんの発表でした!
並列処理・非同期処理周りの話を用語の定義レベルから徐々に掘り下げる形で紹介していき、最後はグリーンスレッドの実装例まで紹介されていました。基礎からスタートしていて全体像を掴めるような発表となっていました。
個人的に印象に残っていたのは「並行」に対して「並行性」と「並行処理」という二つの語を設け、頭がこんがらがりやすい非同期処理・マルチスレッド処理周りをうまく説明されていたことです。綺麗に整頓されており、非同期処理をなんとなくしか知らない人にはオススメの資料です。後半は非同期処理の種類や具体的な実装方法の類型がなされていました。
弊社の後輩と勉強会にて話していたのですが、非同期処理は業務では必須なのでなんとなくでできるようになる一方、基礎知識は結構あいまいなことが多いです。ゴリラさんはグリーンスレッドのRustでの実装(tokioなどはグリーンスレッドを採用しておらず、Rustではあまり使われていなさそうな方式です)の紹介後に、Asynchronous Programming in Rust という書籍を参考にされたと話していました。実際のところRustの書籍の中でも非同期周りは結構な数が出ているので、紹介していただいた本をはじめとした書籍を利用して、腰を据えて学んで業務に活かしていきたいです!
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド (nwiizoさん)
オブザーバビリティというのは、マサカリを顔面でとらえる構えで平たく言えば、ロギング等のことです。Rustならば log
クレートや env_logger
クレートなどが基本に来るでしょう。
なぜマサカリが飛んでくるかというと、「ただログを取ればいいってもんじゃないんだよ!」という立場をとるものを、すなわちただ情報を集約するモニタリングとは異なり、システムの問題を理解するためのシステム監視尺度を オブザーバビリティ というそうなので、わかりやすさのために「ロギングのことです」というと怒られそうなのです
nwiizoさんの発表はまさしくオブザーバビリティとは何か?の話から始まって、ログ・メトリクス・そしてトレーシングの話をし、従来のロギングとの違いを明らかにしつつ tracing
クレートの話をされていました。
トレーシングではSpan単位でログを追うので、非同期アプリケーションでも容易にログを追いやすいです。実際、自分が関わっている案件でも tracing
を用いてログ収集を行い、CloudWatchで原因究明をしています。
非同期同様普段業務でも利用していることに関連した知識なので聞き入りましたが、非同期以上に自分が不慣れな分野だったので発表を聞けてとても良かったです。
特に、終わりの方で紹介されていた「 見るべきものを見る 」「測定は手段であって目的ではない」「ビジネス価値とアクションにつながる情報のみ収集しよう」といったオブザーバビリティの哲学も印象的でした。冒頭でhooqクレートの紹介をしましたが、このクレートはこの哲学に沿っているかと聞かれるとなんとも言えないですね...ただ利用者次第でどうとでもなるので、この哲学は引き続き心にとどめておきたいと考えています。
(ちなみに オブザーバビリティ・エンジニアリング という書籍ですがhooqの今後のために買いました )
カジュアルコントリビュータと学ぶRustコンパイラ (yukiさん)
ここまでは主にWebアプリケーションに関係がありそうな話題で、この発表を境に、以降は低レイヤの話題になっています。その中間に位置するのはRust.Tokyoオーガナイザyukiさんのコンパイラにまつわる話でした!
Rustコンパイラに立ったissueを解決する等の活動を通し、コンパイラにそれなりに詳しくなったが故に自身を「カジュアルコントリビュータ」と位置付けたそうです。
発表本編では、Rustコンパイラの構成を述べたのち、Rustコンパイラ独特な、特徴的な設計を紹介されていました。
特徴の一つ目は「クエリシステム」で、型情報をはじめとした膨大なコンパイル情報は、まるで一つのDBのように機能し、このDBにクエリを行うと情報を引き出せるという形になっているそうです。また、全部をコンパイルするのではなく、クエリがあった際に、もし情報がなければ初めてコンパイルが実施されるというキャッシュシステムのようになっているらしく、コンパイル時間向上につながっているそうです。 それでもコンパイル時間めっちゃ長いですが...
もう一つの特徴は「エラーメッセージ」とのこと。Rustのコンパイルエラーはとにかくわかりやすく丁寧なことで筆者の間では有名ですが、その裏側は何かマジックを使っているわけではなく泥臭い実装らしいです。また、エラーメッセージ自体は message.ftl
というファイルで管理されたりしているそうです。
発表の最後ではRustコンパイラに触れる体験を通しての感想として、CIが長いといった話や、rust-analyzerがマクロに弱いなどの苦労話がなされました。どれもわかりみが深過ぎて首がもげそうでした...特にCIの長さ...一晩覚悟と聞いた時は驚きました。
その中でも、「 文法機能をより深く理解できて良い 」という部分は、マクロ制作にも通じるものがありそうでよく印象に残っています。Rustをより深く知るにはマクロやコンパイラについて知るのが案外早道なのかもしれません!
人工衛星のファームウェアをRustで書く理由 (KOBA789さん)
資料: 人工衛星のファームウェアをRustで書く理由 https://speakerdeck.com/koba789/why-rust-for-satellite
実際に宇宙へと飛ばした人工衛星のモックを会場に持ってきての発表をしたのがKOBA789さんです!技術的な話というよりは、タイトル通りファームウェアを書くのにRustを選定した理由を解説されていました。
最初の方では人工衛星開発にまつわる誤解を紹介しつつ、通常のプログラミングとは異なる点を紹介されていました。その前座を踏まえて発表された「Rustを選択した理由」はなかなか面白く、何も知らない人からすると「信頼性」かな...?と思うところで、 生産性 を最大の理由とされていました。
様々な機能を柔軟に素早く形にするというミッションを、Rustのエコシステムや表現力の豊かさが開発を支えているのだろうとすると、納得の理由です!
筆者がRustを使うのも、信頼性以上にその生産性・利便性から選んでいる部分が大きいです。 docs.rs の使いやすさや cargo パッケージシステムの利便性は言わずもがな。C言語と比べれば壊れにくくわかりやすいマクロシステムなんかも可読性を向上させることがしばしばあり、「楽だから」Rustを使っている節があります。似たような感覚なのではないでしょうか...?
その他少し面白い話を聞けたのは、どうやら人工衛星の現場ながら地上で動作するバックエンドが必要らしく、バックエンドエンジニアもアースエッジさんにはいらっしゃるとのことでした。もし転職したくなったら候補としてありかも...?
RustでOSを書くときの利点と欠点 (hikaliumさん)
最後は 作って学ぶ OSのしくみ 著者のhikaliumさんの発表でした!発表では no_std と unsafe Rust の世界を紹介されていて、Rustの良い点悪い点を交互に話されていました!
no_std環境はほとんど触ったことがなかったので知らなかったのですが、案外色々なもの (println!
やヒープ格納配列 Vec
など) が存在する一方で、HashDoS対策としてわざと HashMap
がno_stdからはずされているなど、意外な話がてんこ盛りでした!
印象的だったのは、NULLポインタを許容しない作りが故にメモリ確保に失敗した場合Rustは即パニックするという話でしょうか...?確かに他の言語だとうまくできそうなのに唯一融通が効きにくそうな部分です。
KOBA789さんじゃないですが、async/awaitの糖衣構文やマクロ( format!(...)
や #[derive(...)]
)も産性に寄与しているといった話もありました4。この辺の話は普通のRustプログラミングにもかなり通じる部分があり、慣れてない低レイヤの話であったのにかなり共感できる内容でした!
まとめ・所感
Twitter(現X)上でよく目にするつよつよRustエンジニア達の発表だけあってとても濃いものが多かったです!
また、バックエンドから低レイヤの話まで出てきていて、やはり「汎用的なシステムプログラミング言語」であることはRustの強みの一つだと再実感いたしました。
モチベが上がったのでhooqマクロのドキュメントを早く整えてRustコミュニティに貢献していきたいです!