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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
310
実装だけじゃない! 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
770
DynamoDBの"Replacement"時にデータが消されないようにCustom Resource Provider Frameworkでカスタムリソース作ってみた件
diggymo
1
1.5k
過去のインプットとアウトプットを振り返る
diggymo
0
520
Other Decks in Technology
See All in Technology
Claude Code本は、どのように執筆チームで書かれたか
oikon48
0
290
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
17
120k
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
1
130
Incremental HTTP
kazuho
5
2.1k
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
450
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
220
しろおびから始める!ログ活用の第一歩
shumei_ito
0
440
IoTデバイスを繋げるプロトコルMatterをAndroidで使用する方法
harutiro
0
120
自主式軟體工廠
philipz
0
240
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
160
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
140
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Exploring anti-patterns in Rails
aemeredith
4
520
Into the Great Unknown - MozCon
thekraken
41
2.8k
Utilizing Notion as your number one productivity tool
mfonobong
4
610
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
350
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
300
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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の方がよい?