Go Modulesの作成者とユーザをGoCenterを使ってつなげるには

Go Modules

Go ModulesがGolangの一部としてすでに認知されています。JFrog GoCenterでバージョン管理されている300,000以上のGo ModulesがGoコミュニティに受け入れられ、パッケージ管理されていることからも明白です。現在のデフォルトバージョンであるGolang 1.13のモジュールを使って一般公開されているモジュールの数は急速に増加しています。そしてその中には皆様が提供しているものがあるかもしれません。

しかしGo ModulesプロジェクトをGoコミュニティで共有したらどうなると思いますか?他のユーザにも使ってもらえるようになるでしょうか?もちろんプロジェクトがtestifylogrusくらい便利という評価を受けて人気になって欲しいと願っていますが、どうやってそれを知ることができるのでしょうか?

Go Modulesの作成者はモジュールの使用者や人気のあるバージョン、使用されているドメインなどの情報があるとより良い判断を下すことができます。作成者同士でテスト方法などを改善していくこともできますし、モジュールの利用者と共に新機能やデザインを議論していくこともできます。

こういった活動が起きてくることこそ、私たちがGoCenterのパブリックGOPROXYのUIをデザインする際にいつも心がけていることです。GoCenterを使用してCentralリポジトリにあるバージョン管理されたモジュールを検索し、使っていくことでさらに詳しく理解できるようになります。

Goパッケージの”Used By”を使用

GoCenterでモジュールを検索し、モジュールページでUsed Byタブをクリックします。

GoCenter Used By Tab>

GoCenter UI上にモジュールを使用するGoCenterリポジトリ内の全モジュールが表示されます。

GoCenterからダウンロード数をカウント

Used Byタブを見ることで、モジュールが他のモジュールによってどのくらい広く使用されているかがわかります。これが一体どのくらいの影響があるか知りたい場合、Metricsタブをクリックすると選択したモジュールが週毎にどのくらいダウンロードされているかなど詳細な統計情報を見ることができます。

GoCenter Metrics Tab

使用方法

では次にGoCenterがこれらの関係をどうやって識別しているかについて説明しましょう。一般的にバージョン間モジュールの依存関係を構築していくのは簡単なことではありません。Used Byグラフは依存関係と継承の両方を表示します。

既にGo Modulesを採用しているプロジェクトの場合、バージョンの依存関係はgo.modファイルで固定しているのでバージョン間の依存関係を構築することは簡単です。しかしGolangで作成されたオープンソースプロジェクトの多くは簡単ではありません。

GlideやGodepなどの依存関係マネジャーを採用したプロジェクトの場合、バージョン間モジュールの依存関係はgo mod intコマンドを使ってgo.modファイルに生成し確認することができます。

GoCenter go.mod file

上記の例ではKubernatesのHelmパッケージマネジャーはGo Modulesをまだ採用していませんが、depを使用しているのでGoCenterはgo mod intコマンドを使ってバージョン間モジュールの依存関係を作成します。

Golangで書かれたオープンソースプロジェクトが依存関係マネジャーを使用していない場合、固定バージョンがないので対処方法が難しいところです。その場合にはGoCenterがgo mod tidyコマンドを走らせてGoCenterがこのコマンドを実行した時のタイムスタンプとともに依存関係バージョンをキャプチャするという方法があります。タイムスタンプはGoCenterがバージョン間モジュールの依存関係を変更した際に追跡するのに役立ちます。GoCenterは次の例に示すようにMod Fileタブで表示します:

GoCenter go.mod file

GoCenterのパブリックGOPROXYの威力

GoCenterはGoアプリのビルド高速化に役立つオープンソースGo Modules用のパブリックGOPROXYです。さらにGo Modules間とその依存関係を把握できる強力なツールでもあります。もし皆様がGo Modulesの作成者であれば、誰が自分のプロジェクトを使用しているかという情報を知ることでプロジェクトに役立たせることができ、Goコミュニティの継続的な改善に貢献することもできます。ぜひGoCenterを活用ください。