なぜReactで安易に「useMemo / useCallback」を乱用してはいけないのか?: 依存配列比較の逆転コストとコード崩壊の罠、そして「コンポーネント合成」による本質的レンダー最適化
「とりあえず関数はuseCallbackで囲んでおけば安心」「重くなりそうだからuseMemoをつけておこう」——現場のプルリクエストで日常茶飯事のように交わされるこのアドバイスが、実はReactアプリケーションのパフォーマンスを逆に悪化させ、コードの可読性を致命的に破壊している。メモ化は無料の銀の弾丸ではない。依存配列の浅い比較コスト、前回の参照を保持し続けるメモリプレッシャー、そして何より「子コンポーネントがReact.memo化されていないのに親でuseCallbackを乱発する」という完全な無駄死に。なぜあなたの書いたメモ化は1ミリも効いていないのか? 依存配列地獄が生むステールクロージャの恐怖と、メモ化を1行も書かずに再レンダリングを遮断する「コンポーネント合成(Stateリフトダウン・children渡し)」の極意を解説します。