1. Home
  2. Golang
  3. GuideToBecomingGoDeveloper
  4. GoingDeeper
  5. モジュール(Modules) - Golang learning step 2-12

モジュール(Modules) - Golang learning step 2-12

  • 公開日
  • カテゴリ:GoingDeeper
  • タグ:Golang,roadmap.sh,学習メモ
モジュール(Modules) - Golang learning step 2-12

roadmap.sh > Go > Going Deeper > Modules の学習を進めていきます。

※ 学習メモとしての記録ですが、後にこのセクションを学ぶ道しるべとなるよう、ですます調で記載しています。

contents

  1. 開発環境
  2. 参考 URL
  3. モジュール(Modules)
  4. モジュールの基本要素
    1. 1. go.mod ファイル
    2. 2. go.sum ファイル
  5. モジュールを利用する基本的なコマンド
    1. 1. モジュールの初期化
    2. 2. 依存関係の追加
    3. 3. 依存関係の整理
    4. 4. モジュールのアップデート
  6. モジュールのメリット
  7. 注意点
  8. プライベートモジュール
    1. プライベートモジュールの使用例

開発環境

  • チップ: Apple M2 Pro
  • OS: macOS Sonoma
  • go version: go1.23.2 darwin/arm64

参考 URL

モジュール(Modules)

モジュールは、Go のコードをまとめた単位で、依存関係を記述する go.mod ファイルによって管理されます。モジュールを使用することで、プロジェクトの依存パッケージやそのバージョンを正確に追跡し、他の開発者と環境を共有できます。

モジュールの基本要素

1. go.mod ファイル

go.mod はモジュールのルートに存在し、以下の情報を管理します。

  • モジュール名(通常はリポジトリのパス)
  • Go のバージョン
  • 依存するパッケージとそのバージョン
module example.com/my-module

go 1.23

require (
    github.com/gin-gonic/gin v1.9.0
    golang.org/x/tools v0.7.0
)

2. go.sum ファイル

go.sum は依存パッケージの正確なバージョンとハッシュを記録します。これにより、依存関係の整合性が保証されるだけでなく、改ざんされたパッケージの検出にも役立ちます。

github.com/gin-gonic/gin v1.9.0 h1:abc123...
github.com/gin-gonic/gin v1.9.0/go.mod h1:def456...

モジュールを利用する基本的なコマンド

1. モジュールの初期化

モジュールを新規作成するには、go mod init を使用します。

go mod init example.com/my-module

2. 依存関係の追加

新しいパッケージをインストールする際は、go get を使います。

# 最新バージョンを追加
go get github.com/gin-gonic/gin

# 特定のバージョンを指定
go get github.com/gin-gonic/gin@v1.9.0

# メジャーバージョンの最新を指定
go get github.com/gin-gonic/gin@v1

実行後、go.mod と go.sum が更新されます。

3. 依存関係の整理

依存関係を整理し、不要なパッケージを削除するには、go mod tidy を使用します。

go mod tidy

4. モジュールのアップデート

特定のパッケージを最新バージョンに更新するには、go get を使います。

go get github.com/gin-gonic/gin@latest

モジュールのメリット

  1. 依存関係の管理が容易
    • パッケージとそのバージョンを go.mod で一元管理。
  2. 再現性の高いビルド
    • go.sum による正確なバージョン管理で、異なる環境でも同じ依存関係を再現可能。
  3. 不要なパッケージの自動削除
    • go getgo mod tidy によって不要なパッケージを整理。
  4. バージョン管理システムからの独立性
    • モジュールパス(例: example.com/my-module)を使用することで、GitHub 以外のホスティングサービス(例: GitLab)に移動しても、一貫して依存関係を参照できます。

注意点

  • Go 1.16 以降では、モジュールモードがデフォルトになっており、すべてのプロジェクトがモジュールとして扱われます。
  • モジュールを使わずに従来の GOPATH モードで開発することは推奨されません。
  • プライベートモジュールを使用する場合は、GOPRIVATE 環境変数の設定が必要になることがあります。

プライベートモジュール

プライベートモジュールは、パブリックにアクセスできないリポジトリ(社内 GitLab やプライベートな GitHub リポジトリなど)にホストされているGoモジュールのことです。以下のような場合に使用されます。

  • 企業の内部ライブラリ
  • 非公開のプロジェクトで共有されるコード
  • 有料または制限付きの配布が必要なモジュール

プライベートモジュールの使用例

1. モジュールの宣言

module gitlab.mycompany.com/team/project

go 1.21

require (
    gitlab.mycompany.com/internal/logger v1.2.0
    github.com/mycompany/private-lib v0.1.0
)

2. プライベートモジュールのインポート

package main

import (
    "gitlab.mycompany.com/internal/logger"   // 社内のプライベートモジュール
    "github.com/mycompany/private-lib/utils" // 外部のプライベートモジュール
)

func main() {
    logger.Init() 
    utils.DoSomething()
}

まとめ

  • Go のモジュールは依存関係を管理する仕組み
  • モジュールの管理は go.mod と go.sum ファイルによって実現
  • go mod init でモジュールを初期化
  • go get で依存パッケージを追加または更新
  • go mod tidy で依存関係の整理が可能
  • go.sum により環境間で再現性の高いビルドを実現
  • プライベートモジュールは GOPRIVATE 設定で管理
  • Go 1.16 以降、モジュールモードがデフォルト


[Next] Step 2-13: Marshalling & Unmarshalling JSON

[Prev] Step 2-11: ポインタ(Pointers)

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級