Slide 1

Slide 1 text

Reactで見る!純粋関数で深ぼる副作用 in React Tokyo #7 2025.7.18

Slide 2

Slide 2 text

社内システムを改修したり、インフラを作ったり、APIを生やしたり...etc 趣味:トンチキ技術グッズを作ったり 河村 直樹(@iwonder118) 自己紹介

Slide 3

Slide 3 text

グッズ新作!:叫ぶGop….ビーバーくん 今日のデブサミで 活躍してもらいました 趣味

Slide 4

Slide 4 text

- 最近関数型をかじり始めた感じです - 関数型プログラミングを紹介したいわけではないです - 純粋関数と冪等性の違いは何?から生まれたスライドです - 自分が冪等性を何となくわかったと思ったことの共有です - ちょっと話が一貫しないかもしれないですが、ご容赦ください。 前置き ツヨイヒトコワイ.... 前置き

Slide 5

Slide 5 text

▶同じ入力に対して常に同じ結果を返す性質 ▶ある操作を 1回行っても複数回行っても、同じ結果になる性質 冪等性 参照透過性 話の入口

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

どちらも 「複数回実行しても同じ結果になる性質のこと」 を言っているのに何が違う?

Slide 8

Slide 8 text

純粋関数とは ※参照透過性として純粋性、純粋関数のことを純関数のこととして喋ってます (違いがよくわからんです.... ● 入力が同じなら、常に同じ出力になる関数。 ● 外部の状態を変更しない。 特徴 ● テストが簡単になる。 ● 挙動の予測がしやすい。 ● 結果として保守性が高まる。 メリット

Slide 9

Slide 9 text

純粋関数とは 参照:コンポーネントを純粋に保つ(https://ja.react.dev/learn/keeping-components-pure)

Slide 10

Slide 10 text

冪等性を持つ関数について 先にコードを見てみて差分を見てみる

Slide 11

Slide 11 text

冪等性を持つ関数について stateがいるため 純粋性がない!

Slide 12

Slide 12 text

冪等性を持つ関数とは 課金処理を何回も実行しても1回のみ実行してほしい! ● 入力が同じなら、常に同じ出力になる関数。 ● 外部の状態を変更しない。 特徴 ● 純粋関数のメリットは引き継がれる ● スナップショット/状態同期が安定 ● 副作用の最小化・明示化 メリット フォームの入力値に変更がない状態で保存しても同じ保存状態にしてほしい! イメージ

Slide 13

Slide 13 text

純粋関数との差分 純粋性 冪等性 純粋関数のコンポーネント ✅あり ✅あり 冪等性を持つコンポーネント ❌なし ✅あり それ以外 ? ? Stateを持つため毎回実行して同じ結果が出ること が担保されない

Slide 14

Slide 14 text

それ以外とは・・・?

Slide 15

Slide 15 text

関数の実行結果が引数だけでなく、関数の外部の状態にも依存する関数 それってつまり ....?

Slide 16

Slide 16 text

副作用とは • 出力が引数だけに依存していない • 外部に影響を及ぼす • 副作用は、純粋性を壊す。 特徴(広義の意味 ) ● 外部状態の変更・参照(useEffect云々周り) → グローバル変数、DOM操作、API通信など。 ● 状態管理 ● etc… 特徴(Reactでの意味)

Slide 17

Slide 17 text

純粋関数との差分 part2 純粋性 冪等性 副作用 純粋関数のコンポーネント ✅あり ✅あり ❌なし 冪等性を持つコンポーネント ❌なし ✅あり 🔼あったりなかったり 副作用を持つコンポーネント ❌なし ❌なし ✅あり 純粋性のメリットを持ちつつ、副作用が同居できる 冪等性を持ったコンポーネントを作っていくべきか?

Slide 18

Slide 18 text

否!!作るべきではない 冪等性はあくまで.... ある操作を何度実行しても、常に同じ結果になる性質のこと じゃあどうすれば....

Slide 19

Slide 19 text

t-wadaさんに聞いてみた サバンナ (Developers Summit 2025 Summer 7.18) に行って(サイン会をしてたので)聞いてみた

Slide 20

Slide 20 text

t-wadaさんに聞いてみた その他有象無象の関数たち Q:純粋性もない、冪等性も持たない、再現性もない、あれもないこれもないやつらはなん と呼べば? 基本的には純粋性の部分と副作用などを 持つロジックの部分は分けるべき ->ReactのUIとロジックの分離 ただしそうもいかない場面があり、 そういった関数がビジネスを支えている インペラティブ処理 (t-wadaさんワード ) ※imperative・・・ぜひともしなければならない、緊急の、必須で、肝要で、命令的な、断固とした、           威厳のある、厳然たる、命令法の サインを貰っている途中に聞いたので齟齬が あるかもしれないですが .....

Slide 21

Slide 21 text

副作用と共存、付き合っていくために 状態管理ライブラリを使う 副作用を切り出す ● 副作用の管理や冪等性の確保を外部化 ● コンポーネントの純粋関数性・参照透過性を維持 • コンポーネント内で状態を直接更新すると、表示ロジックと副作用が混ざる。 • 状態管理ライブラリは副作用を隔離するための外部ストレージになる。

Slide 22

Slide 22 text

Daishiさんありがとう! つまり.... 🎉Daishiさんありがとう🎉