グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



【Go】go.modのreplaceでローカルのモジュールを参照する

goで複数のモジュールを組み合わせて機能を実装する場合にgo.modでモジュールをimportして使うのですが、importしたモジュール側に実際にどんな値が渡されてきているのかを調べたい場合にモジュールにデバッグコードを追加してpushし、利用側で変更したモジュールを更新する必要があります。

1回で済めばいいのですがそういうわけにもいかずかなり手間がかかってしまいます。
また、自分で作ったモジュールであればpush可能ですが、そうでない場合も多いかと思います。

そこでgo.modのreplaceを使ってgithubからimportするのではなくローカルのモジュールをimportする方法をご紹介します。

go.mod replace

go.mod file referenceに説明があります

replace

Replaces the content of a module at a specific version (or all versions) with another module version or with a local directory. Go tools will use the replacement path when resolving the dependency.

特定のバージョン(またはすべてのバージョン)のモジュールのコンテンツを、別のモジュールバージョン またはローカルディレクトリに置き換えます。 Goツールは、依存関係を解決するときに置換パスを使用します。replace

Syntax

module-path
  • 交換するモジュールのモジュールパス。
module-version
  • オプション。 置き換える特定のバージョン。
  • バージョン番号を省略すると、モジュールのすべてのバージョンが矢印の右側のコンテンツに置き換えられます。
replacement-path
  • Goが必要なモジュールを探すパス。
  • モジュールパス、または置換モジュールのローカルファイルシステム上のディレクトリへのパスにすることができます。
  • モジュールパスの場合は、replacement-version値を指定する必要があります。
  • ローカルパスの場合、replacement-version値を使用することはできません。
replacement-version
  • 交換用モジュールのバージョン。
  • 置換バージョンは、replacement-pathがモジュールパス(ローカルディレクトリではない)の場合にのみ指定できます。

実際に試してみる

例えば、 github.com/google/uuid を利用しているプログラムでローカルに落としてきたuuidを参照するようにしてみます。

元となるプログラムは以下です。

go.mod

main.go

実行結果

ローカルのuuidを参照するように変更する

ローカルの任意の場所にuuidをcloneしてきます。

今回は go mod edit -replace コマンドでローカルモジュールを参照するように変更します。

上記コマンドを実行するとgo.modが変更されます。
※手動で書き換えてもOKです
 go mod edit のhelpは  $ go help mod edit で確認できます。

この状態でローカルのuuidが参照されるようになりました。試しに uuid.NewString() の出力を変更してみます。

変更ファイル  uuid/version4.go 

変更前

変更後

実行結果

ローカル側のuuidが参照されていることがわかります。
これで手元でいろいろ試すことができます。

さいごに

いかがでしたでしょうか。replaceを使えば簡単にimportモジュールを変更できました。
replaceを使ったあとは元に戻すことを忘れないようにしましょう!

The following two tabs change content below.

竹内 和也

事業開発部 web application engineer
大学卒業後、Web系ベンチャー企業でシステムエンジニアを経て、2009年にアーティスへ入社。 システムエンジニアとして多くの大学・病院・企業・自社のwebシステム開発に携わる。 2020年より事業開発部として新規サービスの開発に従事している。 資格:LPIC3
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします