atoms/ や hooks/ のような「分類のための分類」は「小さく分ける」ベストプラクティスを妨害する
ここでは、コンポーネント・フック・その他の関数等を、まとめてモジュールと呼ぶ
モジュールは「小さく作る」べき
行数・複雑度を小さくする
それだけじゃなくて、「用途が限定される」ことも大事
ほかにも、「分ける勘所」もある
逆に、「薄すぎるレイヤー」は避けるべき。
…という前提の上で、「分類のための分類」が、以下のようにして最善の分割のしかたを邪魔する
非本質的なレイヤー教条主義は、レイヤー数の過不足の原因になる
1. 非本質的な悩みのせいで「分ける勘所」を無視して、一つの塊にしてしまう。
2. 非本質的な「レイヤー」に当てはめようとするせいで、「薄すぎるレイヤー」を生み出してしまう。
小さく作ろうとしたとき、それらをどこに置くかが問題
1. コロケーション方式のディレクトリ構造の場合
「このモジュールは、このディレクトリの中からしか使われない」と用途を限定するところから始められる
eslint-plugin-import-access (特に「デフォルトでパッケージデフォルト」の設定) を使うと、そのファイルが配置されている同じディレクトリからのみ import できるように制限できる
2. 「分類のための分類」のディレクトリ構造の場合
このモジュールを利用するファイルを限定できない(紳士協定になってしまう)
用途が限定できないので、強制的に「再利用されうる」コードになり、考えることが増えすぎる
「モジュールを小さくする」ことによって「見つけやすさ」が損なわれると考えられがち
しかし「分類の分類」を避けて「コロケーション」の方式を取れば両立できるはず
図解
https://scrapbox.io/files/695487fa614e01bf5dff740a.png