GolangとClean ArchitectureでAPIサーバーを構築してみた

37294 ワード

目的

どうも、@yanteraです。
Goで実際にClean Architectureで開発する場合どのような構築をすれば、開発しやすいのか設計してみました。
実践を想定して構築を考えています。APIドキュメントの代わりにsawaggerを実装しています。

使用するツール

  • docker
  • echo(air)
  • gorm
  • swagger
  • goa

ディレクトリ構成

├─ docker/
    ├─ api
        └─ environments
            ├─ production/
            ├─ development/
            └─ test/
    ├─ document
    └─ mysql 
├─ documents/
    └─ design/
├─ server/
    ├─ adapters/
        ├─ controllers/
        ├─ gateways/
        └─ presenter/
    ├─ infrastructure/
        ├─ routes/
        └─ database/
    ├─ usecases/
    ├─ entities/
    └─ main.go
└─ docker-compose.development.yml

環境について

docker-composeでコンテナを管理しています。コンテナの内容としては以下になります。

  • API server
    • Clean Architectureを使用してAPIサーバーを構築します
      • echo + air + gormを採用
        • developmentでは開発効率向上の為にairを採用
  • Database
    • データの永続化を行います
      • MySQL8.0を採用
  • Swagger UI
    • SwaggerのUIを構築します
  • Swagger Editor
    • openapi.yamlを作成・更新します
      • goaを採用

詳細についてはdocker-compose.development.ymlやdockerディレクトリを確認してください。初期データ用のsqlファイルも作成しています。