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.6k
社内ツールを 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
Claude in Chromeで始める自律的フロントエンド開発
diggymo
1
560
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
400
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
600
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
620
TypeScriptでモジュラーモノリスやってみた
diggymo
0
520
DynamoDBの"Replacement"時にデータが消されないようにCustom Resource Provider Frameworkでカスタムリソース作ってみた件
diggymo
1
1.1k
過去のインプットとアウトプットを振り返る
diggymo
0
340
Amazon BedrockとPR-Agentでコードレビュー自動化に挑戦・実際に運用してみた
diggymo
0
2.8k
個人開発でLIFFとMessagingAPIを使ってわかった5つのこと
diggymo
0
1.3k
Other Decks in Technology
See All in Technology
Ultra Ethernet (UEC) v1.0 仕様概説
markunet
3
230
自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics
codmoninc
3
1.2k
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
430
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
240
チームメンバー迷わないIaC設計
hayama17
5
4k
ビズリーチにおける検索・推薦の取り組み / DEIM2026
visional_engineering_and_design
1
120
A Gentle Introduction to Transformers
keio_smilab
PRO
2
960
情シスのための生成AI実践ガイド2026 / Generative AI Practical Guide for Business Technology 2026
glidenote
0
110
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
110
楽しく学ぼう!コミュニティ入門 AWSと人が つむいできたストーリー
hiroramos4
PRO
1
160
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
1
220
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
840
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
460
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
WCS-LA-2024
lcolladotor
0
470
Deep Space Network (abreviated)
tonyrice
0
86
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
200
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
150
The browser strikes back
jonoalderson
0
770
Visualization
eitanlees
150
17k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
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の方がよい?