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
The state patternの実践 個人開発で培ったpractice集
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
miyanokomiya
August 20, 2025
Programming
230
0
Share
The state patternの実践 個人開発で培ったpractice集
For: すごくすごい。フロントエンドミートアップ 〜複雑GUI・アーキテクチャ設計を語ろう〜
https://formx.connpass.com/event/364158/
miyanokomiya
August 20, 2025
More Decks by miyanokomiya
See All by miyanokomiya
RealtimeDBルールでの頑張り
miyanokomiya
1
380
Other Decks in Programming
See All in Programming
The Less-Told Story of Socket Timeouts
coe401_
3
940
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
650
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.1k
tRPCの概要と少しだけパフォーマンス
misoton665
2
260
Road to RubyKaigi: Play Hard(ware)
makicamel
1
530
AIを導入する前にやるべきこと
negima
2
320
My daily life on Ruby
a_matsuda
2
170
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
120
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
2
420
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
490
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
110
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
640
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
190
Designing for Performance
lara
611
70k
Deep Space Network (abreviated)
tonyrice
0
130
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
900
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
110
A Modern Web Designer's Workflow
chriscoyier
698
190k
Making Projects Easy
brettharned
120
6.6k
Everyday Curiosity
cassininazir
0
200
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
190
Abbi's Birthday
coloredviolet
2
7.4k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Transcript
The state patternの実践 個人開発で培ったpractice集
Intro 1. The state patternとは? 2. Practice 1: State分割中心設計 3.
Practice 2: 共通化 < 並行化 4. Practice 3: 同期的なstate遷移 @robokomy 右みたいなのが年々増えてます Agenda
The state patternとは?
The state patternとは? Refs: https://gameprogrammingpatterns.com/state.html https://refactoring.guru/ja/design-patterns/state The state patternとは? •
デザインパターンの1つ(≠フロントエンド文脈の一般的なstate) • ゲーム開発における定番手法 State · Design Patterns Revisited このLTを届けたい人たち • ユーザー操作が複雑なGUIを実装したことがある人 • 最初は順調だったそのコードが複雑になりすぎて何も分からなくなった人 • 作図・お絵かき的なツールを育てていきたい人
Practice 1: State分割中心設計
Practice 1: State分割中心設計 • 例: ラインを描画する一連の操作 • 制御用の状態は増え続ける • 操作の数だけ状態は積み上がる
• 状態の遷移に基づく分割統治 • 各stateは独立した存在 効果: 処理と状態のスコープが小さくなり見通しが良くなる 複雑GUIを破綻させずにスケールアップするための強力なデザイン
Practice 2: 共通化 < 並行化
Practice 2: 共通化 < 並行化 • 似たstateをコピペ量産することを恐れない ◦ 各stateは独立しているのでシステムの複雑度は高々その state分増えるだけ
◦ そのstateを更新しない限り新たな複雑さはもたらさず、更新したとしても高々その state分 の複雑さに留まる ◦ バグ対応などで修正箇所が多い分の手間は増えるが手間は安い。型補助もあるし AIもあ る • コピペ量産の果てに共通化あり ◦ 早すぎた不適切な共通化はシステムの複雑度を一気に増やす(関連 state数で乗算) ◦ 共通化された部分に手を加える度に新たな複雑さは関連 state数で乗算される ◦ コピペコードの共通化は手間だが AIの得意分野 • Class断固拒否(諸説あり) ◦ Classあるところに継承あり ◦ 継承してちょちょいとフラグと分岐を追加しての最小コードで済ませる誘惑に人類は打ち勝 てない 効果: システムの複雑度が眼前のコード量以上に増えない State更新時の複雑度イメージ
Practice 3: 同期的なstate遷移
Practice 3: 同期的なstate遷移 • ユーザーイベントをハンドリングした結果と して次のstateをreturnする設計 • 同期的な遷移に作り変え ◦ 同期な世界で完結するシンプルコード
◦ 隙間が発生しないスムーズな state遷移とライフサイクル • 非同期なstate遷移は脱出ハッチ的な後付実現可能 • 柔軟さ考慮で最初は非同期を採用したが様々な問題に遭遇 ◦ コードが冗長(影響小) ◦ ユーザーイベントがPromise解決の隙間に落ちて stateのライフサ イクルを逸脱した動作を引き起こす(影響大) • 非同期なstate遷移が必要な場面に全く遭遇せず無活躍 効果: 全体の98%を占める同期的state遷移が非常にシンプルになる
Thanks!