Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20241030 RustランチLT大会 - 企業でのRust活用事例 アダコテック発表資料

Toshihiro Taniguchi
November 12, 2024
190

20241030 RustランチLT大会 - 企業でのRust活用事例 アダコテック発表資料

2024年10月30日に行われた「RustランチLT大会 - 企業でのRust活用事例」の登壇資料になります。
https://forkwell.connpass.com/event/332843/

Toshihiro Taniguchi

November 12, 2024
Tweet

Transcript

  1. Confidential & Proprietary | 2 自己紹介 谷口 俊博(toshiokun) / @toshiokun_0322

    株式会社アダコテック プロダクト開発部 エンジニア 好き: 麻雀 - アダコテック麻雀部所属 - 元セガサミーフェニックスの魚谷侑未推し ランニング - フルマラソン完走経験あり - 最近腰を痛めて走れていない
  2. Confidential & Proprietary | 5 本日の内容 - 本日の発表の主な対象者、ゴール - アダコテックでRustを採用した経緯

    - Rustを採用してみてどうだったか? - RustによるREST APIの具体的な実装方針の紹介
  3. Confidential & Proprietary | 11 アダコテックでRustを採用した経緯 アダコテックのプロダクトの構成について Webアプリケーション 機械学習基盤 Windows

    アプリケーション 機械学習基盤 ここをRustで書いていた 画像処理基盤 画像処理基盤 フロントエンド API
  4. Confidential & Proprietary | 12 アダコテックでRustを採用した経緯 アダコテックのプロダクトの構成について Webアプリケーション 画像処理基盤 機械学習基盤

    Windows アプリケーション 画像処理基盤 機械学習基盤 こっちもRustで書けるかも? フロントエンド API
  5. Confidential & Proprietary | 15 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み

    試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない
  6. Confidential & Proprietary | 16 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み

    試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない 研究開発で使用したメンテナンス性が考慮さ れていないPythonコードのまま組み込まれる メンテナンスをするのは、研究とは別のメン バーのため、保守運用のコストがかさむ 転用
  7. Confidential & Proprietary | 17 アダコテックでRustを採用した経緯 研究開発 性能判定 プロダクトへの 組み込み

    試行回数が重要なので、簡単にスクリ プトを組めるPythonが最適 原則、研究開発用の個人の環境で完 結するため、メンテナンス性は意識し ない 研究開発で使用したメンテナンス性が考慮さ れていないPythonコードのまま組み込まれる メンテナンスをするのは、研究とは別のメン バーのため、保守運用のコストがかさむ Pythonの言語仕様の問題だけではないが、 プロダクトに組み込む際には言語仕様で実装を縛ることで、 上記の問題を解決したかった
  8. Confidential & Proprietary | 18 アダコテックでRustを採用した経緯 Web開発関連のエコ システム 社内ノウハウ 弊社AIエンジニアのコ

    ンバートしやすさ TypeScript ◯ ◯ △ Java ◯ ✕ ✕ Rust △ ◯ ◯ - 静的型付け言語の中でアダコテックと相性の良い言語を選定 - TypeScriptと悩んだが、画像処理基盤と同じ言語で開発できるの で、Rustを採用することにした
  9. Confidential & Proprietary | 22 Rustを採用してみてどうだったか? • なんとかなった理由① ◦ キャッチアップ

    するための学習素材は十分にあった ▪ Rustツアー ▪ Rustlings ▪ 『手を動かして考えればよくわかる 高効率言語 Rust 書き かた・作りかた 』
  10. Confidential & Proprietary | 23 Rustを採用してみてどうだったか? • なんとかなった理由② ◦ 社内に実績があり相談相手がいた

    ▪ ztd_rustというチャンネルで Rustで困ったことを相談 ▪ 週次の技術LT会でRustに関す る知見を共有
  11. Confidential & Proprietary | 24 Rustを採用してみてどうだったか? • なんとかなった理由③ ◦ 困ったときのChatGPT

    ▪ 普通に検索しても出てこな い質問に対しても適切に回 答してくれた
  12. Confidential & Proprietary | 33 Rustを採用してみてどうだったか? • 大変だったこと② ◦ RustのWebアプリケーション周りのエコシステムはまだ成熟してい

    ない ▪ デファクトスタンダードになるようなフレームワークはない ▪ ORM周りがRailsやSQLAlchemyに慣れていると、かゆいところ に手が届かない
  13. Confidential & Proprietary | 39 RustによるREST APIの具体的な実装方針の紹介 • 技術選定 ◦

    Webフレームワーク ▪ Actix Web ◦ ORM ▪ Diesel ◦ エラーハンドリング ▪ thiserror, anyhow ◦ OpenAPI ▪ utoipa
  14. Confidential & Proprietary | 40 RustによるREST APIの具体的な実装方針の紹介 • 設計 ◦

    Actix Webは基本的なリクエストルーティングの機能しかない ため、全体構成は自分で考える必要がある ◦ 以下リポジトリを参考にしてレイヤードアーキテクチャっぽく 設計した ▪ https://github.com/snamiki1212/realworld-v1-rust-a ctix-web-diesel
  15. Confidential & Proprietary | 49 RustによるREST APIの具体的な実装方針の紹介 • ORM(Diesel) ◦

    集計をしたりする場合には、生SQLをstructにマッピングする 方が簡単なケースが多い
  16. Confidential & Proprietary | 50 RustによるREST APIの具体的な実装方針の紹介 • カバレッジ計測 ◦

    llvm-covというクレートを使うとCodeCovでカバレッジを計測 できる