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
社内ツールを Rustに書き換えてみた件
Search
morimorikochan
November 09, 2019
Technology
0
9.5k
社内ツールを Rustに書き換えてみた件
Rust Kansai Meetup Osaka #0 にてLTで発表したスライドです
https://rust-kansai.connpass.com/event/152446/
morimorikochan
November 09, 2019
Tweet
Share
More Decks by morimorikochan
See All by morimorikochan
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
240
TypeScriptでモジュラーモノリスやってみた
diggymo
0
330
DynamoDBの"Replacement"時にデータが消されないようにCustom Resource Provider Frameworkでカスタムリソース作ってみた件
diggymo
1
830
過去のインプットとアウトプットを振り返る
diggymo
0
250
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
2.3k
個人開発でLIFFとMessagingAPIを使ってわかった5つのこと
diggymo
0
1k
Reactのuse()って何なん?
diggymo
1
2.3k
Figmaを通したエンジニアとデザイナーの連携について
diggymo
0
7.5k
細かすぎて伝わらないVue3RFC選手権
diggymo
0
800
Other Decks in Technology
See All in Technology
マルチモーダル基盤モデルに基づく動画と音の解析技術
lycorptech_jp
PRO
4
550
GMOペパボのデータ基盤とデータ活用の現在地 / Current State of GMO Pepabo's Data Infrastructure and Data Utilization
zaimy
3
210
AWS re:Inforce 2025 re:Cap Update Pickup & AWS Control Tower の運用における考慮ポイント
htan
1
210
家族の思い出を形にする 〜 1秒動画の生成を支えるインフラアーキテクチャ
ojima_h
1
550
KubeCon + CloudNativeCon Japan 2025 Recap
donkomura
0
180
AI関数が早くなったので試してみよう
kumakura
0
180
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
110
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
250
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
120
Google Agentspaceを実際に導入した効果と今後の展望
mixi_engineers
PRO
3
340
「Roblox」の開発環境とその効率化 ~DAU9700万人超の巨大プラットフォームの開発 事始め~
keitatanji
0
110
2時間で300+テーブルをデータ基盤に連携するためのAI活用 / FukuokaDataEngineer
sansan_randd
0
130
Featured
See All Featured
Music & Morning Musume
bryan
46
6.7k
Building Adaptive Systems
keathley
43
2.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Building an army of robots
kneath
306
45k
Site-Speed That Sticks
csswizardry
10
750
Fireside Chat
paigeccino
38
3.6k
Thoughts on Productivity
jonyablonski
69
4.8k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Into the Great Unknown - MozCon
thekraken
40
2k
GitHub's CSS Performance
jonrohan
1031
460k
Transcript
社内ツールを Rustに書き換えてみた件 morifuji koudai
• 名前 • 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に紐づく作業時間の記録の仕組みづくり SlackBot GoogleAppScript GoogleSpreadSheet 作業時間 作業内容
解決策 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<Mutex<VecDeque<Task>>>)を作ってし まった Rustで実装してみた
Rustで実装してみた できたけど微妙なコード... →actixを使ったactorモデルはなんとなく理解できたが使い方で詰まった →諦めてオレオレキュー(Arc<Mutex<VecDeque<Task>>>)を作ってし まった (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の方がよい?