使用モジュールの解説¶
このドキュメントは、Go-DDDプロジェクトで使用されているGoモジュールについて解説します。各モジュールの役割と使用目的を理解することで、プロジェクトの構造と依存関係をより深く理解できます。
1. 主要モジュール¶
1.1 github.com/google/uuid (v1.6.0)¶
概要: UUIDを生成するためのライブラリです。
使用目的: - エンティティの一意識別子(ID)の生成 - 分散システムでの一意性の保証 - データベースレコードの主キーとして使用
使用例:
import "github.com/google/uuid"
// 新しいUUIDの生成
id := uuid.New()
1.2 github.com/jinzhu/gorm (v1.9.16)¶
概要: GoのORMライブラリです。
使用目的: - データベースとのやり取りを簡素化 - SQLクエリの抽象化 - モデルとデータベーステーブルのマッピング
使用例:
import "github.com/jinzhu/gorm"
// データベース接続
db, err := gorm.Open("postgres", "host=localhost user=gorm dbname=gorm sslmode=disable password=mypassword")
1.3 github.com/labstack/echo/v4 (v4.13.3)¶
概要: 高性能で拡張可能なWebフレームワークです。
使用目的: - RESTful APIの実装 - HTTPリクエスト/レスポンスの処理 - ルーティングとミドルウェアの提供
使用例:
import "github.com/labstack/echo/v4"
// Echoインスタンスの作成
e := echo.New()
// ルートの定義
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
1.4 github.com/stretchr/testify (v1.10.0)¶
概要: Goのテストを支援するツールキットです。
使用目的: - ユニットテストの記述 - アサーションの簡素化 - モックオブジェクトの作成
使用例:
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSomething(t *testing.T) {
assert.Equal(t, 123, 123, "they should be equal")
}
1.5 github.com/swaggo/echo-swagger (v1.4.1)¶
概要: Echo フレームワーク用の Swagger UI ハンドラです。
使用目的: - API ドキュメントの自動生成 - Swagger UI の提供 - API エンドポイントのテスト
使用例:
import (
"github.com/labstack/echo/v4"
echoSwagger "github.com/swaggo/echo-swagger"
)
e := echo.New()
e.GET("/swagger/*", echoSwagger.WrapHandler)
1.6 github.com/swaggo/swag (v1.16.4)¶
概要: Go コードから Swagger ドキュメントを生成するライブラリです。
使用目的: - API ドキュメントの自動生成 - OpenAPI 仕様の作成
使用例:
// @title Marketplace API
// @version 1.0
// @description This is a sample server for a marketplace.
// @host localhost:8080
// @BasePath /api/v1
func main() {
// ...
}
1.7 github.com/cucumber/godog (v0.15.0)¶
概要: Go 言語用の BDD (Behavior-Driven Development) フレームワークです。
使用目的: - 振る舞い駆動開発のサポート - Gherkin 構文によるテスト記述 - 受け入れテストの自動化
使用例:
import "github.com/cucumber/godog"
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^I have (\d+) items$`, iHaveItems)
ctx.Step(`^I add (\d+) items$`, iAddItems)
ctx.Step(`^I should have (\d+) items$`, iShouldHaveItems)
}
1.8 github.com/testcontainers/testcontainers-go (v0.35.0)¶
概要: テスト用のコンテナを提供するライブラリです。
使用目的: - 統合テスト環境の構築 - データベースなどの依存サービスのコンテナ化 - テスト環境の一貫性確保
使用例:
import (
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
)
pgContainer, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: "postgres:13",
ExposedPorts: []string{"5432/tcp"},
Env: map[string]string{
"POSTGRES_PASSWORD": "password",
"POSTGRES_USER": "user",
"POSTGRES_DB": "testdb",
},
WaitingFor: wait.ForLog("database system is ready to accept connections"),
},
})
1.9 gorm.io/driver/postgres (v1.5.11)¶
概要: GORMのPostgreSQLドライバーです。
使用目的: - PostgreSQLデータベースとの接続 - PostgreSQL固有の機能のサポート
使用例:
import (
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
1.10 gorm.io/driver/sqlite (v1.5.7)¶
概要: GORMのSQLiteドライバーです。
使用目的: - SQLiteデータベースとの接続 - テスト環境でのインメモリデータベースの使用
使用例:
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
1.11 gorm.io/gen (v0.3.26)¶
概要: GORM のコード生成ツールです。
使用目的: - データベーススキーマからの型安全なクエリ生成 - モデル定義の自動生成 - リポジトリパターンの実装支援
使用例:
import (
"gorm.io/gen"
)
g := gen.NewGenerator(gen.Config{
OutPath: "../query",
Mode: gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface,
})
g.ApplyBasic(model.User{}, model.Product{})
g.Execute()
1.12 gorm.io/plugin/dbresolver (v1.5.3)¶
概要: GORM のデータベースリゾルバプラグインです。
使用目的: - 読み取り/書き込み分離 - データベースシャーディング - 複数データベース接続の管理
使用例:
import (
"gorm.io/gorm"
"gorm.io/plugin/dbresolver"
"gorm.io/driver/postgres"
)
db, err := gorm.Open(postgres.Open("primary_dsn"), &gorm.Config{})
db.Use(dbresolver.Register(dbresolver.Config{
Replicas: []gorm.Dialector{
postgres.Open("replica_dsn1"),
postgres.Open("replica_dsn2"),
},
}).Register(dbresolver.Config{
Sources: []gorm.Dialector{postgres.Open("users_dsn")},
Replicas: []gorm.Dialector{postgres.Open("users_replica_dsn")},
Policy: dbresolver.RandomPolicy{},
}, "users"))
1.13 gorm.io/gorm (v1.25.12)¶
概要: 最新バージョンのGORM(Object Relational Mapping)ライブラリです。
使用目的: - データベース操作の抽象化 - モデル定義とマイグレーション - クエリビルダーの提供
使用例:
import (
"gorm.io/gorm"
"gorm.io/driver/postgres"
)
db, err := gorm.Open(postgres.Open("dsn"), &gorm.Config{})
// モデルの作成
type Product struct {
gorm.Model
Code string
Price uint
}
// マイグレーション
db.AutoMigrate(&Product{})
2. 間接的な依存モジュール¶
プロジェクトには、主要モジュールが依存する多くの間接的な依存モジュールも含まれています。以下に主要なものを示します:
2.1 データベース関連¶
- github.com/jackc/pgx/v5 (v5.5.5): PostgreSQLドライバー
- github.com/mattn/go-sqlite3 (v1.14.22): SQLiteドライバー
- github.com/jinzhu/inflection (v1.0.0): 単数形/複数形の変換ユーティリティ
- github.com/jinzhu/now (v1.1.5): 日時操作ユーティリティ
- gorm.io/driver/mysql (v1.5.7): GORMのMySQLドライバー
- gorm.io/datatypes (v1.1.1-0.20230130040222-c43177d3cf8c): GORMの拡張データ型
- gorm.io/hints (v1.1.0): GORMのSQLヒント機能
2.2 HTTP/Web関連¶
- github.com/labstack/gommon (v0.4.2): Echoフレームワークのユーティリティ
- github.com/valyala/fasttemplate (v1.2.2): 高速なテンプレートエンジン
- golang.org/x/net (v0.37.0): 拡張ネットワーク機能
- golang.org/x/crypto (v0.36.0): 暗号化機能
- github.com/KyleBanks/depth (v1.2.1): Goパッケージの依存関係解析
- github.com/swaggo/files/v2 (v2.0.0): Swaggerファイルハンドラ
2.3 テスト関連¶
- github.com/davecgh/go-spew (v1.1.1): データ構造の詳細表示
- github.com/pmezard/go-difflib (v1.0.0): 差分比較ユーティリティ
- github.com/stretchr/objx (v0.5.2): オブジェクト操作ユーティリティ
- github.com/cucumber/gherkin/go/v26 (v26.2.0): Gherkin構文パーサー
- github.com/cucumber/messages/go/v21 (v21.0.1): Cucumberメッセージ
- github.com/gofrs/uuid (v4.3.1+incompatible): UUID生成ライブラリ
2.4 コンテナ関連¶
- github.com/testcontainers/testcontainers-go (v0.35.0): テスト用コンテナ
- github.com/docker/docker (v27.1.1+incompatible): Dockerエンジン API
- github.com/docker/go-connections (v0.5.0): Docker接続ユーティリティ
- github.com/containerd/containerd (v1.7.18): コンテナランタイム
- github.com/opencontainers/image-spec (v1.1.0): OCI イメージ仕様
2.5 その他のユーティリティ¶
- golang.org/x/sync (v0.12.0): 同期プリミティブ
- golang.org/x/sys (v0.31.0): システムコール
- golang.org/x/text (v0.23.0): テキスト処理
- golang.org/x/tools (v0.31.0): Go開発ツール
- golang.org/x/mod (v0.24.0): Goモジュール操作
- gopkg.in/yaml.v2 (v2.4.0): YAML処理
- gopkg.in/yaml.v3 (v3.0.1): YAML処理(v3)
3. Go言語バージョン¶
プロジェクトでは、以下のGoバージョンを使用しています:
- Go言語バージョン: 1.23.0
- ツールチェーン: 1.24.1
これらのバージョンは、go.modファイルの以下の行で指定されています:
go 1.23.0
toolchain go1.24.1
4. モジュール選定の理由¶
Go-DDDプロジェクトでは、以下の理由からこれらのモジュールを選定しています:
- 成熟度と安定性: 広く使用されており、安定したAPIを提供するモジュールを選定
- パフォーマンス: 高いパフォーマンスを持つモジュールを優先
- コミュニティサポート: 活発なコミュニティと良好なドキュメントを持つモジュール
- ドメイン駆動設計との親和性: DDDの原則に沿った実装をサポートするモジュール
5. モジュールのバージョン管理¶
プロジェクトでは、go.modファイルを使用してモジュールのバージョンを管理しています。バージョンアップデートの際は、以下の点に注意しています:
- セマンティックバージョニングの尊重
- 破壊的変更の影響評価
- 依存関係の競合解決
- セキュリティアップデートの優先適用
6. まとめ¶
Go-DDDプロジェクトでは、ドメイン駆動設計の原則に基づいたアプリケーション開発を支援するために、適切なモジュールを選定しています。これらのモジュールは、データベース操作、Web API実装、テスト、ユーティリティ機能など、アプリケーションの様々な側面をサポートしています。