Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20241030 RustランチLT大会 - 企業でのRust活用事例 アダコテック発表資料
Search
Toshihiro Taniguchi
November 12, 2024
0
310
20241030 RustランチLT大会 - 企業でのRust活用事例 アダコテック発表資料
2024年10月30日に行われた「RustランチLT大会 - 企業でのRust活用事例」の登壇資料になります。
https://forkwell.connpass.com/event/332843/
Toshihiro Taniguchi
November 12, 2024
Tweet
Share
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Optimizing for Happiness
mojombo
378
70k
Music & Morning Musume
bryan
47
6.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Building Applications with DynamoDB
mza
94
6.4k
It's Worth the Effort
3n
184
28k
Transcript
普段TypeScriptとか書いてる 普通のWebエンジニアが Rustで新規プロダクト開発に 挑んでみた 株式会社アダコテック 谷口 俊博
Confidential & Proprietary | 2 自己紹介 谷口 俊博(toshiokun) / @toshiokun_0322
株式会社アダコテック プロダクト開発部 エンジニア 好き: 麻雀 - アダコテック麻雀部所属 - 元セガサミーフェニックスの魚谷侑未推し ランニング - フルマラソン完走経験あり - 最近腰を痛めて走れていない
Confidential & Proprietary | 3 自己紹介
Confidential & Proprietary | 4 自己紹介 としおくんのスペック • TypeScriptを中心にキャリアを積んだフロントエンドエンジニア •
Java、Ruby、PythonでのAPI開発の経験もあり • Rust歴は2024年6月時点でゼロ
Confidential & Proprietary | 5 本日の内容 - 本日の発表の主な対象者、ゴール - アダコテックでRustを採用した経緯
- Rustを採用してみてどうだったか? - RustによるREST APIの具体的な実装方針の紹介
Confidential & Proprietary | 6 本日の発表の主な対象者、ゴール
Confidential & Proprietary | 7 本日の発表の主な対象者、ゴール 主な対象者 RustによるWebアプリケーション開発に興味があるけど、社内での導入に は至っていないRust未経験の方 ゴール
Rust未経験者である自分の、等身大の技術選定過程を伝え、今後Rustを採 用する際の参考になること
Confidential & Proprietary | 8 アダコテックでRustを採用した経緯
Confidential & Proprietary | 9 アダコテックでRustを採用した経緯 弊社採用サイトから引用
Confidential & Proprietary | 10 アダコテックでRustを採用した経緯 アダコテックのプロダクトの構成について Webアプリケーション 画像処理基盤 機械学習基盤
Windows アプリケーション 画像処理基盤 機械学習基盤 フロントエンド API
Confidential & Proprietary | 11 アダコテックでRustを採用した経緯 アダコテックのプロダクトの構成について Webアプリケーション 機械学習基盤 Windows
アプリケーション 機械学習基盤 ここをRustで書いていた 画像処理基盤 画像処理基盤 フロントエンド API
Confidential & Proprietary | 12 アダコテックでRustを採用した経緯 アダコテックのプロダクトの構成について Webアプリケーション 画像処理基盤 機械学習基盤
Windows アプリケーション 画像処理基盤 機械学習基盤 こっちもRustで書けるかも? フロントエンド API
Confidential & Proprietary | 13 アダコテックでRustを採用した経緯 Pythonでの開発で何が不都合だったのか?
Confidential & Proprietary | 14 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み
- アダコテックの主な開発の流れ
Confidential & Proprietary | 15 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み
試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない
Confidential & Proprietary | 16 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み
試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない 研究開発で使用したメンテナンス性が考慮さ れていないPythonコードのまま組み込まれる メンテナンスをするのは、研究とは別のメン バーのため、保守運用のコストがかさむ 転用
Confidential & Proprietary | 17 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み
試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない 研究開発で使用したメンテナンス性が考慮さ れていないPythonコードのまま組み込まれる メンテナンスをするのは、研究とは別のメン バーのため、保守運用のコストがかさむ Pythonの言語仕様の問題だけではないが、 プロダクトに組み込む際には言語仕様で実装を縛ることで、 上記の問題を解決したかった
Confidential & Proprietary | 18 アダコテックでRustを採用した経緯 Web開発関連のエコ システム 社内ノウハウ 弊社AIエンジニアのコ
ンバートしやすさ TypeScript ◯ ◯ △ Java ◯ ✕ ✕ Rust △ ◯ ◯ - 静的型付け言語の中でアダコテックと相性の良い言語を選定 - TypeScriptと悩んだが、画像処理基盤と同じ言語で開発できるの で、Rustを採用することにした
Confidential & Proprietary | 19 Rustを採用してみてどうだったか?
Confidential & Proprietary | 20 Rustを採用してみてどうだったか? Q. Rustは難しくなかったか?
Confidential & Proprietary | 21 Rustを採用してみてどうだったか? A. 難しかった。けどなんとかなった
Confidential & Proprietary | 22 Rustを採用してみてどうだったか? • なんとかなった理由① ◦ キャッチアップ
するための学習素材は十分にあった ▪ Rustツアー ▪ Rustlings ▪ 『手を動かして考えればよくわかる 高効率言語 Rust 書き かた・作りかた 』
Confidential & Proprietary | 23 Rustを採用してみてどうだったか? • なんとかなった理由② ◦ 社内に実績があり相談相手がいた
▪ ztd_rustというチャンネルで Rustで困ったことを相談 ▪ 週次の技術LT会でRustに関す る知見を共有
Confidential & Proprietary | 24 Rustを採用してみてどうだったか? • なんとかなった理由③ ◦ 困ったときのChatGPT
▪ 普通に検索しても出てこな い質問に対しても適切に回 答してくれた
Confidential & Proprietary | 25 Rustを採用してみてどうだったか? よかったこと
Confidential & Proprietary | 26 Rustを採用してみてどうだったか? • よかったこと① ◦ 言語仕様で適切に実装に対する縛りをしたいというニーズは満
たせた
Confidential & Proprietary | 27 Rustを採用してみてどうだったか? 変数は基本的にイミュータブル なので、想定外の副作用を含む 関数が実装されない (変更するなら
mut が必要) 所有権の考え方を使うと、変 数の扱う範囲を明確にするこ とができる
Confidential & Proprietary | 28 Rustを採用してみてどうだったか? • よかったこと② ◦ Result型を使うことで、シンプルかつヌケモレのない例外処理がで
きる
Confidential & Proprietary | 29 Rustを採用してみてどうだったか? Result型を返すことで、 例外処理を呼び出し元に 強制することができる Pythonだと、
try~exceptが なくても動作は してしまう
Confidential & Proprietary | 30 Rustを採用してみてどうだったか? • よかったこと③ ◦ Lintエラーやテスト基盤が言語仕様として組み込まれている
▪ 以下は使用されていない変数に関するwarning
Confidential & Proprietary | 31 Rustを採用してみてどうだったか? 大変だったこと
Confidential & Proprietary | 32 Rustを採用してみてどうだったか? • 大変だったこと① ◦ コンパイルに時間がかかる
▪ インクリメンタルビルドで49秒かかる(20000行規模)
Confidential & Proprietary | 33 Rustを採用してみてどうだったか? • 大変だったこと② ◦ RustのWebアプリケーション周りのエコシステムはまだ成熟してい
ない ▪ デファクトスタンダードになるようなフレームワークはない ▪ ORM周りがRailsやSQLAlchemyに慣れていると、かゆいところ に手が届かない
Confidential & Proprietary | 34 Rustを採用してみてどうだったか? https://codezine.jp/article/detail/17528?p=3
Confidential & Proprietary | 35 Rustを採用してみてどうだったか? • 不親切すぎるORMのエラーメッセージ ◦ 以下はRustのstructの型とテーブルのカラムの型が一致してい
ないときに発生するエラー
Confidential & Proprietary | 36 Rustを採用してみてどうだったか? 結論
Confidential & Proprietary | 37 Rustを採用してみてどうだったか? RustでWebアプリケーション開発、、、 やれなくは、、、ない!
Confidential & Proprietary | 38 RustによるREST APIの具体的な実装方針の紹介
Confidential & Proprietary | 39 RustによるREST APIの具体的な実装方針の紹介 • 技術選定 ◦
Webフレームワーク ▪ Actix Web ◦ ORM ▪ Diesel ◦ エラーハンドリング ▪ thiserror, anyhow ◦ OpenAPI ▪ utoipa
Confidential & Proprietary | 40 RustによるREST APIの具体的な実装方針の紹介 • 設計 ◦
Actix Webは基本的なリクエストルーティングの機能しかない ため、全体構成は自分で考える必要がある ◦ 以下リポジトリを参考にしてレイヤードアーキテクチャっぽく 設計した ▪ https://github.com/snamiki1212/realworld-v1-rust-a ctix-web-diesel
Confidential & Proprietary | 41 RustによるREST APIの具体的な実装方針の紹介 • 設計
Confidential & Proprietary | 42 RustによるREST APIの具体的な実装方針の紹介 ざっとコードをお見せするので、 大まかな雰囲気を掴んでいただければ幸いです
Confidential & Proprietary | 43 RustによるREST APIの具体的な実装方針の紹介 • Entry Point
Confidential & Proprietary | 44 RustによるREST APIの具体的な実装方針の紹介 • Controller
Confidential & Proprietary | 45 RustによるREST APIの具体的な実装方針の紹介 • Usecase
Confidential & Proprietary | 46 RustによるREST APIの具体的な実装方針の紹介 • Domain
Confidential & Proprietary | 47 RustによるREST APIの具体的な実装方針の紹介 • Repository
Confidential & Proprietary | 48 RustによるREST APIの具体的な実装方針の紹介 • ORM(Diesel) ◦
テーブル結合のクエリ ◦
Confidential & Proprietary | 49 RustによるREST APIの具体的な実装方針の紹介 • ORM(Diesel) ◦
集計をしたりする場合には、生SQLをstructにマッピングする 方が簡単なケースが多い
Confidential & Proprietary | 50 RustによるREST APIの具体的な実装方針の紹介 • カバレッジ計測 ◦
llvm-covというクレートを使うとCodeCovでカバレッジを計測 できる
Confidential & Proprietary | 51 結び Webアプリケーション開発の手段としてRustを採用するには、まだ関連の ライブラリが整っているとは言えません ただ、Rustの言語仕様にはそれ自体の魅力があり、今後Web側の開発事例 が増えていく可能性はあると思っています
興味が少しでもある方は、ぜひ一緒にRustのWeb開発のエコシステムを 作っていきましょう
アダコテックでの開発に興味のある方 (正社員、業務委託問わず) ぜひtoshiokun0322 まで DMにてご連絡ください!
Thank you very much for your time!!