(C)PharmaX Inc. 2023 All Rights Reserve 13 コンポーネント課題①:早まった抽象化 ・プロダクトは成長するものであり、その初期段階では特に変化が激しい。 ・なので、いきなりやりすぎた抽象化を行うと逆にプロダクトの足枷になることもありま す。 ・抽象化はただの因数分解ではない。 ・また、抽象化(共通化)は「目的」ではなく「手段」であるため、「共通化できるからやる」 のではなく、「すべきからやる」というものです。
(C)PharmaX Inc. 2023 All Rights Reserve 16 ※この例はhookだけですがコンポーネント も絡んだ処理と考えてください。 ・共通コンポーネントから「呼び出し元による 条件分岐処理」を取り除くことに成功。 ・各コンポーネント特有の処理はちゃんと各 自の中に閉じ込んでいる。 改善後
(C)PharmaX Inc. 2023 All Rights Reserve 18 Unit Testを書こうとすると ・「外部から値がもらえない場合」のケースは書けても、 「外部から値がもらえる場合」のケースが書けない。 ・もらえる場合且つ値によってさらに分岐があれば、値は テストケース内で制御できないため、それらも書けなくな る。
(C)PharmaX Inc. 2023 All Rights Reserve 19 改善 ・外部依存処理はコンポーネント設計の段階から分けるようにする。 ・「こう書くと画面はこうなる」だけではなく、「こう書くとテストはこう書けば いい/こう書かねばならない」も頭の隅におきながら実装するように。 ・テストを意識したコードの分け方を社内のモブプロ会で共有 ・「こういう処理のテストはこう書く」というプラクティスを残す
(C)PharmaX Inc. 2023 All Rights Reserve 21 ディレクトリ課題:影響範囲がわからない ・種類で分けたり、機能で分けたり、ディレクトリ構成に一貫とした ルールがなく、ディレクトリ構成から影響範囲の情報が読み取れな い。 ・「ここを書き直したらどこまで影響するか?」はパッと見積もりがで きず、スプリントプランニングで話しづらい。 ・ファイルを作る時はどこに置くか迷う
(C)PharmaX Inc. 2023 All Rights Reserve 22 改善 ・ディレクトリ構造にスコープの意味を持たせる ・components/ディレクトリにもpages/の構造を用意する ・画面でいうと「特定のpageしか使わないもの」と「複数ページで使われるもの」を 分ける ・機能でいうと「特定の機能しか使わないもの」と「複数機能で使われるもの」を分 ける ・ルールはできるだけシンプルに、作成時に迷わせないこと