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
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
Search
OPTiM
April 26, 2024
Technology
600
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
既存プロダクトのRSpec カバレッジを 40% から100% にした話
optim
1
14
最近やってよかったデザインシステム運用改善3選
optim
1
23
<install>要素は何ができて、何を変えるのか
optim
1
19
CIでリグレッションテストを実行し継続的に品質を担保する
optim
1
20
Tanstack Startを触ってみての感動
optim
1
29
移行のつらさは誰が引き受けるのか── Vue.js と Next.js を比べて見えたこと
optim
2
22
Athenaが遅すぎるので Next.js 16の Cache Componentsで倒してみた
optim
1
79
エンジニア2年目から見た RubyKaigi
optim
1
73
Storeに頼りすぎないフロントエンド
optim
1
47
Other Decks in Technology
See All in Technology
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
230
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
400
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
160
SRE Next 2026 何でも屋からの脱却
bto
0
730
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
640
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.2k
世界、断片、モデル。そして理解
ardbeg1958
1
120
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
240
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
200
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
230
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
300
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.8k
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Product Roadmaps are Hard
iamctodd
55
12k
Paper Plane (Part 1)
katiecoart
PRO
0
9.6k
Believing is Seeing
oripsolob
1
170
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
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