Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
社内ツールを Rustに書き換えてみた件
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
morimorikochan
November 09, 2019
Technology
9.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
社内ツールを Rustに書き換えてみた件
Rust Kansai Meetup Osaka #0 にてLTで発表したスライドです
https://rust-kansai.connpass.com/event/152446/
morimorikochan
November 09, 2019
More Decks by morimorikochan
See All by morimorikochan
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
190
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
1.4k
Claude in Chromeで始める自律的フロントエンド開発
diggymo
1
1.2k
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
560
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
780
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
1.2k
TypeScriptでモジュラーモノリスやってみた
diggymo
0
750
DynamoDBの"Replacement"時にデータが消されないようにCustom Resource Provider Frameworkでカスタムリソース作ってみた件
diggymo
1
1.5k
過去のインプットとアウトプットを振り返る
diggymo
0
510
Other Decks in Technology
See All in Technology
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
270
[2026 Oracle Technical Deep Dive] エンタープライズAIエージェントを支えるOCIソリューション。ラインナップと特徴を理解しよう! (2026年9月17日開催)
oracle4engineer
PRO
0
210
並行性の問題を防げ!実践トランザクション入門
occhi
0
150
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
180
Account Factory for Terraformによる 標準化されたアカウント発行の自動化
pensuke628
0
120
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
670
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
340
プラットフォームを「作る」、 チームに「入り込む」
sansantech
PRO
0
490
企業の現実世界をグラフで写し取る
sansantech
PRO
0
240
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
190
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
180
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Odyssey Design
rkendrick25
PRO
2
850
Embracing the Ebb and Flow
colly
88
5.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
960
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
610
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Test your architecture with Archunit
thirion
2
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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の方がよい?