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
Storeに頼りすぎないフロントエンド
Search
OPTiM
June 22, 2026
Programming
52
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Storeに頼りすぎないフロントエンド
2026/06/18 開催「TSKaigi 2026 しか型ん!」でのオプティム 上山の発表資料です。
https://optim.connpass.com/event/395349/
OPTiM
June 22, 2026
More Decks by OPTiM
See All by OPTiM
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
150
製品の問い合わせ負荷をLLMで解消したい 〜RAGで作る「自社を知っている」チャットボット〜
optim
0
34
AI エージェントシステムの開発を AI で加速させたい!
optim
0
38
既存プロダクトのRSpec カバレッジを 40% から100% にした話
optim
1
78
最近やってよかったデザインシステム運用改善3選
optim
1
270
<install>要素は何ができて、何を変えるのか
optim
1
230
CIでリグレッションテストを実行し継続的に品質を担保する
optim
1
260
Tanstack Startを触ってみての感動
optim
1
260
移行のつらさは誰が引き受けるのか── Vue.js と Next.js を比べて見えたこと
optim
2
260
Other Decks in Programming
See All in Programming
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
160
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
280
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.8k
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
2
180
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
490
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
130
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
480
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
2
1.1k
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
380
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
390
Music & Morning Musume
bryan
47
7.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
HDC tutorial
michielstock
2
820
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Designing for Performance
lara
611
70k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Transcript
© 2019-2026 OPTiM Corp. All rights reserved. Storeに頼りすぎないフロントエンド 株式会社オプティム 上山
最終更新日:2026/06/10
© 2019-2026 OPTiM Corp. All rights reserved. 2 自己紹介 上山
入社:2023年度新卒 所属:株式会社 オプティム ソリューション開発部 農業ビジネス開発 ユニット 出身:長野県 好き:UI/UX, フロントエンド, Vue.js
© 2019-2026 OPTiM Corp. All rights reserved. 3 会社概要 商号
株式会社オプティム 英語表記:OPTiM Corporation 東京証券取引所プライム市場:3694 所在地 OPTiM TOKYO (東京本社@浜松町) OPTiM SAGA (佐賀本店@佐賀大学キャンパス内) OPTiM KOBE (神戸オフィス@三ノ宮) TECH CENTER IIZUKA (テックセンター飯塚@九州工業大学飯塚キャンパス前) 代表 菅谷 俊二 (すがや しゅんじ) 設立 2000年6月8日 従業員数 444名(2026年4月1日現在) Saga Tokyo Kobe
© 2019-2026 OPTiM Corp. All rights reserved. 4 事業・提供サービス概要 私たちは、AI・IoT技術を社会の隅々に行き渡らせ、
日本のあらゆる産業を根底から変革する 「AXの中核を担う企業」を目指しています。 農業AX 農業AX 農業AX 医療AX 建設・土木AX オフィスAX オフィスAX コミュニケーションAX 情シスAX 医療AX プラットフォーム オフィスAX 情シスAX 情シスAX 情シスAX 情シスAX 情シスAX コミュニケーションAX コミュニケーションAX コミュニケーションAX コミュニケーションAX 情シスAX 情シスAX
© 2019-2026 OPTiM Corp. All rights reserved. 5 事業紹介:情シスAX 長
き に 渡 っ て M D M シ ェ ア N o. 1 の 実 績 と 信 頼 が あ り ま す 。 スマホやタブレットの ビジネスシーンにおける 幅広い課題を解決 MDMシェア15年連続No.1※1 各業界向けMDMなど、全20部門でシェアNo.1※2 18万社以上の企業様が OPTiM Bizをご利用中※3 これまでに700以上の機種を サポートしています※4 ※1 出典:デロイト トーマツ ミック経済研究所 「クラウドサービス市場の現状と展望 2013年度版 https://mic-r.co.jp/mr/00735/」IT資産管理(MDM含む)市場「合計売上高」2011年度~2012年度実績(2013年発刊)、 「コラボレーション/ コンテンツ・モバイル管理パッケージソフトの市場展望 2014年度版 https://mic-r.co.jp/mr/00850/」MDM市場動向「MDM出荷ID数(SaaS・ASP含む)」2013年度実績(2014年発刊)、 「コラボレーション/コンテンツ・モバイル管理パッ ケージソフトの市場展望 https://mic-r.co.jp/mr/01480/」MDM市場動向「MDM出荷ID数(SaaS・ASP含む)」2014年度~2017年度実績(2015~2018年発刊)、 「コラボレーション・モバイル管理ソフトの市場展望 https://mic- r.co.jp/mr/03230/」MDM市場「MDM出荷ID数(SaaS・ASP含む)」2018年度~2023年度実績および2024年度見込(2019年~2024年発刊)より。 ※2 デロイト トーマツ ミック経済研究所 2024年度発刊「コラボレーション・モバイル管理ソ フトの市場展望 2024年度版」(https://mic-r.co.jp/mr/03230/)の2023年度実績のうち、「OPTiM Biz」が1位の評価を得た部門の数をオプティムが集計 ※3 2019年6月25日、当社集計。 ※4 2022年7月、自社調べ。
© 2019-2026 OPTiM Corp. All rights reserved. 6 事業紹介: 医療AX
医療現場の文書作成を 生成AI活用で効率化
© 2019-2026 OPTiM Corp. All rights reserved. 8
© 2019-2026 OPTiM Corp. All rights reserved. 9
© 2019-2026 OPTiM Corp. All rights reserved. 10 Storeに頼りすぎないフロントエンド /
目次 実務で遭遇した問題 Storeが引き起こす問題 Storeの使い時の見極め
© 2019-2026 OPTiM Corp. All rights reserved. 12 実務で遭遇した問題
© 2019-2026 OPTiM Corp. All rights reserved. 13 実務で発生した問題 変更検知ができない
山田 太郎 基本情報タブ 住所情報タブ 氏名 090-1234-5678 電話 何かしらの情報を入力したいフォームがあります。 2つは別々のタブです。 編集 基本情報タブ 住所情報タブ 編集 10 面積 ha 東京都港区海岸… 住所
© 2019-2026 OPTiM Corp. All rights reserved. 14 実務で発生した問題 変更検知ができない
山田 太郎 基本情報タブ 住所情報タブ 氏名 090-1234-5678 電話 何かしらの情報を入力したいフォームがあります。 2つは別々のタブです。 それぞれのタブで編集モードに入りました。 保存 基本情報タブ 住所情報タブ 保存 10 面積 ha 東京都港区海岸… 住所 キャンセル キャンセル
© 2019-2026 OPTiM Corp. All rights reserved. 15 実務で発生した問題 変更検知ができない
山田 次郎 基本情報タブ 住所情報タブ 氏名 090-0000-0000 電話 何かしらの情報を入力したいフォームがあります。 2つは別々のタブです。 それぞれのタブで編集モードに入りました。 基本情報タブの方で修正を加えて… 保存 基本情報タブ 住所情報タブ 保存 10 面積 ha 東京都港区海岸… 住所 キャンセル キャンセル
© 2019-2026 OPTiM Corp. All rights reserved. 16 実務で発生した問題 変更検知ができない
山田 次郎 基本情報タブ 住所情報タブ 氏名 090-0000-0000 電話 何かしらの情報を入力したいフォームがあります。 2つは別々のタブです。 それぞれのタブで編集モードに入りました。 基本情報タブの方で修正を加えて… 住所情報はあっていたので、「キャンセル」で編集モードを抜けようとすると? 保存 基本情報タブ 住所情報タブ 保存 10 面積 ha 東京都港区海岸… 住所 キャンセル キャンセル
© 2019-2026 OPTiM Corp. All rights reserved. 17 実務で発生した問題 変更検知ができない
山田 次郎 基本情報タブ 住所情報タブ 氏名 090-0000-0000 電話 住所情報は全く編集していないのに、変更確認ダイアログが出てしまう(想定していない挙動) 基本情報タブ 住所情報タブ 保存 10 ha 東京都港区海岸… キャンセル キャンセル 保存 面積 住所 確認 変更された項目があります。 更新内容は破棄されますが、よろしいですか? OK キャンセル
© 2019-2026 OPTiM Corp. All rights reserved. 18 実務で発生した問題 なぜ起きたのか?
山田 次郎 基本情報タブ 住所情報タブ 氏名 090-0000-0000 電話 保存 基本情報タブ 住所情報タブ 保存 10 面積 ha 東京都港区海岸… 住所 キャンセル キャンセル Store { "name": "山田 次郎", "tell": "090-0000-0000", "areaValue": "10", "address": "東京都港区海岸…“, …… } 2つのタブは共通の1つのStoreを見て いて、その中に一つの大きな Objectとして、それぞれの情報が 保存されていた。
© 2019-2026 OPTiM Corp. All rights reserved. 19 Storeが引き起こす問題
© 2019-2026 OPTiM Corp. All rights reserved. 20 Storeが引き起こす問題 ゾンビデータ化
前のページで表示されていた情報が 次のページでも表示され続けるバグ が起きる データの流れが追えなくなる データフローが不透明になり、 どのコードが、どこで状態を 変更したのかが分からなくなる 肥大化 汎用コンポーネントのつもりなのに、Storeに依存 しているせいで仕方なくStoreを拡張していかなく てはならなくなる 情報を1つの Store に集約 機能追加で Store を拡張 コンポーネントが Store へ密結合 さらに Store を 増築する
© 2019-2026 OPTiM Corp. All rights reserved. 21 Storeが引き起こす問題 なぜこのような実装が生まれるのか?
入力中の 1次データ Store
© 2019-2026 OPTiM Corp. All rights reserved. 22 Storeが引き起こす問題 なぜこのような実装が生まれるのか?
入力中の 1次データ Store Store は元から責務を詰め込まれやすい そういう仕組みになっている
© 2019-2026 OPTiM Corp. All rights reserved. 23 Storeが引き起こす問題 でも、Storeは便利
使わないとどうしようもないことはたくさんある
© 2019-2026 OPTiM Corp. All rights reserved. 24 Storeの使い時の見極め
© 2019-2026 OPTiM Corp. All rights reserved. 25 Storeの使い時の見極め 親コンポーネントで取りまとめれば解決できる?
Parent.vue Child1.vue Child2.vue Child3.vue 例えば、色のついているコンポーネントで共通の情 報が必要な場合…
© 2019-2026 OPTiM Corp. All rights reserved. 26 Storeの使い時の見極め 親コンポーネントで取りまとめれば解決できる?
Parent.vue Child1.vue Child2.vue Child3.vue 例えば、色のついているコンポーネントで共通の情 報が必要な場合… 親コンポーネント側で取りまとめることで、 Storeを使用せずに、データの共有をすることがで きる。 Store
© 2019-2026 OPTiM Corp. All rights reserved. 27 Storeの使い時の見極め 親コンポーネントで取りまとめれば解決できる?
Parent.vue Child1.vue Child2.vue Child3.vue 例えば、色のついているコンポーネントで共通の情 報が必要な場合… 親コンポーネント側で取りまとめることで、 Storeを使用せずに、データの共有をすることがで きる。 さらに、TypeScriptの型で各コンポーネントに 渡すデータの型を絞り込んであげることで、 より安全にデータの受け渡しができ、読みやすくな る! Store Child1型 Child3型 こっちは Child3型! Child1型で 頂戴!
© 2019-2026 OPTiM Corp. All rights reserved. 28 Storeの使い時の見極め 先程の実務の例で言うと…
基本情報タブ 住所情報タブ 基本情報タブ 住所情報タブ "AddressInfo" : { "areaValue": "10", "address": "東京都港区海岸…“, } "BasicInfo“: { "name": "山田 次郎", "tell": "090-0000-0000", } { "BasicInfo“: { "name": "山田 次郎", "tell": "090-0000-0000", }, "AddressInfo" : { "areaValue": "10", "address": "東京都港区海岸…“, …… } Child1.vue Child2.vue Parent.vue
© 2019-2026 OPTiM Corp. All rights reserved. 29 Storeの使い時の見極め 親コンポーネントで取りまとめれば解決できる?
Parent1.vue Child1.vue Child2.vue Child3.vue Parent2.vue 逆に、このようなに親コンポーネントが分か れていたり、別ページに分かれているパター ンでは、Storeをせざるを得ない Store
© 2019-2026 OPTiM Corp. All rights reserved. 30 Storeの使い時の見極め 親コンポーネントで取りまとめれば解決できる?
Parent.vue Child1.vue Child2.vue Child3.vue Store Parent1.vue Child1.vue Child2.vue Child3.vue Parent2.vue Store Storeの使用を避けられるパターン Storeの使用が避けられないパターン >
© 2019-2026 OPTiM Corp. All rights reserved. 31 アプリ全体で共有したい情報なのか? アプリ起動中、ずっと生存し続けていてほしい情報なのか?
Store 以外の解決策はないのか? Storeの用途として、適切なのだろうか? ◼TSの型設計をすることで、判断の一助とする Storeの使い時の見極め とりあえずでStoreを使用する前に考えてみる
© 2019-2026 OPTiM Corp. All rights reserved. 32 まとめ 必要なところだけ、小さく使う
避けたい辛さ • ゾンビデータ化 • 肥大化 • 追跡のしづらさ を早めに防ぎたい 使う条件 Store は • 全体共有 • 長寿命 でなければいけない情報に絞る 先に考えること 本当に Store が最適解なのかを 一度立ち止まって考える 明確に型を分離する • データフローを型で縛る • 型を設計することでStoreを使うかどうかの判断軸に なる • コードを見る側も型でどう使うか判断しやすい
© 2019-2026 OPTiM Corp. All rights reserved.