Skip to content

Webアプリパッケージ構成例 ​

GoでWebアプリケーションを開発する際のプロジェクトのパッケージ構成について一つの指針となるサンプルを記載します。

shell
.
├── api                    # APIドキュメント
├── cmd                    # エントリポイント
├── internal
│   ├── apperrors          # 独自エラー定義
│   ├── application        # アプリケーション層
│   │   └── usecase        # 業務処理
│   │       └── params     # 業務処理の入力・出力モデル
│   ├── bootstrap          # 依存性の注入およびルーティング
│   ├── domain             # ドメイン構造体、ビジネスロジックおよびrepositoryインターフェース
│   ├── infrastructure     # インフラストラクチャ層
│   │   ├── persistence    # データベース向け定義
│   │   │   └── table      # テーブル定義に対応した構造体
│   │   └── repository     # ドメイン操作の実装
│   ├── logging            # ログ出力制御
│   ├── presentation       # プレゼンテーション層
│   │   ├── handler        # APIとしての外部契約
│   │   │   ├── httperror  # エラーレスポンス構造体およびハンドリング
│   │   │   └── model      # APIのリクエスト・レスポンス構造体
│   │   └── router         # httpリクエストのルーティング
│   └── validation         # リクエストのバリデーション初期化
└── scripts                # 開発支援ツール

api ​

swaggerなどのAPIドキュメント、およびそれを生成する関数を格納するパッケージです。

cmd ​

アプリケーションのエントリポイントとなる関数を格納するパッケージです。基本的にmain.goのみが格納されます。

internal/apperrors ​

アプリケーション内で独自に定義するエラーを格納するパッケージです。

internal/application ​

アプリケーションの業務処理実装を格納するパッケージです。

internal/application/usecase ​

業務処理を行う関数を格納するパッケージです。関数内に直接処理を実装するか、domain内の処理を呼び出す形で業務を実施します。

internal/application/usecase/params ​

業務処理の入力・出力モデルとなる構造体を格納するパッケージです。

internal/bootstrap ​

依存性の注入およびルーティングの設定を行い、各APIの実装を行うパッケージです。

internal/domain ​

業務処理の中心となるドメイン構造体およびそれを操作するrepositoryインターフェースを格納するパッケージです。

1つのdomainで完結する業務処理についてはこのパッケージ内で実装してください。

internal/infrastructure ​

データベースや他APIなどの外部接続に関する設定を行う関数を格納するパッケージです。

internal/infrastructure/persistence ​

データベース向けの定義を格納するパッケージです。

internal/infrastructure/persistence/table ​

データベースの各テーブル定義に対応した構造体を格納するパッケージです。

internal/infrastructure/repository ​

domainとデータベース間とでデータを操作する関数を格納するパッケージです。

internal/logging ​

ログレベル別の文言出力など、ログ出力を制御するパッケージです。

internal/presentation ​

APIとしての外部契約を格納するパッケージです。

internal/presentation/handler ​

リクエストモデルのjsonの解析およびバリデーションを行なって、業務処理を呼び出すハンドラ関数を格納するパッケージです。

internal/presentation/handler/httperror ​

APIのエラーレスポンスモデル構造体およびそのハンドリング関数を格納するパッケージです。

internal/presentation/handler/model ​

APIのリクエスト・レスポンスモデルとなる構造体を格納するパッケージです。

internal/presentation/router ​

httpリクエストのルーティングを行う関数を格納するパッケージです。

internal/validation ​

リクエストモデルのバリデータを格納するパッケージです。

scripts ​

テストカバレッジの作成やAPIドキュメントの自動生成などの開発支援ツールを格納するパッケージです。