Skip to main content

Get full access to 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス and 60K+ other titles, with a free 10-day trial of O'Reilly.

There are also live events, courses curated by job role, and more.

6.5 Go Modulesの実践的な使い方

6.5.1 1リポジトリ、マルチモジュール構成

Go Modulesでは、1つのリポジトリ中に複数のモジュールが存在する、いわゆる「モノレポ」の構成を選択できます。次のディレクトリ構成には2つの go.mod が存在していて、それぞれ別のモジュールとして判断されます。

.
├── entrypoint
│   ├── go.mod (github.com/myorg/app/entrypoint)
│   └── main.go
└── storage    (github.com/myorg/app/storage)
    ├── go.mod
    └── storage.go

一般的には1リポジトリ1モジュールの構成がシンプルで望ましい形ですが、アプリケーションのシステム構成によっては、リポジトリ間に依存関係が存在することもあります。ある変更が複数のリポジトリに波及して、それぞれのリポジトリにプルリクエストを発行したり、マージのタイミングに注意したりする機会が増えてきたら1、複数のリポジトリを1つに集めたマルチモジュール構成への移行を検討する頃合いです。

2つのモジュールに依存関係があり、entrypointstorageモジュールを利用しようとしているとします。何もしないと、entrypointはローカルに依存モジュールがあるのに、リポジトリから新規にダウンロードしてそちらを利用しようとします。せっかくモノレポ構成にしても、一度pushしないとビルドできなくなってしまいます。幸い、Go Modulesは、GitHubのようなバージョン管理システムのリポジトリにあるモジュールを参照するだけでなく、ローカルのモジュールも直接参照できます。上記のように2つのモジュールで構成されている例について考えてみます。 ...

Get 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.

Don’t leave empty-handed

Get Mark Richards’s Software Architecture Patterns ebook to better understand how to design components—and how they should interact.

It’s yours, free.

Get it now
Cover of Software Architecture Patterns

Check it out now on O’Reilly

Dive in for free with a 10-day trial of the O’Reilly learning platform—then explore all the other resources our members count on to build skills and solve problems every day.

Start your free trial Become a member now