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
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
280
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
310
TypeScriptでモジュラーモノリスやってみた
diggymo
0
350
DynamoDBの"Replacement"時にデータが消されないようにCustom Resource Provider Frameworkでカスタムリソース作ってみた件
diggymo
1
890
過去のインプットとアウトプットを振り返る
diggymo
0
260
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
2.4k
個人開発でLIFFとMessagingAPIを使ってわかった5つのこと
diggymo
0
1.1k
Reactのuse()って何なん?
diggymo
1
2.4k
Figmaを通したエンジニアとデザイナーの連携について
diggymo
0
7.6k
Other Decks in Technology
See All in Technology
roppongirb_20250911
igaiga
1
240
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
290
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
470
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
370
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
研究開発と製品開発、両利きのロボティクス
youtalk
1
530
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
2
260
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
290
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
380
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
BBQ
matthewcrist
89
9.8k
The Invisible Side of Design
smashingmag
301
51k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
GitHub's CSS Performance
jonrohan
1032
460k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Thoughts on Productivity
jonyablonski
70
4.8k
4 Signs Your Business is Dying
shpigford
184
22k
KATA
mclloyd
32
14k
The World Runs on Bad Software
bkeepers
PRO
70
11k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
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の方がよい?