😶‍🌫️

Go Modules:基本の使い方と活用方法

2025/02/22に公開

はじめに

Go Modulesは、Go言語でプロジェクトを管理するための依存関係管理ツールです。
従来の$GOPATHに依存せず、プロジェクトごとに依存関係を管理することができ、モダンなGo開発には欠かせない機能となっています。


Go Modulesとは?

Go Modulesは、以下の特徴を持つ依存関係管理ツールです。

  • プロジェクトごとに依存関係を管理できる。
  • $GOPATHに依存せずに、任意のディレクトリで開発が可能。
  • バージョン管理が簡単に行える。
  • 他の開発者と同じ環境を再現しやすい。

Go Modulesのメリット

  • プロジェクトごとに依存関係を分離できるため、環境の競合を防げる。
  • 任意のディレクトリで Go プロジェクトを作成 / 管理できる。
  • バージョン管理が容易になり、同じバージョンの依存関係を再現できる。

Go Modules の基本コマンド

1. プロジェクトの初期化

新しいGo プロジェクトを作成する場合、go mod initを使って Go Modulesを初期化します。

mkdir myproject
cd myproject
go mod init github.com/username/myproject
  • github.com/username/myprojectは、モジュール名であり、一般的に GitHubのリポジトリパスを指定します。
  • 実行後、go.modファイルが生成されます。

2. 依存関係の追加

Go Modulesでは、外部パッケージをインポートすると自動で依存関係が追加されます。

例として、github.com/gorilla/mux を使ってみます。

package main

import (
    "fmt"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Hello, Go Modules!")
    })

    http.ListenAndServe(":8080", r)
}

依存関係を追加するには、以下のコマンドを実行します。

go mod tidy
  • go mod tidyは、go.modとgo.sumを自動的に更新します。
  • go.sumファイルには、依存関係のチェックサムが記録され、依存関係の一貫性が保たれます。

3. 依存関係の更新

依存関係を最新バージョンに更新したい場合は、以下のコマンドを実行します。

go get -u github.com/gorilla/mux
  • -uフラグを付けることで、マイナーバージョンの更新を行います。
  • 最新のパッチバージョンのみを取得する場合は、-u=patchを指定します。
go get -u=patch github.com/gorilla/mux

4. 依存関係の削除

不要になった依存関係は、自動的には削除されません。
以下のコマンドを実行することで、使われていないパッケージを削除できます。

go mod tidy
  • go mod tidyは、現在のプロジェクトで使用されていない依存関係を削除し、go.modとgo.sumを整理します。

Go Modules のバージョン管理

1. 特定のバージョンを指定する

依存関係のバージョンを指定してインストールすることも可能です。

go get github.com/gorilla/mux@v1.8.0
  • @v1.8.0のように、バージョンタグを指定します。
  • 特定のコミットを指定することもできます。
go get github.com/gorilla/mux@<commit-hash>

2. バージョンの確認

依存関係のバージョンを確認するには、以下のコマンドを使用します。

go list -m all
  • go list -m allは、go.modに記載されているすべての依存関係とそのバージョンを表示します。

プロジェクトの実行とビルド

1. 実行

Go Modulesを使ったプロジェクトは、以下のコマンドで実行できます。

go run main.go

2. ビルド

バイナリを生成するには、go buildを使用します。

go build -o myapp main.go
./myapp
  • -o オプションで、生成するバイナリの名前を指定します。

まとめ

項目 説明
Go Modules プロジェクトごとの依存関係管理ツール。$GOPATH に依存しない。
go mod init 新しいプロジェクトを初期化する。
go mod tidy 依存関係の追加、削除、および整理を行う。
go get 依存関係のインストール・更新・バージョン指定が可能。

依存関係の管理が楽になり、モダンな Go 開発が可能になります。

Discussion