Rust Kansai Meetup Osaka #0 にてLTで発表したスライドです
https://rust-kansai.connpass.com/event/152446/
社内ツールをRustに書き換えてみた件morifuji koudai
View Slide
• 名前• morifuji• twitter : @marooon88• 仕事• atma株式会社• PHP/Nodejs/Vuejs• 趣味• Rust(勉強中the bookとチャリ本1週しただけ)• NitendoSwitchのインディーゲーム• katana zero• The friends of Ringo Ishikawa• moon• Celeste自己紹介
会社紹介絶賛採用中• Vue.jsフロントエンドエンジニア• Pythonサーバーサイドエンジニア特徴• 西中島のAI系ベンチャー• 服装自由• フレックス勤務(朝11時から)• 週2リモート勤務 etc...
• 現状の課題• 解決策• 新たな課題• Rustで実装してみた• Rustで実装してみた(mpsc)• まとめ• appendix-その他所感• appendix-わからなかったこと目次
• 誰がどのぐらいどのPJで何をしているか把握が困難だった• 作業時間の明確な記録がなくPJの振り返りが困難に• 誰が何をやっているかわかりにくい• いくつかのPJでは毎日作業報告書に記載する作業が必要だった現状の課題
現状の課題• 誰がどのぐらいどのPJで何をしているか把握が困難だった• 作業時間の明確な記録がなくPJの振り返りが困難に• 誰が何をやっているかわかりにくい• いくつかのPJでは毎日作業報告書に記載する作業が必要だった誰でも気軽にPJに紐づく作業時間の記録の仕組みづくりがあれば...
解決→誰でも気軽にPJに紐づく作業時間の記録の仕組みづくりSlackBotGoogleAppScriptGoogleSpreadSheet作業時間 作業内容
解決策slackで /workと打つspreadsheetに記録されresponseが返る
解決策これで平和になりました
解決これで平和になりました
新たな課題1,2ヶ月後から徐々にタイムアウトエラーの発生が増えて来た
新たな課題1,2ヶ月後から徐々にタイムアウトエラーの発生が増えて来たGASからのレスポンスが遅くなりすぎてSlackBotがレスポンスを受付けずタイムアウトエラー
新たな課題←理想GoogleAppScriptは同期的なので実現できない
新たな課題Rustを使って....
新たな課題→Rustを使って非同期で処理させるRust
Rustで実装してみたRustでやりたいこと1. 即座にレスポンスする 2. gasに対してリクエストを投げる実現方法→リクエストをキューに入れ 即座にレスポンス。 別スレッドでキューから取り出し、gasにリクエストを投げるRust
Rustで実装してみたフレームワークは?→actix-webを採用• 理由• 他に比べてスター数が多い• actorモデル というのがキューを処理するのに適してそう• ベンチマーク最速?速そう• 安定しているらしい• 懸念点• クエリ・ボディのデータの取り出しが大変そう
Rustで実装してみた実装しました✍
Rustで実装してみた←別スレッドでキューからタスクを取り出し、gasにリクエストを投げる処理
できたけど微妙なコード...→actixを使ったactorモデルはなんとなく理解できたが使い方で詰まった→諦めてオレオレキュー(Arc>>)を作ってしまったRustで実装してみた
Rustで実装してみたできたけど微妙なコード...→actixを使ったactorモデルはなんとなく理解できたが使い方で詰まった→諦めてオレオレキュー(Arc>>)を作ってしまった(rust-jpのactix-webチャンネルにて)「一般的なRustプログラムの場合はmpscを使いますよ」
Rustで実装してみた(mpsc)mpscとは?>Multi-producer, single-consumer FIFO queue communication primitives複数の生産者が単一の消費者に投げるのに特化したキューリクエストから発生するタスクを同一のスレッドで捌くのにぴったり!同様にspmcというものも存在するらしい
Rustで実装してみた(mpsc)•
Rustで実装してみた(mpsc)mpscは• 可読性が高い• APIが簡単で書きやすい
• 改善した結果→エラーがなく作業時間を記録できて気持ちいい• rust-jpのスラックは優しい方がたくさんいらっしゃる• mpscはキューを実装する場合に便利• actorモデルを理解するとよりactix-webがわかるrepository↓https://gitlab.com/morifuji/rust-practime-log/tree/master/time-trackingまとめ
appendix-その他所感• actix-webのホットリローディングの仕組みが少し大変• vscodeのRLSが遅い• actix-webは(PHP,Nodejs)のwebフレームワークより少し取り回しが大変• Dockerのビルドが10分以上かかる• マルチステージビルド必須• ステージ1. →主要なライブラリダウンロード・コンパイル• ステージ2. →ステージ1のキャッシュを使い差分のみビルド• actix-webについて• 豊富なサンプルがついているので実装で特に困ることなかった。
appendix-わからなかったこと• actorモデルの使いどころがわからなかった• 結局メッセージを送るのに従来のStateを使用せざるをえなさそう• →可読性ではmpscの方がよい?