開発ガイド
Blog Service のローカル開発環境構築とマイグレーション手順を説明します。
前提条件
必要なソフトウェア
ソフトウェア | バージョン | 用途 |
---|---|---|
Go | 1.21+ | アプリケーション実行 |
Docker | 20.0+ | データベース、開発環境 |
Docker Compose | 2.0+ | 複数コンテナ管理 |
Make | - | ビルド・テスト自動化 |
推奨ツール
ツール | 説明 |
---|---|
golangci-lint | Goコード品質チェック |
atlas | データベースマイグレーション |
wire | 依存性注入コード生成 |
環境構築
1. リポジトリのクローン
bash
git clone <repository-url>
cd portfolio/apps/blog-service
2. 依存関係のインストール
bash
# Goモジュールの依存関係をダウンロード
go mod download
# 開発ツールのインストール
go install github.com/google/wire/cmd/wire@latest
go install ariga.io/atlas/cmd/atlas@latest
3. 環境変数の設定
環境変数ファイルを作成:
bash
# .env.local ファイルを作成(例)
cat <<EOF > .env.local
DB_HOST=localhost
DB_PORT=3306
DB_NAME=dev
DB_USER=root
DB_PASSWORD=password
JWT_SECRET=your-jwt-secret-key
LOG_LEVEL=debug
EOF
ローカル開発
開発環境の起動
bash
# データベースとサービスを起動
make run
# または個別に起動
docker compose up -d
make atlas-apply-dev
このコマンドにより以下が実行されます:
- MySQL 8.0 コンテナの起動
- データベースマイグレーションの実行
- アプリケーションの起動(開発モード)
アプリケーションの起動確認
bash
# ヘルスチェック
curl http://localhost:8080/blog-service/v1/health
# 期待するレスポンス
# {"apiVersion":"1.0.0"}
ホットリロード開発
bash
# air などのホットリロードツールを使用
go install github.com/cosmtrek/air@latest
air
データベース管理
マイグレーション
新しいマイグレーションの作成
bash
# 新しいマイグレーションファイルを生成
make atlas-diff name=add_new_table
マイグレーション状態の確認
bash
# 現在のマイグレーション状態を確認
make atlas-status-dev
マイグレーションの適用
bash
# 最新のマイグレーションを適用
make atlas-apply-dev
マイグレーションのロールバック
bash
# 一つ前のマイグレーションに戻す
make atlas-down-dev
データベーススキーマの確認
bash
# 現在のスキーマ構造を表示
make atlas-inspect
コード生成
ent ORM コード生成
bash
# entスキーマファイルの確認
make ent-describe
# entコードの生成
make ent-generate
新しいエンティティの追加
bash
# 新しいentスキーマを作成
make ent-new name=Comment
# 生成されたファイルを編集後、コード生成
make ent-generate
Wire 依存性注入コード生成
bash
# Wire設定からDIコードを生成
make wire-gen
OpenAPI クライアント生成
bash
# OpenAPI定義からGoクライアントコードを生成
make api-gen
モックコード生成
bash
# テスト用のモックコードを生成
make mock-gen
テスト
テストの実行
bash
# 全テストの実行
make check
# または個別に実行
go test ./...
# カバレッジ付きでテスト実行
go test -cover ./...
# 特定のパッケージのテスト
go test ./internal/usecase/article/...
テストファイルの構成
internal/
├── usecase/
│ └── article/
│ ├── create.go
│ ├── create_test.go # ユニットテスト
│ └── list_test.go
└── infrastructure/
└── mysql/
└── repository/
├── article.go
└── article_test.go # 統合テスト
テストデータベース
統合テストでは専用のテストDBを使用:
bash
# テスト用DBの起動
docker compose -f docker-compose.test.yml up -d
# テスト実行(環境変数でテストDB指定)
TEST_DB_URL="mysql://root:password@localhost:3307/test" go test ./...
コード品質
静的解析
bash
# golangci-lint による静的解析
golangci-lint run ./...
# フォーマット
go fmt ./...
# vet チェック
go vet ./...
推奨する開発フロー
機能ブランチの作成
bashgit checkout -b feature/add-comment-api
コード変更と自動生成
bash# コード変更後、必要に応じて自動生成 make ent-generate make wire-gen make mock-gen
テスト実行
bashmake check
プルリクエスト作成前チェック
bash# 全チェックを実行 make check git add . git commit -m "feat: add comment API"
よく使うMakeコマンド一覧
コマンド | 説明 |
---|---|
make run | 開発環境の起動(DB + Migration) |
make check | コード品質チェック(fmt, vet, test, lint) |
make ent-generate | ent ORM コード生成 |
make wire-gen | Wire DI コード生成 |
make mock-gen | モックコード生成 |
make api-gen | OpenAPI クライアントコード生成 |
make atlas-apply-dev | マイグレーション適用 |
make atlas-status-dev | マイグレーション状態確認 |
make atlas-diff name=<name> | 新規マイグレーション作成 |
開発Tips
VS Code 設定
.vscode/settings.json
の推奨設定:
json
{
"go.lintTool": "golangci-lint",
"go.lintFlags": ["--fast"],
"go.testFlags": ["-v"],
"go.buildFlags": ["-v"],
"files.watcherExclude": {
"**/vendor/**": true
}
}
デバッグ設定
.vscode/launch.json
:
json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Blog Service",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/cmd/server",
"env": {
"DB_URL": "mysql://root:password@localhost:3306/dev"
}
}
]
}
パフォーマンス計測
bash
# プロファイリング
go tool pprof http://localhost:8080/debug/pprof/profile
# メモリ使用量
go tool pprof http://localhost:8080/debug/pprof/heap
トラブルシューティング
一般的な問題は トラブルシューティング を参照してください。