すべての記事

フロントエンドPMのための状態管理ベストプラクティス

フロントエンドPMのための状態管理ベストプラクティス
フロントエンドPMシリーズ 第3回 / 全5回

フロントエンドPMのための状態管理ベストプラクティス

グローバルにする判断基準と、事故るサイン

フロントエンド開発で、PMが一番やらかしやすい判断がある。

この状態、グローバルに持ちますか?

ここで曖昧なまま進むと、後から必ず壊れる。

この記事では、

  • Reduxが良い
  • Zustandが良い
  • Contextはダメ

みたいな話はしない。

代わりに、PMとして「いつグローバルにしていいか」「いつ止めるべきか」
その判断基準だけを整理する。


そもそも「状態管理」で壊れる理由

状態管理が難しい理由は単純だ。

状態は、増えた瞬間に"影響範囲"を持つ。

影響範囲の伝播

1画面の話だと思っていた

1機能だけのつもりだった

それがいつの間にか、

  • 他画面
  • 他機能
  • 他チーム

に伝播する。

問題は技術ではない。
PMが「影響範囲」を見ないまま判断していることだ。


PM向けに定義する「状態」の種類

まず整理する。
PMは、この3種類を区別しないと判断できない。

PM判断: ローカルで持ってOK

① 表示のためだけの状態

(UI State)

例:

  • ローディング中
  • モーダルの開閉
  • 入力途中

特徴

  • 表示にしか使わない
  • 消えても問題ない
  • APIと関係ない
むしろグローバルにしない
PM判断: 二重管理しない

② データ由来の状態

(Server State)

例:

  • APIから取得した一覧
  • 詳細データ
  • 更新結果

特徴

  • 正はバックエンド
  • 再取得できる
  • 同期ズレが最大リスク
フロントで"正"を作らない
PM判断: フロントに持たせない

③ 業務を左右する状態

(Business State)

例:

  • ステータス
  • 権限
  • 確定フラグ

特徴

  • 取り消せない
  • 業務判断に直結
  • 間違うと事故る
表示するだけ

グローバルにしていい条件【PM判断軸】

ここが一番大事。

グローバルにしていい状態の条件

次の3つをすべて満たす場合のみ。

  • 複数の画面・機能で使う
  • 更新タイミングが明確
  • 影響範囲を説明できる
「便利そうだから」は理由にならない。

グローバルにしてはいけないサイン

現場でよくある地雷。

  • とりあえず共有したい
  • Contextで渡すのが面倒
  • あとで整理する予定

これが出た瞬間、PMは止めるべき。

「後で整理する状態は、必ず整理されない」

PMがレビューで必ず聞くべき質問

コードを読まなくていい。
この質問だけでいい。

  1. この状態は、どこで生まれる?
  2. それが変わったら、どこが再描画される?
  3. 仕様が変わったら、どこを直す?

ここで即答できない設計は、グローバルにしてはいけない。


よくある失敗パターン(PM視点)

失敗①

「画面間で共有したい」
からグローバル化
後で「この画面では使わない」が始まり、if地獄になる。

失敗②

APIの状態を
フロントで加工して保持
正がどれか分からなくなる。再取得のたびに壊れる。

失敗③

業務判断を
フロントで吸収
バックエンドと責任分界が崩壊。炎上一直線。

状態管理でPMが守るべき一文

これだけ覚えておけばいい。

「その状態、
なくなったら何が壊れる?」

答えが

画面だけ
→ ローカル
業務
→ バックエンド
よく分からない
→ 作らない

まとめ:状態管理は「技術選定」じゃない

フロントエンドPMにとって、状態管理はツールの話ではない。

Redux
Zustand
Context

ではなく、

「どこまでフロントが責任を持つか」
を決める設計の話だ。

  • 表示はフロント
  • 正はバックエンド
  • 迷ったら増やさない

これだけ守るだけで、
React案件の事故率は劇的に下がる。

フロントエンドPMシリーズ 第3回 / 全5回