atoms/ や hooks/ のような「分類のための分類」は「小さく分ける」ベストプラクティスを妨害する
ここでは、コンポーネント・フック・その他の関数等を、まとめてモジュールと呼ぶ
モジュールは「小さく作る」べき
行数・複雑度を小さくする
それだけじゃなくて、「用途が限定される」ことも大事
小さく作ろうとしたとき、それらをどこに置くかが問題
1. コロケーション方式のディレクトリ構造の場合
「このモジュールは、このディレクトリの中からしか使われない」と用途を限定するところから始められる
eslint-plugin-import-access (特に「デフォルトでパッケージデフォルト」の設定) を使うと、そのファイルが配置されている同じディレクトリからのみ import できるように制限できる
2. 「分類のための分類」のディレクトリ構造の場合
このモジュールを利用するファイルを限定できない(紳士協定になってしまう)
用途が限定できないので、強制的に「再利用されうる」コードになり、考えることが増えすぎる
「モジュールを小さくする」ことによって「見つけやすさ」が損なわれると考えられがち
しかし「分類の分類」を避けて「コロケーション」の方式を取れば両立できるはず