ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
go mod tidyは、Go言語のモジュール管理において、ソースコードが実際に使用している依存関係に合わせてgo.modファイルとgo.sumファイルを整理するコマンドです。コード内のimport文を走査し、必要なのに記載されていない依存(require)を追加し、どこからも使われていない不要な依存を削除して、go.sumのチェックサムを過不足のない状態に更新します。
| この記事の要点 |
|---|
|
go mod tidyとは
go mod tidyは、Goの公式ツールチェーンに含まれるgo modサブコマンドの1つで、モジュールの依存定義を「ソースコードの実態」と一致させるためのコマンドです。具体的には、モジュール内のすべてのパッケージ(テストファイルを含む)のimportを解析し、次の3つの整理を行います。
- 不足している依存の追加: コードが参照しているのに
go.modのrequireに記載されていないモジュールを追加します。 - 不要な依存の削除:
requireに書かれているが、ビルドにもテストにも使われていないモジュールを削除します。 - go.sumの整理: ビルドに必要なチェックサムを追加し、不要になったエントリを取り除いて
go.sumを更新します。
結果として、go.modとgo.sumは「過不足のない、再現性のある依存リスト」になります。手作業でgo.modを編集するよりも、このコマンドに整理を任せるのが一般的な運用とされています。
前提となるGo Modulesの概要
go mod tidyを理解するには、Goの依存管理の仕組みであるGo Modules(モジュール)の基本を押さえておくと役立ちます。1つのモジュールは、ルートに置かれたgo.modファイルによって定義されます。
| ファイル | 役割 |
|---|---|
| go.mod | モジュール名(モジュールパス)、対応するGoのバージョン、依存モジュールとそのバージョン(require)などを定義するファイル。依存の「定義」を担います。 |
| go.sum | 各依存モジュールの内容に対するチェックサム(ハッシュ値)を記録するファイル。取得したモジュールが改ざんされていないかを検証する用途で使われます。依存の「検証」を担います。 |
典型的なgo.modは、おおむね次のような内容になります(バージョン番号は一例です)。
|
module example.com/myapp go 1.22 require ( github.com/some/dependency v1.4.0 ) |
ソースコードに新しいimportを書いたり、逆に使わなくなったimportを消したりすると、このgo.mod/go.sumと実態にズレが生じることがあります。そのズレを解消するのがgo mod tidyの主な役目です。
使い方と実行タイミング
基本的な使い方は単純で、go.modが存在するモジュールのルートディレクトリで、次のコマンドを実行します。
|
go mod tidy |
処理の内容を詳しく確認したい場合は、-vフラグを付けると、削除された依存などの情報が標準エラー出力に表示されます。
|
go mod tidy -v |
実行する代表的なタイミングとしては、次のような場面が挙げられます。
- 新しいパッケージを
importしてコードを書いた後(必要な依存をgo.modに反映させる)。 - 不要になった
importを削除した後(使われなくなった依存を整理する)。 - 依存のバージョンを変更した後や、
go getで依存を更新した後。 - 変更をコミットする前(整理された
go.mod/go.sumを一緒にコミットしておくと、他の開発者や継続的インテグレーション環境でも同じ状態を再現しやすくなります)。
多くのプロジェクトでは、go.modとgo.sumをバージョン管理に含めることが推奨されています。go mod tidyを実行した結果これらのファイルに差分が出た場合は、その差分も合わせてコミットするのが一般的な運用です。
go mod tidyを実行すると何が起きるか
コマンドを実行すると、おおむね次のような変更がgo.modとgo.sumに対して行われます。
- 必要なrequireの追加: コードが使っているのに記載されていなかった依存モジュールが
requireに追加されます。間接的に必要となる依存(推移的依存)も解決されます。 - 不要なrequireの削除: どのパッケージからも使われていない依存が
requireから取り除かれます。 - go.sumの更新: 追加された依存のチェックサムが書き込まれ、不要になったエントリは削除されます。これにより
go.sumが現状の依存と一致した状態になります。
なお、テスト専用に必要なモジュールなど、直接のrequireとして残しつつ間接依存であることを示すために、go mod tidyが一部の依存に// indirectというコメントを付けてgo.modに記載することがあります。これは正常な動作で、整理の結果として現れるものです。
典型的な作業の流れの例
実際の開発では、go mod tidyは単独で使うよりも、他のコマンドと組み合わせて一連の流れの中で実行することが多くなります。たとえば、新しい外部パッケージを使い始めるときは、次のような手順が考えられます。
|
# 1. コード内で新しいパッケージを import して保存する # 2. 依存を go.mod に反映し、整理する go mod tidy # 3. ビルドやテストで動作を確認する go build ./... go test ./... |
このように、importを変更したらgo mod tidyで依存を整え、その上でビルドやテストを回す、という順番にしておくと、依存の過不足によるビルドエラーに悩まされにくくなります。継続的インテグレーション(CI)の中でgo mod tidyを実行し、その結果go.modやgo.sumに差分が出ないかをチェックして、整理漏れを検出する運用が採用されることもあります。差分が出た場合は整理が済んでいないと判断できるため、コミット前の確認手段として役立ちます。
関連コマンドの比較
go mod tidyは依存管理コマンド群の1つです。混同しやすい近いコマンドとの違いを整理すると、次のようになります。
| コマンド | 主な役割 | go.modの書き換え |
|---|---|---|
| go mod tidy | コードの実態に合わせて依存を追加・削除し、go.mod/go.sumを整理する。 |
あり |
| go mod download | go.modに記載された依存モジュールをローカルのモジュールキャッシュにダウンロードする。 |
原則なし |
| go mod verify | ダウンロード済みの依存がgo.sumのチェックサムと一致し、改ざんされていないかを検証する。 |
なし |
| go get | 指定したモジュールを依存として追加したり、バージョンを更新したりする。go.modのrequireを書き換える。 |
あり |
大まかには、go getが「特定の依存を入れる・上げる」ための操作であるのに対し、go mod tidyは「モジュール全体の依存リストをコードに合わせて整える」ための操作、という役割分担で捉えると整理しやすいでしょう。
落とし穴・注意点
| ネットワーク接続が前提になりやすい |
|---|
go mod tidyは不足している依存の解決のためにモジュール情報を取得することがあり、その場合はネットワーク接続、またはモジュールキャッシュやモジュールプロキシへのアクセスが必要です。オフライン環境では、必要なモジュールがキャッシュに無いと失敗することがあります。 |
| go.modのバージョン指定で挙動が変わる |
|---|
go.modのgoディレクティブに記載されたバージョンによって、go mod tidyが生成するgo.mod/go.sumの内容や、間接依存の記載方法が異なる場合があります。互換性を保つために特定の挙動で整理したい場合は、-compatフラグで対象バージョンを指定できます。チーム内では使用するGoのバージョンをそろえておくと、不要な差分が出にくくなります。 |
| 予期しない差分がコミットに混ざることがある |
|---|
手元と他の開発者で実行結果が食い違うと、go.modやgo.sumに細かな差分が繰り返し発生することがあります。実行後は差分の内容を確認し、意図しない依存の追加・削除が含まれていないかを確かめてからコミットすると安全です。 |
よくある質問(FAQ)
Q1. go mod tidyは依存を勝手にアップグレードしますか?
A. go mod tidyの主目的は依存の「整理」であり、すでに解決済みのバージョンを最新へ引き上げるための操作ではありません。バージョンを更新したい場合はgo getなどを使うのが一般的です。ただし、不足している依存を解決する過程で必要なバージョンが選ばれることはあるため、実行後の差分は確認しておくとよいでしょう。
Q2. 「go.sumが不足している」というエラーが出たときに役立ちますか?
A. go.sumに必要なチェックサムが足りない状態でビルドが失敗する場合、go mod tidyを実行すると不足分が追加され、解消されることがあります。go.sumとgo.modの整合をとる手段として有効です。
Q3. go mod tidyとgo buildはどちらを先に実行すべきですか?
A. 一般的には、importを変更した後にまずgo mod tidyで依存を整理し、その上でgo buildやgo testを実行する流れがわかりやすい運用です。これにより、ビルド時に依存の過不足で戸惑う場面を減らせます。
Q4. go mod tidyで依存が消えてしまいました。問題はありますか?
A. go mod tidyがある依存をrequireから削除したということは、現在のコードのどこからもその依存が使われていないと判定されたことを意味します。意図せず削除された場合は、対象のパッケージを実際にimportしているコードがあるか、あるいはテストファイルなど特定の条件下でのみ使われていないかを確認するとよいでしょう。ビルドタグなどによって特定の環境でのみ参照されるコードがある場合、その環境を考慮しないと依存が外れて見えることがあります。
Q5. go.modを手で編集するのと、go mod tidyに任せるのはどちらがよいですか?
A. 細かな調整のためにgo.modを直接編集することもできますが、requireの過不足やgo.sumの整合まで含めて正しく保つのは手作業では負担が大きくなりがちです。日常的な依存の整理はgo mod tidyのようなコマンドに任せ、必要なときだけ手で調整するという使い分けが扱いやすい方法です。
まとめ
go mod tidyは、Goのソースコードが実際に使っている依存に合わせてgo.modとgo.sumを整理する、Go Modules運用の基本コマンドです。不足している依存を追加し、不要な依存を削除し、チェックサムを更新することで、依存リストを過不足のない再現性のある状態に保ちます。importの追加・削除を行った後やコミット前に実行する習慣をつけておくと、依存まわりの管理がシンプルになります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- go mod init
- go mod tidy
- go mod download
- go build
- go_package
- protoc
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?