SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
RustでWebSocketな
⾃社APIを使う
Satoshi Yoshikawa
@emergent
⾃⼰紹介
• フェアリーデバイセズ株式会社
• ソフトウェアエンジニア歴9ヶ⽉
• 10年ぶり2回⽬
• Rust歴半年
• ねこ⼤好き
現所属会社について
• ⾳声APIとデバイスの会社
• http://www.fairydevices.jp/
• 使⽤⾔語
• サーバー:C++とPython
• クライアントライブラリ:C++
現所属会社について
• ⾳声APIとデバイスの会社
• http://www.fairydevices.jp/
• 使⽤⾔語
• サーバー:C++とPython
• クライアントライブラリ:C++
Rustにしたらよくない?
⼤義名分
・安全性 → 品質レベルの底上げ
・わりと速い
→ まずは⾃分でやってみよう
C++ぜんぜんわからない…
既存コードにも結構メモリ系バグある
Rust学び始め期
• Rust by Example写経
• Project EulerをRustで解く
• 競プロ過去問をRustで解く
↓
• 途中から数学&アルゴリズム⼒のたたかいに
• Rustの⾔語仕様のうち、触れないままのものも
• エラー処理とか、並列処理とか、ライフタイムとか…
実装チャレンジ
• libmimiioでできることをRustでやってみる
• WebSocketで弊社の⾳声認識APIを利⽤するライブラリ
• ⼤元のC++版はオープンソースで公開
• https://github.com/FairyDevicesRD/libmimiio
やること
1. WebSocket接続を確⽴し、
2. ⾳声データをチャンクで送信し、
3. ⾳声認識結果(JSON)を五⽉⾬で受け取る
https://mimi.readme.io/docs/mimi-websocket-api-spec
とりあえず動いたもの
• https://github.com/emergent/rust-mimiio
• 決め打ち部分で動かしてる部分は結構多い
• 送受信スレッドの中にいろんな処理を押し込めているので
いろいろださい
ぶつかった壁
•Future
•コールバック 絶賛ぶつかり中
Future
• websocketクレートのサンプルコード抜粋(client.rs=Futureなし版)
https://github.com/websockets-rs/rust-websocket/blob/master/examples/client.rs
…
…
…
クライアントを作って接続確⽴(わかる)
接続をsenderとreceiverに分割(わかる)
senderとreceiver間の通信⽤channel(わかる)
Sender使って送信ループ(わかる)
Receiver使って受信ループ(わかる)
Future
• websocketクレートのサンプルコード抜粋(async-client.rs=Futureあり版)
…
…
…
runtimeというものが作られている
(わからない)
ユーザーの⼊⼒を受け付けるchannelが作られている
(まあわかる)
async_connect_insecure()で接続確⽴(まあわかる)
Stream?? Sink?? Select?? Forward??
(混乱)
https://github.com/websockets-rs/rust-websocket/blob/master/examples/async-client.rs
Future
• サーバーとの接続がセキュアな(wss://〜)場合
• client は splittable ではない → sender / receiver へ分割不可能
• ⾃社APIは wss://〜 のみしか受け付けない
→ わからないなりにFutureを使う必要あり
https://github.com/websockets-rs/rust-websocket/blob/master/examples/ssl-client.rs
この辺はサンプルコードのまま
streamが受信したデータは、
filter_map()に流れてくる
→⾳声認識結果の受信時の処理を記述
Noneを返さないと、
sinkに流れていってしまう
送信データは別スレッドから
channel経由で受け取り、
sinkにぶちこむ
コールバック
• 今は送信スレッドにファイル読み込み処理を書いているが、
これを外に出したい
mimiio
ライブラリ
サーバー
ファイルから
分割送信
マイクデバイスから
直接データ送信
⼊⼒⽅法は利⽤者次第
コールバック
こんなふうに呼び側から渡して、
コールバック
こんなふうに使いたい
…
コールバック
コンパイラさんから、いろんな怒られが発⽣
Impl_callback ブランチに、試⾏錯誤の途中状況をpush 済み
→わかる⽅アドバイスください!!!
まとめ
• ⾃社WebSocket APIのクライアントプログラムを
Rustで実装してみました
• ⼀応動いたものの、汎⽤的に使えるものにするには、
もっと⾔語仕様・ライブラリへの深い理解が必要…
• 勉強ネタは尽きないのでいいですね
採⽤活動中
• 弊社では⼀緒に働いてくれるエンジニアを募集中です!
• ⾳声の取り扱いに興味がある/得意な⽅
• サーバーアプリケーション開発・クラウド運⽤に興味がある⽅
• クライアントアプリケーションも作るぜという⽅
• ゆくゆくはRustをプロダクトに使うぜという野望のある⽅
ありがとうございました

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
chatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdfchatGPTの驚くべき対話能力.pdf
chatGPTの驚くべき対話能力.pdf
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
React + Amplifyで アプリ開発
React + Amplifyで アプリ開発React + Amplifyで アプリ開発
React + Amplifyで アプリ開発
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
 
OutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive WebOutSystems 新機能紹介: Reactive Web
OutSystems 新機能紹介: Reactive Web
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なこととアジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
 
ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くない
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
 
ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢ゼロ幅スペースという悪夢
ゼロ幅スペースという悪夢
 

Semelhante a RustでWebSocketな自社APIを使う

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 

Semelhante a RustでWebSocketな自社APIを使う (20)

Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すこれ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 

Último

Último (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

RustでWebSocketな自社APIを使う