SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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をプロダクトに使うぜという野望のある⽅
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

それは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automateそれは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower AutomateTomoyuki Obi
 
NLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZANLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZAMegagon Labs
 
Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。Tatsuya Kobayashi
 
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようYasuharu Nishi
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxTakayuki Shimizukawa
 
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023Satoshi Sakashita
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景Tatsuo Kudo
 
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方Yoshitaka Kawashima
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Takafumi ONAKA
 
UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介Noriyuki Mizuno
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素NISHIHARA Shota
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3Kazuchika Sekiya
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!増田 亨
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfestay_taka_23
 
Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Yamashita Takeshi
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSTakeharu Igari
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のりRecruit Lifestyle Co., Ltd.
 

Was ist angesagt? (20)

それは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automateそれは本当にAutomate? 改めて考えるPower Automate
それは本当にAutomate? 改めて考えるPower Automate
 
NLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZANLP2019 松田寛 - GiNZA
NLP2019 松田寛 - GiNZA
 
Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。Power Automateで電子帳簿保存法に対応してみた。
Power Automateで電子帳簿保存法に対応してみた。
 
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしようちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしよう
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023
STAC2023 テストケースの自動生成に生成AI導入を検討してみた STAC2023
 
なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景なぜOpenID Connectが必要となったのか、その歴史的背景
なぜOpenID Connectが必要となったのか、その歴史的背景
 
Proxy War
Proxy WarProxy War
Proxy War
 
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮
 
UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介UTP(UML Testing Profile)概要紹介
UTP(UML Testing Profile)概要紹介
 
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
 
Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略Flutterアプリ開発におけるモジュール分割戦略
Flutterアプリ開発におけるモジュール分割戦略
 
ブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSSブラウザにやさしいHTML/CSS
ブラウザにやさしいHTML/CSS
 
越境する開発
越境する開発越境する開発
越境する開発
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり
 

Ähnlich wie RustでWebSocketな自社APIを使う

Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Yossy Taka
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介Android 開発, 運用時に使いたいライブラリやサービスの紹介
Android 開発, 運用時に使いたいライブラリやサービスの紹介健一 辰濱
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!SoftLayer API で資産管理をお手伝い!
SoftLayer API で資産管理をお手伝い!Kazumi IWANAGA
 
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_52Yahoo!デベロッパーネットワーク
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD翔新 史
 
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すこれ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回すStudy Group by SciencePark Corp.
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Tokoroten Nakayama
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Drecom Co., Ltd.
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築You&I
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるShunsuke Maeda
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 

Ähnlich wie 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が3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 

RustでWebSocketな自社APIを使う