Go-DDDマーケットプレイスアプリケーション¶
1. 概要¶
Go-DDDマーケットプレイスアプリケーションは、ドメイン駆動設計(Domain-Driven Design, DDD)の原則に従って構築されたGoアプリケーションです。このセットアップガイドでは、開発環境の構築から、アプリケーションの実行、テストまでの一連の手順を説明します。
flowchart TD
subgraph "開発環境"
go["Go"]
docker["Docker"]
git["Git"]
node["Node.js"]
end
subgraph "データベース"
postgres["PostgreSQL"]
mysql["MySQL"]
end
subgraph "アプリケーション"
backend["バックエンド"]
frontend["フロントエンド"]
docs["ドキュメント"]
end
subgraph "ツール"
wiki["Wiki.js"]
plantuml["PlantUML"]
end
go --> backend
docker --> postgres
docker --> mysql
docker --> wiki
docker --> plantuml
node --> frontend
node --> docs
git --> backend
git --> frontend
git --> docs
2. 前提条件¶
Go-DDDマーケットプレイスアプリケーションを構築するには、以下のソフトウェアが必要です:
| ソフトウェア | バージョン | 備考 |
|---|---|---|
| Go | 1.23 | プログラミング言語 |
| Docker | 最新 | コンテナ化 |
| Docker Compose | 最新 | マルチコンテナ管理 |
| Git | 最新 | バージョン管理 |
| Node.js | 20.x | フロントエンド開発 |
3. セットアップ手順¶
以下のステップに従って、Go-DDDマーケットプレイスアプリケーションを構築します。
flowchart TD
start([開始]) --> step1[1. 前提条件のインストール]
step1 --> step2[2. リポジトリのクローン]
step2 --> step3[3. 依存関係のインストール]
step3 --> step4[4. 開発環境の起動]
step4 --> step5[5. データベースのセットアップ]
step5 --> step6[6. アプリケーションの構築]
step6 --> step7[7. アプリケーションの実行]
step7 --> step8[8. テストの実行]
step8 --> stop([終了])
3.1 前提条件のインストール¶
各プラットフォームに応じて、必要なソフトウェアをインストールします。
3.1.1 Go のインストール¶
flowchart TD
start([開始]) --> platform{プラットフォームは?}
platform -->|macOS| mac[brew install go]
platform -->|Linux| linux1[apt-get update]
linux1 --> linux2[apt-get install golang-go]
platform -->|Windows| win1[Go公式サイトからインストーラーをダウンロード]
win1 --> win2[インストーラーを実行]
mac --> check[go version でインストールを確認]
linux2 --> check
win2 --> check
check --> stop([終了])
macOS:
brew install go
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install golang-go
Windows: 1. Go公式サイトからインストーラーをダウンロード 2. インストーラーを実行し、指示に従う
インストールを確認:
go version
3.1.2 Docker と Docker Compose のインストール¶
flowchart TD
start([開始]) --> platform{プラットフォームは?}
platform -->|macOS| mac[Docker Desktop for Macをインストール]
platform -->|Linux| linux1[apt-get update]
linux1 --> linux2[apt-get install docker.io]
platform -->|Windows| win[Docker Desktop for Windowsをインストール]
mac --> check1[docker --version でインストールを確認]
linux2 --> check1
win --> check1
check1 --> check2[docker compose --version でインストールを確認]
check2 --> stop([終了])
macOS & Windows: 1. Docker Desktopをダウンロードしてインストール
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install docker.io
インストールを確認:
docker --version
docker compose --version
3.1.3 Node.js のインストール¶
flowchart TD
start([開始]) --> platform{プラットフォームは?}
platform -->|macOS| mac["brew install node version 20"]
platform -->|Linux| linux1["curl -fsSL https://deb.nodesource.com/setup_20.x | bash"]
linux1 --> linux2[apt-get install -y nodejs]
platform -->|Windows| win1[Node.js公式サイトからインストーラーをダウンロード]
win1 --> win2[インストーラーを実行]
mac --> check1[node --version でインストールを確認]
linux2 --> check1
win2 --> check1
check1 --> check2[npm --version でインストールを確認]
check2 --> stop([終了])
macOS:
brew install node@20
Linux (Ubuntu/Debian):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
Windows: 1. Node.js公式サイトからインストーラーをダウンロード 2. インストーラーを実行し、指示に従う
インストールを確認:
node --version
npm --version
3.2 リポジトリのクローン¶
flowchart TD
start([開始]) --> clone[git clone https://github.com/yourusername/go-ddd.git]
clone --> cd[cd go-ddd]
cd --> stop([終了])
リポジトリをクローンし、プロジェクトディレクトリに移動します:
git clone https://github.com/yourusername/go-ddd.git
cd go-ddd
3.3 依存関係のインストール¶
flowchart TD
start([開始]) --> npm[npm install]
npm --> go[go mod download]
go --> stop([終了])
Node.js の依存関係をインストールします:
npm install
Go の依存関係をダウンロードします:
go mod download
3.4 開発環境の起動¶
flowchart TD
start([開始]) --> docker[docker compose up -d]
docker --> check[docker-compose ps で起動確認]
check --> stop([終了])
docker -.-> note["データベース、Wiki、PlantUMLサーバーを起動"]
Docker Compose を使用して、開発環境を起動します:
docker-compose up -d
起動したサービスを確認します:
docker-compose ps
以下のサービスが起動します: - PostgreSQL (ポート 9920) - MySQL (ポート 3306) - Wiki.js (ポート 80) - PlantUML Server (ポート 9999)
3.5 データベースのセットアップ¶
flowchart TD
start([開始]) --> check[データベース接続情報を確認]
check --> migrate[アプリケーション起動時に自動マイグレーション]
migrate --> stop([終了])
check -.-> note["PostgreSQL接続情報"]
アプリケーションは起動時に自動的にデータベースマイグレーションを実行します。データベース接続情報は以下の通りです:
PostgreSQL: - ホスト: localhost - ポート: 9920 - ユーザー: root - パスワード: password - データベース: mydb
3.6 アプリケーションの構築¶
flowchart TD
start([開始]) --> build[go build -o app/backend/cmd/marketplace/marketplace app/backend/cmd/marketplace/main.go]
build --> stop([終了])
アプリケーションをビルドします:
go build -o app/backend/cmd/marketplace/marketplace app/backend/cmd/marketplace/main.go
3.7 アプリケーションの実行¶
flowchart TD
start([開始]) --> run[./app/backend/cmd/marketplace/marketplace]
run --> access[ブラウザで http://localhost:9090/api/v1/health にアクセス]
access --> stop([終了])
run -.-> note["アプリケーションがポート9090で起動"]
ビルドしたアプリケーションを実行します:
./app/backend/cmd/marketplace/marketplace
アプリケーションはデフォルトでポート9090で起動します。ヘルスチェックエンドポイントにアクセスして、アプリケーションが正常に動作していることを確認します:
http://localhost:9090/api/v1/health
3.8 テストの実行¶
flowchart TD
start([開始]) --> cd[cd app/backend]
cd --> test[go test ./...]
test --> stop([終了])
テストを実行します:
cd app/backend
go test ./...
4. アプリケーション構造¶
Go-DDDマーケットプレイスアプリケーションは、ドメイン駆動設計の原則に従って、以下のレイヤーで構成されています:
flowchart TD
subgraph "インターフェースレイヤー"
rest["REST API"]
end
subgraph "アプリケーションレイヤー"
services["サービス"]
commands["コマンド"]
queries["クエリ"]
end
subgraph "ドメインレイヤー"
entities["エンティティ"]
repos["リポジトリインターフェース"]
end
subgraph "インフラストラクチャレイヤー"
db["データベース実装"]
end
rest --> services
services --> entities
services --> repos
commands --> services
queries --> services
db --> repos
4.1 プロジェクト構造¶
go-ddd/
├── app/
│ └── backend/
│ ├── cmd/
│ │ └── marketplace/
│ │ └── main.go
│ └── internal/
│ ├── domain/
│ │ ├── entities/
│ │ └── repositories/
│ ├── application/
│ │ ├── services/
│ │ ├── command/
│ │ └── query/
│ ├── infrastructure/
│ │ └── db/
│ └── interface/
│ └── api/
│ └── rest/
├── docs/
│ └── wiki/
├── ops/
│ └── docker/
└── docker-compose.yml
4.2 主要なコンポーネント¶
4.2.1 ドメインレイヤー¶
ドメインレイヤーはアプリケーションの中心であり、ビジネスロジックとルールを含みます。
- エンティティ: 商品(Product)や出品者(Seller)などのビジネスオブジェクト
- リポジトリインターフェース: データの永続化を担当するインターフェース
4.2.2 アプリケーションレイヤー¶
アプリケーションレイヤーはユースケースを実装し、ドメインレイヤーのオブジェクトを調整します。
- サービス: 商品サービスや出品者サービスなど、ユースケースを実装するサービス
- コマンド: ドメインの状態を変更する操作(書き込み操作)
- クエリ: ドメインから情報を取得する操作(読み取り操作)
4.2.3 インフラストラクチャレイヤー¶
インフラストラクチャレイヤーは、永続化やその他の技術的な関心事を処理します。
- データベース実装: リポジトリインターフェースのデータベース実装(GORM を使用)
4.2.4 インターフェースレイヤー¶
インターフェースレイヤーは、外部世界とのインタラクションを処理します。
- REST API: 商品や出品者に関するREST APIエンドポイントを提供
5. API エンドポイント¶
Go-DDDマーケットプレイスアプリケーションは、以下のREST APIエンドポイントを提供します:
flowchart TD
subgraph "API エンドポイント"
subgraph "商品 API"
createProduct["POST /api/v1/products"]
getAllProducts["GET /api/v1/products"]
getProductById["GET /api/v1/products/{id}"]
updateProduct["PUT /api/v1/products/{id}"]
end
subgraph "出品者 API"
createSeller["POST /api/v1/sellers"]
getAllSellers["GET /api/v1/sellers"]
getSellerById["GET /api/v1/sellers/{id}"]
updateSellerName["PUT /api/v1/sellers/{id}/name"]
updateSellerEmail["PUT /api/v1/sellers/{id}/email"]
deleteSeller["DELETE /api/v1/sellers/{id}"]
end
subgraph "システム API"
healthCheck["GET /api/v1/health"]
end
end
5.1 商品 API¶
| メソッド | エンドポイント | 説明 |
|---|---|---|
| POST | /api/v1/products | 新しい商品を作成 |
| GET | /api/v1/products | すべての商品を取得 |
| GET | /api/v1/products/{id} | 指定IDの商品を取得 |
| PUT | /api/v1/products/{id} | 指定IDの商品を更新 |
5.2 出品者 API¶
| メソッド | エンドポイント | 説明 |
|---|---|---|
| POST | /api/v1/sellers | 新しい出品者を作成 |
| GET | /api/v1/sellers | すべての出品者を取得 |
| GET | /api/v1/sellers/{id} | 指定IDの出品者を取得 |
| PUT | /api/v1/sellers/{id}/name | 指定IDの出品者の名前を更新 |
| PUT | /api/v1/sellers/{id}/email | 指定IDの出品者のメールアドレスを更新 |
| DELETE | /api/v1/sellers/{id} | 指定IDの出品者を削除 |
5.3 システム API¶
| メソッド | エンドポイント | 説明 |
|---|---|---|
| GET | /api/v1/health | ヘルスチェック |
6. トラブルシューティング¶
flowchart TD
start([開始]) --> problem{問題は?}
problem -->|データベース接続エラー| db1[Docker Composeが起動しているか確認]
db1 --> db2[データベース接続情報が正しいか確認]
problem -->|ビルドエラー| build1[Go依存関係が正しくインストールされているか確認]
build1 --> build2[go mod tidy を実行]
problem -->|実行時エラー| run1[ログを確認]
run1 --> run2[データベースマイグレーションが成功したか確認]
db2 --> issue[問題が解決しない場合はIssueを作成]
build2 --> issue
run2 --> issue
issue --> stop([終了])
6.1 よくある問題と解決策¶
データベース接続エラー¶
症状: アプリケーション起動時に「Failed to connect to database」などのエラーが表示される
解決策:
1. Docker Composeが起動しているか確認: docker-compose ps
2. データベース接続情報が正しいか確認
3. データベースコンテナに直接接続してみる: docker-compose exec db_postgresql psql -U root -d mydb
ビルドエラー¶
症状: go build コマンド実行時にエラーが発生する
解決策:
1. Go依存関係が正しくインストールされているか確認: go mod download
2. 依存関係を整理: go mod tidy
3. Goのバージョンが1.23以上であることを確認: go version
実行時エラー¶
症状: アプリケーション実行時にエラーが発生する
解決策: 1. ログを確認して具体的なエラーメッセージを特定 2. データベースマイグレーションが成功したか確認 3. 必要なテーブルがデータベースに作成されているか確認
7. まとめ¶
このセットアップガイドでは、Go-DDDマーケットプレイスアプリケーションを0から構築するための手順を説明しました。ドメイン駆動設計の原則に従って構築されたこのアプリケーションは、クリーンアーキテクチャを採用し、各レイヤーが明確に分離されています。
flowchart LR
env["環境構築"] --> dev["アプリケーション開発"]
dev --> test["テスト"]
test --> deploy["デプロイ"]
env -.-> env_note["前提条件と環境のセットアップ"]
dev -.-> dev_note["アプリケーション構築と実行"]
test -.-> test_note["テストと検証"]
deploy -.-> deploy_note["デプロイと運用"]
環境構築: - 前提条件のインストール - リポジトリのクローン - 依存関係のインストール - 開発環境の起動
アプリケーション開発: - データベースのセットアップ - アプリケーションの構築 - アプリケーションの実行
テスト: - テストの実行 - APIエンドポイントの確認
デプロイ: - 本番環境へのデプロイ - 監視とメンテナンス
このガイドに従うことで、Go-DDDマーケットプレイスアプリケーションを簡単に構築し、実行することができます。また、ドメイン駆動設計の原則を学び、実践するための良い例としても活用できます。