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
Fairy DevicesでのRust活用
Search
Satoshi Yoshikawa
April 17, 2025
Technology
0
430
Fairy DevicesでのRust活用
2025-04-17 の Findy Job LT でお話したスライドです。
Satoshi Yoshikawa
April 17, 2025
Tweet
Share
More Decks by Satoshi Yoshikawa
See All by Satoshi Yoshikawa
Fairy DevicesがRustを採用して 5年が経ちました
emergent
0
220
ONNX推論クレートの比較と実装奮闘記
emergent
1
930
フェアリーデバイセズがRustを 採用して3年が過ぎました
emergent
1
930
Other Decks in Technology
See All in Technology
組織の“見えない壁”を越えよ!エンタープライズシフトに必須な3つのPMの「在り方」変革 #pmconf2025
masakazu178
1
590
adk-samples に学ぶデータ分析 LLM エージェント開発
na0
2
170
仕様は“書く”より“語る” - 分断を超えたチーム開発の実践 / 20251115 Naoki Takahashi
shift_evolve
PRO
1
1.1k
機密情報の漏洩を防げ! Webフロントエンド開発で意識すべき漏洩パターンとその対策
mizdra
PRO
10
4.6k
事業状況で変化する最適解。進化し続ける開発組織とアーキテクチャ
caddi_eng
1
4.3k
Capitole du Libre 2025 - Keynote - Cloud du Coeur
ju_hnny5
0
120
ECS組み込みのBlue/Greenデプロイを動かしてELB側の動きを観察してみる
yuki_ink
3
370
持続可能なアクセシビリティ開発
azukiazusa1
6
280
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
140
なぜインフラコードのモジュール化は難しいのか - アプリケーションコードとの本質的な違いから考える
mizzy
60
21k
不確実性に備える ABEMA の信頼性設計とオブザーバビリティ基盤
nagapad
3
4.5k
グローバルなコンパウンド戦略を支えるモジュラーモノリスとドメイン駆動設計
kawauso
3
5.8k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.3k
The Cult of Friendly URLs
andyhume
79
6.7k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Statistics for Hackers
jakevdp
799
230k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Side Projects
sachag
455
43k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
940
How STYLIGHT went responsive
nonsquared
100
5.9k
Transcript
Fairy DevicesでのRust活用 2024-04-17 Fairy Devices株式会社 プロダクト開発部 部長 吉川哲史 Findy Job
LT 1
本日のトピック 1. 自己紹介 2. 会社・プロダクト紹介 3. Fairy DevicesにおけるRust開発 4. 中長期での課題・今後の展望
2
自己紹介 • X (ex. Twitter)/GitHub: @emergent • Fairy Devices株式会社 プロダクト開発部
部長 • Publication ◦ 『実践Rustプログラミング入門』共著 ◦ WEB+DB PRESS No.129 インタビュー ◦ WEB+DB PRESS No.131 特集「Rust入門」 ◦ 『RustによるWebアプリケーション開発 設 計からリリース・運用まで』共著 Satoshi Yoshikawa / 吉川哲史 new! 3
4 会社紹介:Fairy Devices コーポレートサイト https://fairydevices.jp/
5 会社紹介:Fairy Devices × ウェアラブル デバイス AI コーポレートサイト https://fairydevices.jp/
Fairy Devicesが提供するサービス 6 音声テクノロジースタック ウェアラブルデバイスによる 遠隔業務支援サービス
7
8 ウェアラブルデバイス THINKLET
9
ウェアラブルデバイス THINKLET 10 https://mimi.fairydevices.jp/technology/device/thinklet/ Androidアプリが動作する カメラ マイク(計5個)
Fairy DevicesにおけるRust活用 • Rust技術選定理由 • 技術スタックの概観 11 Zennでもいろいろな技術情報を発信しています https://zenn.dev/p/fairydevices
(まだ事業がmimiだけだったころ) • プロダクト(サーバー、クライアントライブラリ等)にはC++で実装されたもの が多くあった • 音声処理はマルチスレッドでの非同期処理実装が必要なケースが多く、C++のま ま改善・改修を行うのは難しいと考えた • より安全に開発できるプログラミング言語を探した結果、Rustがフィットした Rust採用の経緯
12
技術スタックの概観 • mimi クラウドAIの構成概要 • LINKLETの構成概要 ◦ LINKLET関連のシステム • サービスごとの技術スタック
13
mimi クラウドAIの構成概要 14 音声入力 エンドポイント クライアント プログラム 中間サーバー (or エンジンのラッパープ
ログラム) 音声処理 エンジン WebSocket WebSocket エンジンごとに 異なる接続仕様 ⋮ ひとつの音声入力のストリー ムに対し、複数の音声処理を 同時にかけられるよう共通の メッセージング仕様で統一 音声ストリーム 音声処理結果(テキスト)
LINKLETの構成概要 15 フロント エンド バック エンド THINKLET 制御基盤 デバイス制御リクエスト デバイス制御リクエストへの応答
デバイス内のデータ ウェアラブルデバイス THINKLET リクエストごとの実行時間は デバイス依存なので、制御リ クエストはすべて非同期化 LINKLET
LINKLET関連のシステム 16 LINKLET 遠隔業務支援+デバイス管理 LINKLET管理Web(社内用) 映像解析システム(開発中) 顧客管理 映像活用
サービスごとの技術スタック バック エンド フロント エンド mimi THINKLET 制御基盤 運用ツール LINKLET
LINKLET管理Web (社内用) 17 映像解析システム (開発中)
エンジニアの業務(サーバーサイド) フロントエンド(TypeScript)・バックエンド(Rust)・インフラ(AWS/GCP)に対し 「一人二役(以上) 」のエンジニアのチーム構成 • 元々は大半のメンバーがバックエンドエンジニア ◦ フロントエンドは外部パートナーに委託することが多かった ◦ チーム能力的に不足している部分はパートナーの方で補いつつ自社内
エンジニアの能力拡大を図っている 18 バックエンド クラウド インフラ フロントエンド バックエンド クラウド インフラ フロントエンド デバイス デバイス
直近の機能開発内容(LINKLET) • Web画面からのBluetoothイヤホン設定機能 • 遠隔支援リクエストのUX改善 • デバイス追跡機能(位置情報表示) • その他、軽微なUI/UX改善、各種バージョン更新等多数 19
大きい機能追加をする時は、だいたいデバイスの ファームウェア改修も伴うので、関係メンバーとの密 なコミュニケーションやインタフェース設計が重要
業務にRustを採用してどうだったか • Rust採用当初〜現在まで ◦ C++より安心して開発できる ◦ 楽しい • 人材採用面 ◦
Rustでの仕事に興味を持って応募してくれる人が増えた • 今のエンジニアたちにとっては ◦ Rustがふつう ◦ TypeScriptの型システムがRustと違うので戸惑い… 20
Rustを採用して5年経った現在の課題 • プロダクトごとの使用クレートにばらつきが出ている ◦ その時のトレンド等でプロダクトに採用したクレートが異なる ▪ Webフレームワーク:Actix Web、axum、warp ▪ DB接続:Diesel、SQLx
◦ そもそもasync/awaitが言語機能に乗る前に作ったサーバーとか もいる • Rustやクレートの進化に追いつくのが大変 ◦ バージョンアップ追従などが結構たいへん ◦ Clippyで新しい警告が出るようになる ▪ 次のバージョンで出なくなることもある 21
Rustを採用して5年経った現在の課題 • プロダクトごとの使用クレートにばらつきが出ている ◦ その時のトレンド等でプロダクトに採用したクレートが異なる ▪ Webフレームワーク:Actix Web、axum、warp ▪ DB接続:Diesel、SQLx
◦ そもそもasync/awaitが言語機能に乗る前に作ったサーバーとか もいる • Rustやクレートの進化に追いつくのが大変 ◦ バージョンアップ追従などが結構たいへん ◦ Clippyで新しい警告が出るようになる ▪ 次のバージョンで出なくなることもある 22 特定のクレートに依存するコードが限定的になるよう、 レイヤードアーキテクチャなどを用いて設計をしっかりしよう! CI/CDを整備して、更新や非推奨化に対応しやすくしよう
Rustを採用して5年経った現在の課題 • プロダクトごとの使用クレートにばらつきが出ている ◦ その時のトレンド等でプロダクトに採用したクレートが異なる ▪ Webフレームワーク:Actix Web、axum、warp ▪ DB接続:Diesel、SQLx
◦ そもそもasync/awaitが言語機能に乗る前に作ったサーバーとか もいる • Rustやクレートの進化に追いつくのが大変 ◦ バージョンアップ追従などが結構たいへん ◦ Clippyで新しい警告が出るようになる ▪ 次のバージョンで出なくなることもある 23 特定のクレートに依存するコードが限定的になるよう、 レイヤードアーキテクチャなどを用いて設計をしっかりしよう! CI/CDを整備して、更新や非推奨化に対応しやすくしよう Rustでも 「Web開発で大事なこと」 は普通に大事
Rustを採用して5年経った現在の課題 • プロダクトごとの使用クレートにばらつきが出ている ◦ その時のトレンド等でプロダクトに採用したクレートが異なる ▪ Webフレームワーク:Actix Web、axum、warp ▪ DB接続:Diesel、SQLx
◦ そもそもasync/awaitが言語機能に乗る前に作ったサーバーとか もいる • Rustやクレートの進化に追いつくのが大変 ◦ バージョンアップ追従などが結構たいへん ◦ Clippyで新しい警告が出るようになる ▪ 次のバージョンで出なくなることもある 24 特定のクレートに依存するコードが限定的になるよう、 レイヤードアーキテクチャなどを用いて設計をしっかりしよう! CI/CDを整備して、更新や非推奨化に対応しやすくしよう Rustでも 「Web開発で大事なこと」 は普通に大事
Rustならではの課題(ビルド時間) 25 https://zenn.dev/fairydevices/articles/59cd718341da58
中長期での課題・チャレンジ • 既存プロダクトにおける生産性・保守性の向上 ◦ 使用クレート・ライブラリの共通化 ◦ AI系ツールの開発チームへの導入 • プロダクトの新規領域へのRustの導入と活用(の検討) ◦
Webフロントエンド(TypeScript) ◦ 音声処理ライブラリ(C++) ◦ Androidアプリ・ライブラリなど(Kotlin) 26 ただやればいいってわけではないので プロダクトへの適用は慎重に…
今後の展望 • 現在、会社は新しいフェーズに向けて進行中 • 開発チームの拡大に伴う組織づくりも悩みどころ 27
Fairy Devicesでは一緒に働く仲間を募集中です • Webアプリケーション ◦ バックエンド ◦ フロントエンド • クラウドエンジニア
• デバイスソフトウェア • Androidアプリ • QA(品質保証) etc 28 採用ページのQRコード Rustにこだわらず、多様なご経験者を歓迎します
ご清聴ありがとうございました 29