共通コンポーネントが肥大化しすぎて意図しない部分に影響がでてしまった a. 肥大化すると関連性の低い機能が「密結合」=「影響を受けやすい状態」になりがち b. 「密結合」になると、意図しない不具合を誘発してしまう 2. 機能修正時は低コストで実現可能なため既存のコンポーネントに追加修正しがち a. コンポーネントを分割とか考えずに簡単な追加修正で済ましてしまうシーンが多かった b. No1の共通コンポーネントの肥大化を助長してしまう 原因 3-1. コンポーネントおばけ
多くの機能が密結合となることのリスクの認識が甘かった a. プロダクトが複雑になってくればなるほど重要! 2. コンポーネントが適切に分割された状態の維持が難しい / コストが高い a. 開発に携わる人が多ければ多いほど難しくなる b. 分割の方針が異なっていると各所で歪みがでてより扱いづらくなってしまう 課題 3-1. コンポーネントおばけ
適切に分解されている状態を維持できることが重要 a. React の強みの一つは、コンポーネント化して再利用性を高めることです b. ただし「なんでも共通化すればよい」というわけではありません、適切な分割が必要です c. 適切な分割の観点として「高凝集・低結合」が役に立ちます 2. 複数人で開発する場合、同じ方針で開発を進めるためにも”ルール”が必要 a. 複数人で開発すると認識が容易にずれてしまいます b. コンポーネントが適切に分割された状態を維持するためには、何かしらのルールが必要です c. Atomic Designなど一般的に知られているルールは新しく入ったメンバーも馴染みやすいです まなび 3-1. コンポーネントおばけ
デザイン時の要素の整理と、コンポーネント実装時の単位が異なっていた a. デザイナー目線での修正対象と開発者目線での修正対象が異なる可能性がある b. 予期せぬ手戻りが発生したり、実装を大きく修正する必要があるかもしれない 2. 開発完了間近で手戻りが発生し、チーム内外含めて調整が難しくなってしまった a. 早期に検知できれば対応をうてる場合もあるが後期になるほど対応難易度があがる b. 検知が後期になるほど既に実装した部分の修正も必要となるかもしれない 原因 3-2. デザイン / 開発 のすれちがい
Storybook はコンポーネントベースの開発を促進するための強力なツール a. コンポーネントの見た目振る舞いを容易に確認できる有用なツール b. 特にデザイナーなどエンジニア以外のメンバーも容易に確認できる点で価値が高い c. 早期FBを可能とすることで、より安定した開発の実現に寄与する 2. デザイナーともコンポーネントについて共通の認識をもつことが重要 a. 認識合わせた上で実装することでデザインの変更に伴う修正を最小限に抑えることが可能 まなび 3-2. デザイン / 開発 のすれちがい
レンダリングの最適化ができていなかった a. 複雑なstateやuseEffectを乱用されていた b. useMemo / useCallback などを活用しきれていない 2. コンポーネントの構成が複雑化してしまっていた a. state管理がどのように実現されているかの把握が困難 b. レンダリングの最適化の難易度が高くなってしまっていた 原因 3-3. 絶対レンダリングするマン