Go モジュールを管理する

このページでは、Artifact Registry に保存されているパッケージ化された Go モジュールを管理する方法について説明します。

準備

  1. ターゲット リポジトリが存在しない場合は、新しいリポジトリを作成します。リポジトリ形式として Go を選択します。
  2. リポジトリに必要な権限が付与されていることを確認します。
  3. (省略可)gcloud コマンドのデフォルトを構成します。
  4. バージョン 1.15 以降の Go をインストールします。
  5. package-go-module gcloud CLI アドオンをインストールします。

    gcloud components install package-go-module
  6. Artifact Registry で認証するように Go を構成します。

必要なロール

モジュールの管理に必要な権限を取得するには、リポジトリに対する次の IAM ロールの付与を管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

モジュールをアップロードする

リポジトリ モード: 標準

モジュールをパッケージ化してリポジトリにアップロードするには、次のコマンドを実行します。

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

以下を置き換えます。

  • PROJECT は、Google Cloud プロジェクト ID に置き換えます。
  • REPOSITORY は、パッケージが保存されるリポジトリの名前に置き換えます。
  • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションに置き換えます。
  • MODULE_PATH は、モジュールパスに置き換えます。例: example.com/foo。詳細については、Go モジュール リファレンスをご覧ください。
  • VERSION は、vX.Y.Z 形式のモジュールのセマンティック バージョンに置き換えます。ここで、X はメジャー バージョン、Y はマイナー バージョン、Z はパッチ バージョンです。
  • SOURCE_LOCATION は、Go モジュールのルート ディレクトリのパスに置き換えます。--source フラグを省略すると、デフォルトは現在のディレクトリになります。

モジュールが Artifact Registry にアップロードされます。

Go モジュールの作成方法について詳しくは、こちらのチュートリアルをご覧ください。

新しいモジュール バージョンをアップロードする

リポジトリ モード: 標準

デフォルト値が構成されているときに、新しいバージョンのモジュールをデフォルトのプロジェクト、リポジトリ、ロケーションにアップロードするには、新しいバージョン番号を指定して次のコマンドを実行します。

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION \
      --source=SOURCE_LOCATION

VERSION は、更新されたモジュールのバージョンに置き換えます。たとえば、パスが example.com/foo のモジュールのバージョン 0.1.1 をアップロードするには、次のコマンドを実行します。

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v0.1.1 \
      --source=SOURCE_LOCATION

モジュールをプレリリース バージョンとしてマークするには、VERSION の後にダッシュを追加し、モジュールのプレリリース ID を追加します。

  gcloud artifacts go upload \
      --module-path=MODULE_PATH \
      --version=VERSION-PRE_RELEASE_IDENTIFIERS \
      --source=SOURCE_LOCATION

PRE_RELEASE_IDENTIFIERS は、ドットで区切られた ASCII 英数字とハイフンに置き換えます。たとえば、パス example.com/foo モジュールで alpha.x.12m.5 によって識別されるモジュールのプレリリースをアップロードするには、次のコマンドを実行します。

  gcloud artifacts go upload \
      --module-path=example.com/foo \
      --version=v1.0.0-alpha.x.12m.5 \
      --source=SOURCE_LOCATION

新しいメジャー バージョンをアップロードする

リポジトリ モード: 標準

メジャー バージョンには、以前のバージョンとの下位互換性がありません。互換性を破る変更をインポートしないようにするには、v1 以降のメジャー バージョンに、以前のバージョンとは異なるモジュール パスを設定する必要があります。v2 から、メジャー バージョンはモジュールパスの末尾に追加されます。

たとえば、example.com/foov2.0.0 のモジュールパスは example.com/foo/v2 です。

v1 より後のメジャー バージョンは、メジャー バージョンのサフィックスが付いた名前の別のディレクトリに開発することをおすすめします。

デフォルト値が構成されているときに、パスが example.com/foo であるモジュールの新しいメジャー バージョン 2.0.0 をデフォルトのプロジェクト、リポジトリ、ロケーションにアップロードするには、次のようにします。

  gcloud artifacts go upload --module-path=example.com/foo/v2 --version=v2.0.0

モジュールを一覧表示する

リポジトリ モード: 標準

次のコマンドを実行して、デフォルト値が構成されているときに、デフォルトのプロジェクト、リポジトリ、ロケーションにあるアップロードされた Go モジュールを検査します。

  gcloud artifacts packages list

出力は次のようになります。

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

モジュール バージョンの詳細を表示する

リポジトリ モード: 標準

デフォルト値が構成されているときに、次のコマンドを実行して、デフォルトのプロジェクト、リポジトリ、ロケーションにあるモジュールのバージョンを表示します。

  gcloud artifacts versions list --package=MODULE_PATH

出力は次のようになります。

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

モジュールを依存関係として使用する

リポジトリ モード: 標準

Artifact Registry に保存されているモジュールをインポートするには、Artifact Registry から依存関係を検索し、チェックサム データベースをバイパスするように Go に指示する必要があります。Go の認証を設定するの手順に沿って、認証と Go 環境を設定します。

  1. Artifact Registry に対する認証に有効期間の短い認証情報を使用している場合は、次のコマンドを実行して OAuth トークンを更新する必要があります。

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@latest refresh
    
  2. モジュールにまだ go.mod ファイルがない場合は、ディレクトリをモジュールのフォルダに変更し、go mod init を実行してパッケージの go.mod ファイルを作成します。

      go mod init MODULE_PATH
    

    MODULE_PATH は、Artifact Registry に保存されているモジュールのモジュールパスに置き換えます。詳細については、Go モジュール リファレンスをご覧ください。

  3. Artifact Registry に保存されているモジュールのバージョンを必須にするには、go.mod ファイルを編集して次のように設定します。

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    以下を置き換えます。

    • example.com/foo は、必要なモジュールのモジュールパスです
    • v0.1.0 は Artifact Registry に保存されているバージョンです
  4. モジュールパスを通常どおり main.go ファイルの import セクションに含めます。

    たとえば、Artifact Registry に保存されている、パスが example.com/foo のモジュールをインポートする場合、インポート セクションは次のようになります。

      
      package main
    
      import (
        foo "example.com/foo"
      )
    
      func main() {
    
        ...
    
      }
    
      
    
  5. go mod tidy を実行して依存関係をダウンロードします。

      go mod tidy
    
  6. モジュールを通常どおり実行します。

      go run .
    

    Artifact Registry に格納されているモジュールが依存関係としてダウンロードされ、使用されます。

パッケージ化された Go モジュールを削除する

リポジトリ モード: 標準

パッケージとそのすべてのバージョンを削除することや、特定のバージョンを削除することができます。

  • パッケージを削除すると、その操作は元に戻せません。

パッケージまたはパッケージのバージョンを削除する前に、そのパッケージの重要な依存関係を送信済み、または対処済みであることを確認してください。

パッケージを削除するには:

コンソール

  1. Google Cloud Console で [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストで、適切なリポジトリをクリックします。

    [パッケージ] ページに、リポジトリ内のパッケージが一覧表示されます。

  3. 削除するパッケージを選択します。

  4. [削除] をクリックします。

  5. 確認のダイアログ ボックスで、[削除] をクリックします。

gcloud

次のコマンドを実行します。

gcloud artifacts packages delete PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] [--async]

場所

  • PACKAGE は、リポジトリ内のイメージの名前です。
  • REPOSITORY はリポジトリの名前です。デフォルト リポジトリを構成した場合は、このフラグを省略してデフォルトを使用できます。
  • LOCATION は、 リージョンまたはマルチリージョンの ロケーションです。 このフラグを使用して、特定のロケーションのリポジトリを表示します。デフォルト ロケーションを構成している場合は、このフラグを省略してデフォルトを使用できます。
  • --async - 処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。

パッケージのバージョンを削除するには:

コンソール

  1. Google Cloud Console で [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. リポジトリ リストで、適切なリポジトリをクリックします。

    [パッケージ] ページに、リポジトリ内のパッケージが一覧表示されます。

  3. パッケージをクリックして、そのパッケージのバージョンを表示します。

  4. 削除するバージョンを指定します。

  5. [削除] をクリックします。

  6. 確認のダイアログ ボックスで、[削除] をクリックします。

gcloud

次のコマンドを実行します。

gcloud artifacts versions delete VERSION \
    --package=PACKAGE \
    [--repository=REPOSITORY] [--location=LOCATION] \
    [--async]

場所

  • PACKAGE は、リポジトリ内のイメージの名前です。
  • REPOSITORY はリポジトリの名前です。デフォルト リポジトリを構成した場合は、このフラグを省略してデフォルトを使用できます。
  • LOCATION は、 リージョンまたはマルチリージョンの ロケーションです。 このフラグを使用して、特定のロケーションのリポジトリを表示します。デフォルト ロケーションを構成している場合は、このフラグを省略してデフォルトを使用できます。
  • --async は処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。

次のステップ