Goワークスペースとマルチモジュール開発
Goワークスペース(go.workファイル)がreplaceディレクティブなしでマルチモジュール開発を可能にする方法を学びます。go.workとgo.modファイルの関係を理解します。
Workspace
詳細な説明
Goワークスペース
Go 1.18は、マルチモジュール開発のファーストクラスソリューションとしてワークスペース(go.workファイル)を導入しました。
go.workファイル
go 1.22.0
use (
./my-service
./shared-lib
./another-module
)
ワークスペース vs Replaceディレクティブ
| 機能 | go.work | go.modのreplace |
|---|---|---|
| スコープ | ワークスペース全体 | 単一モジュール |
| VCSにコミット | 通常.gitignored | コミット前に削除必須 |
| マルチモジュール | ファーストクラスサポート | 依存関係ごとに1つのreplace |
ワークスペースを使用すべき場合
- 複数の関連モジュールの同時開発
- 複数のGoモジュールを持つモノレポ
- モジュール境界を超えた変更のテスト
ベストプラクティス
go.workとgo.work.sumを.gitignoreに追加する- 各モジュールの
go.modは独立して有効であるべき - CIは各モジュールを独立してビルドすべき(ワークスペースを使用しない)
ユースケース
Goワークスペースは、共有ライブラリを持つマイクロサービスアーキテクチャに取り組むチームに最適です。replaceディレクティブをやりくりする代わりに、開発者は一度ローカルワークスペースを設定します。go.modフォーマッターは個々のモジュールファイルをクリーンに保ちます。