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
190
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
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
How GitHub (no longer) Works
holman
311
140k
A designer walks into a library…
pauljervisheath
205
24k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Automating Front-end Workflow
addyosmani
1366
200k
Bash Introduction
62gerente
609
210k
Building Your Own Lightsaber
phodgson
103
6.1k
Documentation Writing (for coders)
carmenintech
67
4.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
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!!