LoginSignup
13
3

More than 1 year has passed since last update.

go.mod、go.sumファイルは何なのか

Posted at

概要

個人的にGolangを学習している中でgo.modファイルとgo.sumファイルについて自分なりに調査をしてみたので備忘録として書き残します。

環境

今回はGoのバージョン1.20を想定してます。

go.modとは

go.modファイルは使用されるモジュールの依存関係を管理するファイルです。

プロジェクトを新規で始める際にgo mod init <モジュールパス>を実行すると作成されるファイルです

例えば、go mod init sample/app と入力すると下記のようなgo.mod ファイルが生成されます。

go.mod
module sample/app

go 1.20

今後モジュールをgo mod tidyなどでインストールする場合はここに記載されていきます。

試しにGinをインストールしてみましょう。

go.mod
module github.com/soicchi/chatapp_backend

go 1.20

require github.com/gin-gonic/gin v1.8.2

require (
	github.com/gin-contrib/sse v0.1.0 // indirect
	github.com/go-playground/locales v0.14.0 // indirect
	github.com/go-playground/universal-translator v0.18.0 // indirect
	github.com/go-playground/validator/v10 v10.11.1 // indirect
	github.com/goccy/go-json v0.9.11 // indirect
	github.com/json-iterator/go v1.1.12 // indirect
	github.com/leodido/go-urn v1.2.1 // indirect
	github.com/mattn/go-isatty v0.0.16 // indirect
	github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
	github.com/modern-go/reflect2 v1.0.2 // indirect
	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
	github.com/ugorji/go/codec v1.2.7 // indirect
	golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect
	golang.org/x/net v0.4.0 // indirect
	golang.org/x/sys v0.3.0 // indirect
	golang.org/x/text v0.5.0 // indirect
	google.golang.org/protobuf v1.28.1 // indirect
	gopkg.in/yaml.v2 v2.4.0 // indirect
)

上記のようにインストールされるモジュールとそのバージョンを管理してくれます。

go mod tidyとは(補足)

先ほど出てきたgo mod tidyコマンドは、ソースコードを参照してgo.modファイルに記載されているモジュールとの整合性を見てくれるコマンドです。したがってソースコードでimportされているのにもかかわらず、インストールされてない場合、つまりgo.mod に記載されていない場合に自動的に該当モジュールをインストールしてくれます。また、ソースコードで使用されていないモジュールがgo.modに記載されている場合、自動的に削除してくれます。そしてそれらの情報をgo.sumに記載します。(go.sumファイルの詳細については後述)

つまりまとめると下記のようになります。

  • go.modファイルがソースコードと整合性あるかを確認する
  • ビルドするために必要なモジュールを追加・削除する
  • 上記の情報をgo.sumへ記載する

go.sumとは

go.sumファイルは先ほど説明したgo.modファイル内のモジュールの依存関係をハッシュ化したものを保存するファイルです。このファイルはgo.modファイル同様にビルドする際に使用されます。なぜ、わざわざハッシュ化して保存するのでしょうか。確かにgo.sumファイルがなくてもビルドすることができます。それはgo.modとの整合性を図り、一貫性と信頼性を担保するために必要なようです。

ではファイルの中身はどのようになっているのでしょうか。

先ほどginをインストールした際のgo.sumファイルです。

go.sum
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.8.2 h1:UzKToD9/PoFj/V4rvlKqTRKnQYyz8Sc1MJlv4JHPtvY=
github.com/gin-gonic/gin v1.8.2/go.mod h1:qw5AYuDrzRTnhvusDsrov+fDIxp9Dleuu12h8nfB398=
.......省略

まとめ

今回はGoで開発する際の基礎的な部分のご説明でした。

普段インタプリタ言語しかやっていない私にとってこれからGoを学べることにワクワクしています。

これから日々の学びをアウトプットしていこうと思います!

最後まで読んでいただいてありがとうございました。

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3