Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
グローバル変数は危ないって聞いたけど なんでReduxはいいの??
Search
nayuta24
September 30, 2024
0
410
グローバル変数は危ないって聞いたけど なんで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
200
Featured
See All Featured
Faster Mobile Websites
deanohume
310
31k
Thoughts on Productivity
jonyablonski
73
5k
Optimizing for Happiness
mojombo
379
70k
Documentation Writing (for coders)
carmenintech
76
5.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Agile that works and the tools we love
rasmusluckow
331
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Building Applications with DynamoDB
mza
96
6.8k
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はいいの??