🚿

Golangで不要なmoduleを削除したい

2021/12/31に公開

go mod でパッケージをインストールしたけど、削除したい。

結論

2ステップで削除できます。

  1. moduleをimportしているコードを削除。
  2. go mod tidyコマンドを実行。
Iterm
go mod tidy

https://go.dev/blog/using-go-modules#TOC_7

詳しく

go mod tidyコマンドでは、モジュール内の全てのパッケージのビルドタグの組み合わせを確認するので、安全に不要なモジュールを削除することができます。
一方で、gobuildやgotestでは、不要なパッケージの削除はされません。ビルド時に単一のパッケージのロードしか行われず、使用されていないパッケージを知ることができないためです。

検証

rsc.io/quote v1.5.2が重複して、requireされていることを確認。

$ go list -m all
example.com/hello
golang.org/x/text v0.3.0
rsc.io/quote v1.5.2
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.1
$ cat go.mod
module example.com/hello

go 1.12

require (
    golang.org/x/text v0.3.0 // indirect
    rsc.io/quote v1.5.2
    rsc.io/quote/v3 v3.0.0
    rsc.io/sampler v1.3.1 // indirect
)

go mod tidyで、rsc.io/quote v1.5.2が削除されることを確認。

After
$ go mod tidy
$ go list -m all
example.com/hello
golang.org/x/text v0.3.0
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.1
$ cat go.mod
module example.com/hello

go 1.12

require (
    golang.org/x/text v0.3.0 // indirect
    rsc.io/quote/v3 v3.1.0
    rsc.io/sampler v1.3.1 // indirect
)

番外編 go mod tidyで消したくない module がある場合

https://zenn.dev/kenghaya/articles/2f41736042e054

参考

https://go.dev/blog/using-go-modules#TOC_7
https://stackoverflow.com/questions/57186705/how-to-remove-an-installed-package-using-go-modules

Discussion