モジュール性と再利用性を高める React プロジェクト構成
React プロジェクトを components、core、features、shared に分割し、明確な依存境界を設けます。
ディレクトリ構成
- components
- 要素、フォーム、レイアウト、モーダルなどの汎用 UI コンポーネント を格納します。
- アプリケーション全体から利用でき、特定の機能には依存しません。
- core
- API クライアント、ストア、モデル、ローダーなど、アプリケーション全体の基盤と設定を格納します。
featuresとsharedから参照できますが、featuresを参照してはいけません。
- features
- アプリケーションの機能ごとのモジュールを格納します。
components、core、sharedを参照できますが、機能モジュール同士を直接依存させないようにします。
- shared
- 複数の機能で使う、再利用可能な非 UI のユーティリティやロジック を格納します。
featuresから参照できますが、featuresを参照してはいけません。

src/├── assets/├── components/│ ├── Elements/│ ├── Forms/│ ├── Layouts/│ ├── Modals/│ ├── Pages/│ │ ├── Errors/│ │ │ ├── AccessDeniedPage.tsx│ │ │ ├── NotAuthenticatedPage.tsx│ │ │ ├── SystemErrorPage.tsx│ │ │ ├── ...│ │ ├── ErrorBoundary.tsx├── core/│ ├── api/│ │ ├── interceptors/│ ├── config/│ ├── hooks/│ ├── loaders/│ ├── models/│ │ ├── api/│ ├── stores/│ ├── utils/├── features/│ ├── auth/│ ├── .../├── shared/まとめ
React プロジェクトを components、core、features、shared に分割すると、UI プリミティブ、アプリケーション基盤、機能ごとのコード、再利用可能な非 UI ロジックを分離できます。
独立した components 層により、ボタン、レイアウト、モーダルなどのアプリケーション共通 UI を、shared に置く非 UI のユーティリティから分離できます。
配置先は利用数ではなく責務で決めます。再利用可能な UI は components、非 UI の共通ロジックは shared、機能固有のコードは各機能モジュールに配置します。
Related posts
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
Jest で ECMAScript Modules をテストする
package.json、TypeScript、Jest の設定を連携させ、Jest の "Cannot use import statement outside a module" エラーを解消する方法を紹介します。
モジュール性と再利用性を高める Angular のプロジェクト構成
Angular アプリケーションを core、features、shared に分け、依存関係の境界を明確にするフォルダ構成を紹介します。
Jasmine でモックオブジェクトのプロパティをスパイする
モックオブジェクトのプロパティをスパイする際に発生する Jasmine の "already been spied upon" エラーを、Object.getOwnPropertyDescriptor で回避する方法を解説します。
