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
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
Search
OPTiM
April 26, 2024
Technology
620
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
OPTiM
April 26, 2024
More Decks by OPTiM
See All by OPTiM
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
590
製品の問い合わせ負荷をLLMで解消したい 〜RAGで作る「自社を知っている」チャットボット〜
optim
0
40
AI エージェントシステムの開発を AI で加速させたい!
optim
0
43
既存プロダクトのRSpec カバレッジを 40% から100% にした話
optim
1
120
最近やってよかったデザインシステム運用改善3選
optim
1
380
<install>要素は何ができて、何を変えるのか
optim
1
330
CIでリグレッションテストを実行し継続的に品質を担保する
optim
1
360
Tanstack Startを触ってみての感動
optim
1
350
移行のつらさは誰が引き受けるのか── Vue.js と Next.js を比べて見えたこと
optim
2
350
Other Decks in Technology
See All in Technology
品質と信頼性を地続きにする
grimoh
2
940
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
700
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.9k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
210
AI coding 整合正規方法
philipz
0
500
Railsのように考える: See through the Master
snoozer05
PRO
5
1.3k
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
160
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
530
絵ではじめるKubernetesセキュリティ
aoi1
4
700
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
340
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
700
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Everyday Curiosity
cassininazir
0
320
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
260
Transcript
© 2019-2024 OPTiM Corp. All rights reserved. 1 株式会社オプティム 西村
v-Tokyo Meetup #19 2024.03.06 Vue.jsを用いて数万の農地データ情報を 数秒で表示させるまでのカイゼンの軌跡
© 2019-2024 OPTiM Corp. All rights reserved. 2 自己紹介します!
© 2019-2024 OPTiM Corp. All rights reserved. 3 西村 ソリューション開発部
農業チーム ・趣味: お菓子作り、クラフトビール 2021年入社 自己紹介 ・現在の業務:農業プロダクトのフロントエンド、バックエンドの開発を担当 現場視察 & 作業もします ・・・
© 2019-2024 OPTiM Corp. All rights reserved. 4 会社・事業紹介
カイゼンの軌跡 最後に 今日の目次
© 2019-2024 OPTiM Corp. All rights reserved. 5 会社・事業紹介
© 2019-2024 OPTiM Corp. All rights reserved. 6 アグリテック アグリテック
アグリテック デジタルヘルス デジタルコンストラクション デジタルヘルス その他 その他 その他 オフィスDX モバイルマネジメント マーケティングDX マーケティングDX 映像管理DX オフィスDX その他 プラットフォーム プラットフォーム オフィスDX OPTiMは、AI・IoT・Cloud・Mobile・Roboticsを使った 新しい価値を創造し続け、あらゆる産業のDXを推進し、 あらゆる人々に、豊かでサステナブルな未来を実現する企業です プラットフォーム
© 2019-2024 OPTiM Corp. All rights reserved. 7 • 農薬散布のデジタル化サービスを支える
アプリケーションを開発している (Vue3移行済み) • 農薬散布を効率よく進めるための機能が盛りだくさん! • 農地データのデジタル化 • 農薬散布の計画を自動作成 • 適期計算機能 etc 事業紹介(農業DX)
© 2019-2024 OPTiM Corp. All rights reserved. 8 カイゼンの軌跡
© 2019-2024 OPTiM Corp. All rights reserved. 9 本サービスにデジタルな農地データ(ポリゴンデータ)は欠かせない そのデータはGoogle
Maps API を活用し、表示している スライドでは国土地理院の地理院地図 を使用 この枠のことを ポリゴンと呼びます
© 2019-2024 OPTiM Corp. All rights reserved. 10
© 2019-2024 OPTiM Corp. All rights reserved. 11 2022年開発初期 約100
~ 300 ポリゴン/アカウント 2022年 約1000 ~ 5000 ポリゴン 2023年 約5000 ~ 10000 ポリゴン 2024年 ~ 数万 ポリゴン 本サービスの成長とともに扱うポリゴンデータ数も増えていった 扱うポリゴンデータの数
© 2019-2024 OPTiM Corp. All rights reserved. 12 本サービスの成長とともに扱うポリゴンデータ数も増えていった 扱うデータ数が増えるほど、
パフォーマンスが悪くなっていく アプリのパフォーマンスの低下 扱うポリゴンデータの数 2022年開発初期 約100 ~ 300 ポリゴン/アカウント 2022年 約1000 ~ 5000 ポリゴン 2023年 約5000 ~ 10000 ポリゴン 2024年 ~ 数万 ポリゴン
© 2019-2024 OPTiM Corp. All rights reserved. 13 どげんかせんといかん!
© 2019-2024 OPTiM Corp. All rights reserved. 14 カイゼンに着手!
© 2019-2024 OPTiM Corp. All rights reserved. 15 大きく2つのカイゼンに着手 操作性のカイゼン
表示速度のカイゼン
© 2019-2024 OPTiM Corp. All rights reserved. 16 操作性のカイゼン
© 2019-2024 OPTiM Corp. All rights reserved. 17 何をしたか?
© 2019-2024 OPTiM Corp. All rights reserved. 18 状態管理ライブラリPinia を活用する
© 2019-2024 OPTiM Corp. All rights reserved. 19 状態管理ライブラリPinia を活用する
カイゼン前 1. API で座標込みのポリゴンデータを取得 2. ポリゴンを全て生成&描画 1 2 ポリゴンデータ ポリゴンデータ ポリゴンデータ Google Map
© 2019-2024 OPTiM Corp. All rights reserved. 20 状態管理ライブラリPinia を活用する
カイゼン後 1. API で座標込みのポリゴンデータを取得 2. ポリゴンを全て生成&描画 1. API で座標込みのポリゴンデータを取得 2. ポリゴンを全て生成 して Pinia に保持 3. マップの表示領域・ズーム倍率に応じて Pinia から必要分を取得 & 描画 1 2 1 3 2 ポリゴンデータ ポリゴンデータ ポリゴンデータ ポリゴンデータ ポリゴンデータ ポリゴンデータ カイゼン前 Google Map Google Map
© 2019-2024 OPTiM Corp. All rights reserved. 21 状態管理ライブラリPinia を活用する
カイゼン後 1. API で座標込みのポリゴンデータを取得 2. ポリゴンを全て生成 して Pinia に保持 3. マップの表示領域・ズーム倍率に応じて Pinia から必要分を取得 & 描画 1 3 2 表示領域・ズーム倍率に応じて必要な情報を 取得し、描画することで余分な描画が減り、 操作性がカイゼンされた Piniaの活用により、画面跨いだ時の 再取得も不要になった 不要なwatchを除くことができた ポリゴンデータ ポリゴンデータ ポリゴンデータ Google Map
© 2019-2024 OPTiM Corp. All rights reserved. 22 表示速度のカイゼン
© 2019-2024 OPTiM Corp. All rights reserved. 23 “推測するな、計測せよ” ロバート(ロブ)・C・パイク
© 2019-2024 OPTiM Corp. All rights reserved. 24 大まかなパフォーマンス計測の結果 (数万個のポリゴンデータ)
Frontend Backend 約3.5 ~ 4.1秒 約 13 ~ 16.5秒 約17.5秒 ~ 20秒 表示不可 (Chromeが落ちる、nginxのタイムアウト…)
© 2019-2024 OPTiM Corp. All rights reserved. 25 大まかなパフォーマンス計測の結果 (約6000個のポリゴンデータ)
Frontend Backend 約3.5 ~ 4.1秒 約 13 ~ 16.5秒 約17.5秒 ~ 20秒
© 2019-2024 OPTiM Corp. All rights reserved. 26 一番時間がかかっているのはフロントエンド側だった Frontend
Backend 約3.5 ~ 4.1秒 約 13 ~ 16.5秒 約17.5秒 ~ 20秒
© 2019-2024 OPTiM Corp. All rights reserved. 27 カイゼン前の状況整理
ポリゴンデータが多い場合、ズーム倍率が低い状態で 確認する(左図) ポリゴンデータのすべての情報って不要ではないか? 取得するデータ量やデータ構造を見直す type OldPolygonInfoState = { id: string; landNumber: string; // 住所 centerCoordinate: Coordinate; // 中心座標 polygon: google.maps.Polygon; // ポリゴン isSelect: boolean; // 選択状態 }; ポリゴンの数を クラスターで表示している (ポリゴンの中心座標でカウント)
© 2019-2024 OPTiM Corp. All rights reserved. 28 カイゼン前の状況整理
ポリゴンデータが多い場合、ズーム倍率が低い状態で 確認する(左図) ポリゴンデータのすべての情報って不要ではないか? 取得するデータ量やデータ構造を見直す type OldPolygonInfoState = { id: string; landNumber: string; // 住所 centerCoordinate: Coordinate; // 中心座標 polygon: google.maps.Polygon; // ポリゴン isSelect: boolean; // 選択状態 }; ポリゴンデータは容量が多く、生成にも時間がかかる ポリゴンデータは初回表示時は必要ない
© 2019-2024 OPTiM Corp. All rights reserved. 29 データの内容からPiniaの使い方をカイゼン カイゼン前
1. API で4点以上の座標込みのポリゴンデータを取得 2. ポリゴンを全て生成 して Pinia に保持 3. マップの表示領域・ズーム倍率に応じて Pinia から必要分を取得 & 描画 カイゼン後 1. API で中心座標(1点)のみのデータを取得 ポリゴン座標は取得しない 2. ポリゴンを生成 ぜずに Pinia に保持 type OldPolygonInfoState = { id: string; landNumber: string; // 住所 centerCoordinate: Coordinate; // 中心座標 polygon: google.maps.Polygon; // ポリゴン isSelect: boolean; // 選択状態 }; type NewPolygonInfoState = { id: string; landNumber: string; // 住所 centerCoordinate: Coordinate; // 中心座標 polygon: google.maps.Polygon | null; // 初回はnull isSelect: boolean; };
© 2019-2024 OPTiM Corp. All rights reserved. 30 データの内容からPiniaの使い方をカイゼン カイゼン前
カイゼン後 1. API で中心座標のみのポリゴンデータを取得 2. ポリゴンは生成せず Pinia に保持 3. マップの表示領域・ズーム倍率に応じてAPI で座標 込みで取得し、Pinia 保持 4. 必要分を取得 & 描画 ポリゴンデータ ポリゴンデータ ポリゴンデータ 1 3 2 1 4 2 3 ポリゴンデータ ポリゴンデータ ポリゴンデータ 1. API で4点以上の座標込みのポリゴンデータを取得 2. ポリゴンを全て生成 して Pinia に保持 3. マップの表示領域・ズーム倍率に応じて Pinia から必要分を取得 & 描画 Google Map Google Map
© 2019-2024 OPTiM Corp. All rights reserved. 31 データの内容からPiniaの使い方をカイゼン カイゼン後
1. API で中心座標のみのポリゴンデータを取得 2. ポリゴンは生成せず Pinia に保持 3. マップの表示領域・ズーム倍率に応じてAPI で座標 込みで取得し、Pinia 保持 4. 必要分を取得 & 描画 1 4 2 3 取得するデータの容量を1/3に削減! computedやwatch でのポリゴンを生成をして いたため、ポリゴンの追加・更新などの 変更があるとポリゴン全てを再生成してた →それが不要になった ポリゴンデータ ポリゴンデータ ポリゴンデータ Google Map
© 2019-2024 OPTiM Corp. All rights reserved. 32 泥臭く、計測しながら、カイゼンを進めることができた Frontend
Backend 約 13 ~ 16.5秒 約3.5 ~ 4.1秒 Frontend Backend 約 0.4 ~ 0.5 秒 約 0.5~ 1.0秒 約1.0秒 ~ 1.55秒 約 17.5秒 ~ 20.0秒 1/20のカイゼン 開発当初 (6000件のポリゴンデータ) 現在 (6000件のポリゴンデータ)
© 2019-2024 OPTiM Corp. All rights reserved. 33 泥臭く、計測しながら、カイゼンを進めることができた Frontend
Backend 約 13 ~ 16.5秒 約3.5 ~ 4.1秒 Frontend Backend 約 2.0 ~ 3.0秒 約4.0~ 4.6秒 約5.5秒 ~ 7.1秒 約 20.0 ~ 25.6秒 開発当初 (数万件のポリゴンデータ) 現在 (数万件のポリゴンデータ) 表示不可
© 2019-2024 OPTiM Corp. All rights reserved. 34 最後に
© 2019-2024 OPTiM Corp. All rights reserved. 35 本文(図解用) オプティム
採用 We Are Hiring!! ネットを空気に変える
© 2019-2024 OPTiM Corp. All rights reserved. 36