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つのモジュールに依存関係があり、entrypoint
はstorage
モジュールを利用しようとしているとします。何もしないと、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.