Rust Tokyo 2024 参加してきた！ ~面白かった部分などまとめ~

# はじめに
こんにちは。細々とプログラミングをしている[sotanengel](https://x.com/sota_eng_prog)です。

Rust Tokyo 2024現地で参加してきました〜〜〜！！！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1758960/154da8c6-927f-57c3-c327-8d7c39af1f4f.png)


https://rust.tokyo/

プログラミング歴は5年くらいなのですが、こういった現地イベントに参加したことは初めてだったので、とても新鮮な経験ができました！

そこで今年参加できなかった人向けに「どんな感じの発表だったのか」の私的なメモをこの記事にまとめます。

# 発表メモ

## Rust で TUI アプリケーションを作った話
- jqフィルターの話
- ratatuiは最優先で使われるライブラリ。上記のライブラリを裏で持ちつつ、リッチなグラフィックを作成できる
- uiコンポーネントはそれぞれ組み合わせることで追加が容易になりそう
- 無いので作った[jqリポジトリ](https://github.com/ynqa/j9)
- `rustc -L`とかで依存してるライブラリとか探せる
- rustc -Lとかでライブラリとか探せる
- `cargo-dist` でbrewとかにリリースできる！([リポジトリ](https://github.com/axodotdev/cargo-dist))


## 新卒2年目が挑んだ!! RustとOSS、実は怖くない話
- 挑戦したossはasync-graphqlとzed
- いきなりgood first issueやろうとすると、文脈とか今までの流れを掴む必要があって大変なこともあるよ
- ⇧なので普段自分が作っているツールの問題にチャレンジするとかでもいいかも
- 新卒2年目だがめっちゃプログラミングは経験者だつおい・・・・

## [Rust と歩んだ 7 年間：プロダクションコードのための実践的テスト](https://www.docswell.com/s/aoyagikouhei/ZJ4Q9Q-2024-11-30-131529#p1)
- dbのカラム変化でテストケースなどが壊れやすいよー
- 対応
    - sqlファイルを準備：カラムの修正の際に個々のファイルを修正しないとダメ
    - ある関数で呼び出し：呼び出し側の対応が多いカラムの修正の際に全部修正しないとダメだよね
    - 🔴テーブルと同じ構造を持つ構造体を作成する
        - ビルダーを作って対応することで最小限の変更で抑えられるよー
- 外部apiはレートリミットとかapi側のエラーの切り分けがむずい
- [crate Mokito](https://docs.rs/mockito/latest/mockito/)でサーバーを建てるのが良さげ
- SNSのAPIは仕様変更が急に行われることがあるため、異常な例だけ退避して分析するとかの対応も必要かもね

## Fairy DevicesがRustを採用して5年が経ちました
- c++のリソース少なかったので性能もいいRustを採用
- 音声処理は非同期処理が発生する
- Rustを使い始めてからコンパイル後に辛いことは無くなったかも
- 少しずつリプレイス
- axum、sqlx、tracing、anyhowが現環境では有名でserdeに関してはずっと現役ｽｺﾞｲ
- テストカバレッジ([参考](https://zenn.dev/collabostyle/articles/f0654aa0feaba8))で網羅性を担保してる

## [総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用](https://speakerdeck.com/kymmt90/zong-hui-yuan-shu-1500mo-ren-noresutoranwebyu-yue-sabisuniokerurustnohuo-yong)
- バックエンドトラフィックは1000req/sec
- webバックエンド、エッジコンピューティング、全文検索エンジン、社内連絡用api、フレームはaxumで、Pythonとかc#に移行している
- サービス全体で使用する言語を分散することでリスクヘッジを行なっている
- cargo workspaceでリポジトリをモジュラーにする
- [utoipa](https://github.com/juhaku/utoipa)でAPIドキュメント記載
- axumのextractorに定義する
- cpuバウンドはrayonに委託する
    - https://ryhl.io/blog/async-what-is-blocking/
    - エッジコンピューティングではfastlyを利用しており、パーソナライズじゃないページや会員ランクに応じたコンテンツキャッシュ
    - エッジでwasmを実行している

# さいごに
めっちゃ最高の会でした！
「実際にRustが活用されている事例」や「技術の最先端」みたいなものに触れる機会はモチベーションのアップにかなり繋がることをひしひしと感じました。

今回の回で特に印象的だったのは(ちょっとどなたの発表か忘れてしまったのですが・・・)

```
社内でRustを内製するだけではRustの技術がニッチなものになってしまうので、
このような場で知見を共有してコミュニティの発展に〜〜〜〜
```
という趣旨のコメントをしていた企業さんがあったことでした。
確かにPythonやJavaだって最初は使っている人は少なかったものの、知見を持った人が増えてそれを共有する場があって、徐々に浸透するフェーズがあったはずで、
ちょうど自分たちはRustの浸透期を目の当たりにしているのではないかなと思いました。

私も少しでも共有できるものは共有して、Rustというコミュニティを盛り上げていける一員になれればいいな。

さいごに、Rust Tokyoの運営の皆様、ならびに発表者の皆様
素敵な機会をいただきありがとうございました！！！！


# (参考)発表内容とスライド
|発表者(敬称略)| 発表内容 |
| --------------------- | ------------------ | 
|名和雅実|大規模プロダクトのための Cargo Workspace ベストプラクティス([動画](https://www.youtube.com/watch?v=Q-7WTaJU-hY&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=1&pp=iAQB))|
|[ynqa](https://twitter.com/_ynqa)|[Rust で TUI アプリケーションを作った話](https://speakerdeck.com/ynqa/make-tui-application-in-rust)([動画](https://www.youtube.com/watch?v=c7kAC8c_xYw&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=2&pp=iAQB))|
|[tomoikey](https://x.com/scarustacean)|新卒2年目が挑んだ!! RustとOSS、実は怖くない話([動画](https://www.youtube.com/watch?v=pYz2XQekAds&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=3&pp=iAQB))|
|[yuki-uchida](https://x.com/yuki_wtz)|[Rustでマルチスレッドプログラミング！ リアルタイム通信ではどのようにスレッドを立てるのか](https://speakerdeck.com/yuki_uchida/rusttemarutisuretutohurokuraminku-riarutaimutong-xin-tehatonoyounisuretutowoli-terunoka)([動画](https://www.youtube.com/watch?v=i93ty5_X1vc&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=4&pp=iAQB))|
|[紫関 麗王 (GMOペパボ株式会社)](https://x.com/n01e0)|proc_macroによる錆びつかない実装([動画](https://www.youtube.com/watch?v=nUeySTxipcs&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=5&pp=iAQB))|
|[青柳 康平 (ユニークビジョン株式会社)](https://x.com/aoyagikouhei)|[Rust と歩んだ 7 年間：プロダクションコードのための実践的テスト](https://www.docswell.com/s/aoyagikouhei/ZJ4Q9Q-2024-11-30-131529#p1)([動画](https://www.youtube.com/watch?v=U6T6GOXWGqs&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=6&pp=iAQB))|
|[Fairy Devices株式会社 (Fairy Devices株式会社)](https://fairydevices.jp/)|[Fairy DevicesがRustを採用して5年が経ちました](https://speakerdeck.com/emergent/fairy-devicesgarustwocai-yong-site-5nian-gajing-timasita)([動画](https://www.youtube.com/watch?v=Byeu5Md7TCk&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=7&pp=iAQB))|
|[Sergi Granell (株式会社アークエッジ・スペース)](https://x.com/xerpi)|VDESターボエンコーダ/デコーダの実装を通じてRustを学ぶ([動画](https://www.youtube.com/watch?v=ZwqZ6cwMkLQ&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=8&pp=iAQB))|
|[Motoyuki Kimura](https://x.com/mox692)|[Instrumenting Async Runtime](https://docs.google.com/presentation/d/1hVjDTXivXyyVTXwG23WtxbkpSpgzT7KTyY1Z_L1_vGc/edit)([動画](https://www.youtube.com/watch?v=Sa4ncpmvrHc&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=9&pp=iAQB))|
|[ahogappa](https://github.com/ahogappa0613)|Rustを使ったRubyライブラリの開発([動画](https://www.youtube.com/watch?v=RP2Vebt3D1Q&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=10&pp=iAQB))|
|[Haruki Shimada](https://x.com/HarukiJay)|カードバックエンドの結合テストを並列処理に移行した話([動画](https://www.youtube.com/watch?v=gCXQrhVRaIc&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=11&pp=iAQB))|
|[keno (Ken Okada)](https://x.com/keno_ss)|[smithay で作って動かす Wayland compositor](https://docs.google.com/presentation/d/1x8CMBxYoSoU1f9xSbY5VkZ-toDTOJxxYkm7LOPaGx0s/mobilepresent?slide=id.g31af952cf01_0_1)([動画](https://www.youtube.com/watch?v=-Qx3gWW1vNE&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=12&pp=iAQB))|
|[Satoshi Yoshikawa](https://x.com/emergent)|[ONNX推論ランタイムクレートの比較と実装奮闘記](https://speakerdeck.com/emergent/rust-tokyo-2024-comparing-onnx-crates)([動画](https://www.youtube.com/watch?v=RiNzCFqcJYQ&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=13&pp=iAQB))|
|David Lu|Overcoming Callback Hell When Integrating C into Rust([動画](https://www.youtube.com/watch?v=BBZLNQzcJTw&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=14&pp=iAQB))|
|[山本 浩平 (株式会社一休)](https://x.com/kymmt90)|[総会員数1,500万人のレストランWeb予約サービスにおけるRustの活用](https://speakerdeck.com/kymmt90/zong-hui-yuan-shu-1500mo-ren-noresutoranwebyu-yue-sabisuniokerurustnohuo-yong)([動画](https://www.youtube.com/watch?v=luHR9GWLfEg&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=15&pp=iAQB))|
|Takuya Moriyama (AGC株式会社)|Rustを使った社内用Webアプリの開発・運用を持続させるために、素材メーカーが学んだこと([動画](https://www.youtube.com/watch?v=FmqyHkt8D48&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=16&pp=iAQB))|
|日熊 悠太 (株式会社KICONIA WORKS)|動画像処理アプリをRust化してiPhoneSE上で240fpsで動かす([動画](https://www.youtube.com/watch?v=A-acELSORK4&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=17&pp=iAQB))|
|[Vitaly Bragilevsky (JetBrains)](https://x.com/VBragilevsky)|Rust 開発を支えるツール – RustRover で日々の作業を効率化|
|[Shriram Balaji](https://x.com/shrirambalaji)|Rust Unlinked - a Journey Through `rustc`, Linkers, Symbols, and Static Libraries([動画](https://www.youtube.com/watch?v=I0JvqbRCI2U&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=19&pp=iAQB))|
|[Satoru Nishio](https://x.com/nokonoko_1203)|[日本全国・都市3D化プロジェクト「PLATEAU」とデータ変換OSS「PLATEAU GIS Converter」の公開](https://speakerdeck.com/nokonoko1203/ri-ben-quan-guo-du-shi-3dhua-hurosiekuto-plateau-todetabian-huan-oss-plateau-gis-converter-nogong-kai)([動画](https://www.youtube.com/watch?v=E4FDoadVzF0&list=PLfI7TK0AAi45rvHqcyacCBwo9kas4qycF&index=20&pp=iAQB))|