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としての外部契約
           ├── model    # APIのリクエスト・レスポンス構造体
           └── router   # httpリクエストのルーティング
└── 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/model

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

internal/presentation/handler/router

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

scripts

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