LoginSignup
9
1

Next.jsで実現するオニオンアーキテクチャ (1) - ディレクトリ構成

Last updated at Posted at 2023-12-02

記事におけるNext.jsは、v13以降のApp Router (Server Components)を用いる前提での説明となります。
Pages Routerを用いている場合は、適宜Pages Routerでの書き方として読み替えてください。

この記事は何

最近Next.jsでウェブアプリケーションを作ることが多いのですが、
その時にオニオンアーキテクチャを採用してアプリケーションを作ることが多く、型も固まってきたので数回の記事にわたり紹介をしていきたいと思っています。
今回はディレクトリ構成について紹介します。

オニオンアーキテクチャとは

オニオンアーキテクチャとは以下のレイヤーで実装を行なっていくアーキテクチャです。

オニオンアーキテクチャ.drawio.png

簡単に言ってしまうと古典的なレイヤードアーキテクチャにおける、InfrastructureレイヤーやTestレイヤーを
Dependency Injection (DI) で最上位のレイヤーに持ってくる構成のアーキテクチャです。

最近のDDDなどの手法を用いるときは、このレイヤードアーキテクチャが採用されることが多いです。

より詳しい説明は以下の記事などをご参考ください。

Next.jsにおける各レイヤーの定義

Next.jsでオニオンアーキテクチャを実現しようとする場合、以下のようなディレクトリ構成を採用することが多いです。

- app (Presentaion)
    - xxx
        - page.tsx
- infrastructures (Infrastructure)
    - XXXRepository.ts
    - XXXFactory.ts
- utils (Infrastructure)
    - xxx.ts (DBアクセス以外の外部アクセスライブラリ)
- applications (Application Service)
    - XXXService.ts
- models
    - xxx
        - XXX.ts (Entity)
        - YYY.ts (Value Object)
        - XXXService.ts (Domain Service)
        - IXXXRepository.ts (Infrastructure Interface)
        - IXXXFactory.ts (Infrastructure Interface)

このようなディレクトリ構成は、

を参考にして作成しています。

次回以降、具体的にそれぞれのレイヤーをどのように実装していくのかについて紹介をしていきます。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1