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
Reactで見る!純粋関数で深ぼる副作用
Search
iWonder118
July 18, 2025
0
510
Reactで見る!純粋関数で深ぼる副作用
iWonder118
July 18, 2025
Tweet
Share
More Decks by iWonder118
See All by iWonder118
我々はなぜ中間表現を作るのか
iwonder118
0
670
OODAループを回すVibe_Coding.pdf
iwonder118
0
11
花開くWebAssembly(Wasm)の可能性 in 2025/06/21 まさるの勉強会
iwonder118
0
6
SSG___CSRで乗り切るiframe内ルーティング_AIコーディング拡張版_in_Funabashi.dev.pdf
iwonder118
0
39
SSG + CSRで乗り切るiframe内ルーティング in React Tokyo LT 2025_05_17
iwonder118
0
4
React ToDoアプリをClineで作りながら考える フロントエンドエンジニアは AIによってなくなるのか?
iwonder118
1
1.1k
手軽に始めるDuckDB
iwonder118
0
31
開発においての気配り
iwonder118
1
17
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building Applications with DynamoDB
mza
96
6.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
The Language of Interfaces
destraynor
162
25k
GraphQLとの向き合い方2022年版
quramy
49
14k
Code Reviewing Like a Champion
maltzj
526
40k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Transcript
Reactで見る!純粋関数で深ぼる副作用 in React Tokyo #7 2025.7.18
社内システムを改修したり、インフラを作ったり、APIを生やしたり...etc 趣味:トンチキ技術グッズを作ったり 河村 直樹(@iwonder118) 自己紹介
グッズ新作!:叫ぶGop….ビーバーくん 今日のデブサミで 活躍してもらいました 趣味
- 最近関数型をかじり始めた感じです - 関数型プログラミングを紹介したいわけではないです - 純粋関数と冪等性の違いは何?から生まれたスライドです - 自分が冪等性を何となくわかったと思ったことの共有です - ちょっと話が一貫しないかもしれないですが、ご容赦ください。
前置き ツヨイヒトコワイ.... 前置き
▶同じ入力に対して常に同じ結果を返す性質 ▶ある操作を 1回行っても複数回行っても、同じ結果になる性質 冪等性 参照透過性 話の入口
None
どちらも 「複数回実行しても同じ結果になる性質のこと」 を言っているのに何が違う?
純粋関数とは ※参照透過性として純粋性、純粋関数のことを純関数のこととして喋ってます (違いがよくわからんです.... • 入力が同じなら、常に同じ出力になる関数。 • 外部の状態を変更しない。 特徴 • テストが簡単になる。
• 挙動の予測がしやすい。 • 結果として保守性が高まる。 メリット
純粋関数とは 参照:コンポーネントを純粋に保つ(https://ja.react.dev/learn/keeping-components-pure)
冪等性を持つ関数について 先にコードを見てみて差分を見てみる
冪等性を持つ関数について stateがいるため 純粋性がない!
冪等性を持つ関数とは 課金処理を何回も実行しても1回のみ実行してほしい! • 入力が同じなら、常に同じ出力になる関数。 • 外部の状態を変更しない。 特徴 • 純粋関数のメリットは引き継がれる •
スナップショット/状態同期が安定 • 副作用の最小化・明示化 メリット フォームの入力値に変更がない状態で保存しても同じ保存状態にしてほしい! イメージ
純粋関数との差分 純粋性 冪等性 純粋関数のコンポーネント ✅あり ✅あり 冪等性を持つコンポーネント ❌なし ✅あり それ以外
? ? Stateを持つため毎回実行して同じ結果が出ること が担保されない
それ以外とは・・・?
関数の実行結果が引数だけでなく、関数の外部の状態にも依存する関数 それってつまり ....?
副作用とは • 出力が引数だけに依存していない • 外部に影響を及ぼす • 副作用は、純粋性を壊す。 特徴(広義の意味 ) •
外部状態の変更・参照(useEffect云々周り) → グローバル変数、DOM操作、API通信など。 • 状態管理 • etc… 特徴(Reactでの意味)
純粋関数との差分 part2 純粋性 冪等性 副作用 純粋関数のコンポーネント ✅あり ✅あり ❌なし 冪等性を持つコンポーネント
❌なし ✅あり 🔼あったりなかったり 副作用を持つコンポーネント ❌なし ❌なし ✅あり 純粋性のメリットを持ちつつ、副作用が同居できる 冪等性を持ったコンポーネントを作っていくべきか?
否!!作るべきではない 冪等性はあくまで.... ある操作を何度実行しても、常に同じ結果になる性質のこと じゃあどうすれば....
t-wadaさんに聞いてみた サバンナ (Developers Summit 2025 Summer 7.18) に行って(サイン会をしてたので)聞いてみた
t-wadaさんに聞いてみた その他有象無象の関数たち Q:純粋性もない、冪等性も持たない、再現性もない、あれもないこれもないやつらはなん と呼べば? 基本的には純粋性の部分と副作用などを 持つロジックの部分は分けるべき ->ReactのUIとロジックの分離 ただしそうもいかない場面があり、 そういった関数がビジネスを支えている インペラティブ処理
(t-wadaさんワード ) ※imperative・・・ぜひともしなければならない、緊急の、必須で、肝要で、命令的な、断固とした、 威厳のある、厳然たる、命令法の サインを貰っている途中に聞いたので齟齬が あるかもしれないですが .....
副作用と共存、付き合っていくために 状態管理ライブラリを使う 副作用を切り出す • 副作用の管理や冪等性の確保を外部化 • コンポーネントの純粋関数性・参照透過性を維持 • コンポーネント内で状態を直接更新すると、表示ロジックと副作用が混ざる。 •
状態管理ライブラリは副作用を隔離するための外部ストレージになる。
Daishiさんありがとう! つまり.... 🎉Daishiさんありがとう🎉