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
グローバル変数は危ないって聞いたけど なんでReduxはいいの??
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nayuta24
September 30, 2024
0
430
グローバル変数は危ないって聞いたけど なんでReduxはいいの??
2024/9/19に開催された「kaonavi Tech Talk 〜若手エンジニア Face to Face LT会」で発表した内容です。
nayuta24
September 30, 2024
Tweet
Share
More Decks by nayuta24
See All by nayuta24
コードレビュアー「見習い」 になったぞ!!
nayuta24
0
210
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
Technical Leadership for Architectural Decision Making
baasie
2
250
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Navigating Team Friction
lara
192
16k
How to Ace a Technical Interview
jacobian
281
24k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
So, you think you're a good person
axbom
PRO
2
1.9k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
57
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
株式会社カオナビ 中村優太 グローバル変数は危ないって聞いたけど なんでReduxはいいの??
自己紹介 中村優太 名前: 株式会社カオナビ(23卒) 所属: フロントエンドエンジニア 職能: 音楽、あんこをつくること 好きなこと: @tanasokoo
X:
株式会社カオナビ 中村優太 グローバル変数は危ないって聞いたけど なんでReduxはいいの??
グローバル変数
• 関数の外で宣言した変数 → グローバル変数 • 関数の中で宣言した変数 → ローカル変数 ざっくりいうと
グローバル変数のメリット • どこからでもアクセスできる • 変数を何度も宣言する必要がない
なんかよく危ないって 言われている
特に規模の大きなアプリケーション で危なさが増す
規模が大きくなったときに起こる問題 • いつ、どこで変わるかが分からない • 変わったときに何が起こるのか分からない • 命名が衝突する • デバッグがやりづらくなる •
単体テストが書きづらくなる etc
「グローバル」って危ない💣
弊社の開発では 「Redux」を使用している
https://redux.js.org/introduction/getting-started
https://redux.js.org/introduction/getting-started
https://redux.js.org/introduction/getting-started 「global state」!? なんか危なそうなことやっとる💣
None
結論 1. 「行儀の悪い」グローバル変数 2. 「行儀の良い」グローバル変数 この世には2種類のグローバル変数がある
結論 1. 「行儀の悪い」グローバル変数 2. 「行儀の良い」グローバル変数 この世には2種類のグローバル変数がある ↑ Reduxは正しく使えば、こちらなのでOK!
「行儀が良い」とは
グローバル変数で起こりがちな問題 の対策をしている
規模が大きくなったときに起こる問題 • いつ、どこで変わるかが分からない • 変わったときに何が起こるのか分からない • 命名が衝突する • デバッグがやりづらくなる •
単体テストが書きづらくなる etc
規模が大きくなったときに起こる問題 • いつ、どこで変わるかが分からない • 変わったときに何が起こるのか分からない • 命名が衝突する • デバッグがやりづらくなる •
単体テストが書きづらくなる etc
グローバルスコープ ローカルスコープ
グローバルスコープ いつ、どこで 何が起こるか分かりやすい ローカルスコープ
グローバルスコープ ローカルスコープ
グローバルスコープ ローカルスコープ
グローバルスコープ ローカルスコープ
グローバルスコープ ローカルスコープ いつ、どこで何が 起きるか分かりにくい
⭕ いつ、何が起こるのかわかりづらいこと 本質的に悪いのは ❌ スコープが広いこと
いつ、何が起こるかが分かりやすければ グローバルでもOK
• 変数(State)が変わる場所を一箇所に集まっている • 変数(State)が変わったときに起こることが明確 Reduxはどうなっているか
https://redux.js.org/tutorials/essentials/part-1-overview-concepts グローバルに Stateを扱える
https://redux.js.org/tutorials/essentials/part-1-overview-concepts 変数の管理が一箇所なので わかりやすい!
https://redux.js.org/tutorials/essentials/part-1-overview-concepts 何が起こるかが一箇所 にまとまっているので わかりやすい!
https://redux.js.org/style-guide/
https://redux.js.org/style-guide/ Model Action as Events, Not Setters (ActionをSetterではなくEventとしてモデル化) 例:ユーザー名を入力するフォーム ❌「ユーザー名をセットする」みたいなSetter単位
→ userNameだけ値を更新する(状態の変化が追跡しにくい) ⭕「ユーザー名を更新する」みたいなEvent単位 → userNameだけでなく、touched(フォーム入力されたフラグ)も同時に更新され るはず(状態の変化が追跡しやすい)
https://redux.js.org/tutorials/essentials/part-1-overview-concepts 変数の定義が一箇所なので わかりやすい! 何が起こるかが一箇所 にまとまっているので わかりやすい!
✅ いつ、どこで変わるかが分かりやすい ✅ 変わったときに何が起こるのか分かりやすい ✅ 命名が衝突しない ✅ デバッグがやりやすい ✅ 単体テストが書きやすい
etc 「規模が大きくなったときに起こる問題」をクリア
None
この考え方自体は 実はいろんなところにある
その一例が「DB」
DB State less State less State less State less ←
グローバルState 状態管理の責務をDBに集めている
None
まとめ
株式会社カオナビ 中村優太 グローバル変数は危ないって聞いたけど なんでReduxはいいの??
結論 1. 「行儀の悪い」グローバル変数 2. 「行儀の良い」グローバル変数 この世には2種類のグローバル変数がある ↑ Reduxは正しく使えば、こちらなのでOK!
結論 1. 「行儀の悪い」グローバル変数 2. 「行儀の良い」グローバル変数 この世には2種類のグローバル変数がある ↑ Reduxは正しく使えば、こちらなのでOK!
株式会社カオナビ 中村優太 グローバル変数は危ないって聞いたけど なんでReduxはいいの??