Replaceディレクティブによるローカルモジュール開発

replaceディレクティブを使用して依存関係をローカルパスに向けるGoのローカルモジュール開発をセットアップします。複数のモジュールを同時に開発するワークフローを学びます。

Directives

詳細な説明

ローカルモジュール開発

複数のGoモジュールを同時に開発する場合、ローカルパスを持つreplaceディレクティブにより、レジストリに公開せずに変更をテストできます。

基本セットアップ

my-service/go.mod内:

module github.com/myorg/my-service

go 1.22.0

require github.com/myorg/shared-lib v1.2.0

replace github.com/myorg/shared-lib => ../shared-lib

ローカルリプレースの動作

  • requireディレクティブは依然としてバージョン付きでモジュールをリスト
  • replaceディレクティブはローカルファイルシステムパスにリダイレクト
  • ローカルパスは./または../で始まる相対パスまたは絶対パスでなければならない

よくあるミス

コミット前にreplaceを削除し忘れる: CIはビルドサーバーに相対パスが存在しないため失敗します。

代替:Goワークスペース

Go 1.18+では、ローカル開発にreplaceディレクティブの代わりにgo.workファイルの使用を検討してください。ワークスペースはマルチモジュール開発用に設計されており、go.modの変更を必要としません。

ユースケース

ローカルモジュール開発は、複数のGoモジュールを維持するチームの日常的なワークフローです。バックエンドチームはロギング、認証、データベースアクセス用の共有ライブラリを持つことが多いです。replaceディレクティブを使用すると、公開前にモジュール境界を超えた変更をテストできます。

試してみる — go.mod Formatter

フルツールを開く