Golang 1.13を使用したGoCenterの活用法

Golang version 1.13が9月にリリースされたことはすでにご存知のことと思います。私たちもバージョン1.13で追加された新機能にワクワクしていて、ビルド時に影響するかもしれない変更点についてご理解いただければと考えています。特にGoCenterで追加された強力なGolang機能を使う実践方法を紹介したいと思います。

Go Modulesの急速な普及

GoがGolang 1.11をリリースしてからと言うもの、Goコミュニティはモジュールエコシステムの構築に大忙しです。開発者たちはGoCenterなどのプロキシを使い、Go Modulesをダウンロードして開発しています。

Golang 1.13ではGo Modulesがデフォルトでサポートされています。Goクライアントの新規インストールではGoogleがホスティングするプロキシがデフォルトで設定されていますが、GoCenterなどをGo Modulesのプロキシとして使用することができます。以下の点に関して知っておく必要があります:

  • GoCenterは今や260,000を超えるバージョン管理されたGo Modulesをホスティングし、急激に成長しています。
  • GoCenterはGoアプリケーションのビルド時間を高速化しています。
  • GoCenterは必要なモジュールを検索できる強力なUIを通してGo Modulesの豊富なデータを提供しています。
  • GoCenterはGolangを最新の状態に保ち、独自のイノベーションを提供しています。

Golang 1.13を使用したGoCenterの活用法

GoCenterを使ってGolang 1.13が最適に機能するために必要なことは以下の通りです。

GoCenter用のGOPROXY

GoCenterをバージョン対応のGo Modulesのプロキシとして使用するためにGOPROXY環境変数をGoCenterのURLに設定します:

$ export GOPROXY=https://gocenter.io

バージョン1.13をインストールしてGolangを初めて使うのであれば、GOPROXYの設定をデフォルトから上記の設定に変更する必要があります。GoCenterを既に使っていればGolang 1.13にバージョンアップしても既存の設定に影響がないため設定は不要です。

Golang 1.13の新機能を利用するとコンマ区切りで複数のGOPROXYプロキシを指定することができ、ソースからモジュールを直接ダウンロードするdirectモードも使用できます。ただし、GoCenterはGo Modulesを自動で使うように設定されているため、GoCenterをプロキシとして使う場合にはこれらの設定をする必要はありません。

DBチェックサムのサポート

Golangバージョン1.13からは go get を使用して、Googleがsum.golang.orgで管理する監査可能なデータベースのチェックサムを通してモジュールの認証を行います。バージョン1.13をインストールするとデフォルトでGOSUMDB環境変数にこのDBチェックサムのURLが設定されます。

GoCenterはsum.golang.orgをプロキシすることでビルドの高速化を図っています。GOPROXY にGoCenterを設定していれば他に何も変更する必要はありません。つまりGoCenterを介して既にモジュールは検証済みということです。

プライベートGo Modulesリポジトリ

GoCenterはGithubのようなパブリックソースリポジトリを介して共有されているGo Modulesをプロキシするためのものです。Golang 1.13ではプライベートリポジトリからモジュールの複数バージョンをダウンロードするためのプロキシやチェックサムの検証をバイパスする環境変数、とりわけGOPRIVATEを取り入れています。利用方法についてはGolangドキュメントを参照してください。

バージョン検証

バージョン1.13ではGo Modulesに対して正しいサフィックスを使用することが非常に重要です。goコマンドは要求されているバージョンの文字列に対して追加の検証を行い、モジュールがsemantic import versioningの規定に従っていない場合には go get は失敗します。そのためGolang 1.13以前で問題なくロードされていた疑似バージョンの設定は1.13では失敗する可能性があります。

Goをもっと楽しく

GoCenterの詳細およびGolang 1.13に関する質問や回答を参照するにはSlackチャンネル(英語版のみ)に参加してください。引き続きJFrog GoCenterを活用し、Go Modulesの開発者コミュニティを盛り上げていきませんか。そしてLiquid Software革命に参加して一緒にスピーディーな開発を行うことができれば幸いです。