Artifact Registry に Ruby gem を保存する

このクイックスタートでは、プライベート Artifact Registry Ruby リポジトリを設定し、パッケージ(gem とも呼ばれます)をそのリポジトリにアップロードする方法を示します。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Make sure that you have the following role or roles on the project: Artifact Registry Administrator

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [ アクセスを許可] をクリックします。
    4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

    5. [ロールを選択] リストでロールを選択します。
    6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
    7. [保存] をクリックします。
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Artifact Registry API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  9. Make sure that you have the following role or roles on the project: Artifact Registry Administrator

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      [IAM] に移動
    2. プロジェクトを選択します。
    3. [ アクセスを許可] をクリックします。
    4. [新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。

    5. [ロールを選択] リストでロールを選択します。
    6. 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
    7. [保存] をクリックします。
  10. Cloud Shell を起動する

    このクイックスタートでは、Google Cloudでホストされているリソースを管理するためのシェル環境である Cloud Shell を使用します。

    Cloud Shell には、Google Cloud CLI と Ruby がプリインストールされています。gcloud CLI は、 Google Cloudの主要なコマンドライン インターフェースを提供します。

    Cloud Shell を起動します。

    1. Google Cloud コンソールに移動します。

      Google Cloud コンソール

    2. Google Cloud コンソールのツールバーで、[Cloud Shell をアクティブにする] をクリックします。

    コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud コマンドを実行します。

    認証を構成する

    Ruby は、Artifact Registry リポジトリへのリクエストを認証する 2 つの方法をサポートしています。

    • RubyGems CLI: push リクエストと pull リクエストをサポートします。この CLI はデフォルトで Ruby で使用できます。RubyGems で認証する場合は、リポジトリに push リクエストまたは pull リクエストを行うたびに認証する必要があります。
    • Bundler CLI: pull リクエストをサポートします。Bundler は、パッケージとアップストリームを gemfile に保存します。これにより、ユーザーは個々のプルリクエストを認証することなく、複数のマシンで設定を標準化できます。ただし、Bundler に対して認証情報を再認証する必要がある場合があります。

      Bundler CLI をインストールするには、gem install bundler と入力します。

    RubyGems CLI で認証する

    RubyGems CLI は、OAuth2 トークンを使用してリクエストを認証します。OAuth2 トークンを Artifact Registry リポジトリへの呼び出しに渡すには、まずトークンを生成し、リクエストを行うときにリポジトリのアドレスとともに渡す必要があります。トークンの有効期間は 1 時間で、1 時間ごとに更新する必要があります。

    pull リクエストを認証する

    Google Cloud CLI コマンドラインで pull リクエストを認証するか、.gemrc ファイルを更新します。

    コマンドラインで pull リクエストを認証する

    プルリクエスト内の最新バージョンの gem に対して認証を行うには、次のコマンドを実行します。

    export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    gem install GEM_NAME --source https://$GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
    

    特定の Gem バージョンで認証するには、gem install コマンドに -v GEM_VERSION を追加します。

    ここで

    • GEM_NAME は、リクエストが行われた Gem の名前です。
    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
    • PROJECT は、リポジトリを含むプロジェクトの ID です。
    • REPOSITORY はリポジトリの ID です。

    .gemrc ファイルで認証する

    次のコードを追加して、プルリクエストでソースに対する認証を行うように、グローバルまたはプロジェクト固有の /.gemrc ファイルを構成できます。

    # File: ~/.gemrc
    
    # Use the GEM_TOKEN retrieved from export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    
    <...>
    :sources:
        - https://GEM_TOKEN@LOCATION-ruby.pkg.dev/PROJECT/REPO/
    <...>
    

    /.gemrc ファイルで定義されたソースを使用して gem をインストールするには、次のコマンドを実行します。

    gem install GEM_NAME
    

    プッシュ リクエストを認証する

    プッシュ リクエストを認証するには、Google Cloud CLI コマンドラインを使用するか、認証情報ファイルを更新します。

    コマンドラインで push リクエストを認証する

    プッシュ リクエストを認証するには、次のコマンドを実行します。

    export GEM_HOST_API_KEY="Bearer $(gcloud auth print-access-token)"
    gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
    

    ここで

    • GEM_NAME は、リクエストが行われた Gem の名前です。
    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
    • PROJECT は、リポジトリを含むプロジェクトの ID です。
    • REPOSITORY はリポジトリの ID です。

    認証情報ファイルでプッシュ リクエストを認証する

    gem コマンドライン ツールは、~/.gem/credentials ファイルを使用して、gem の push と pull の API キーを保存します。プッシュ リクエストでソースに対して認証を行うように認証情報ファイルを構成する手順は次のとおりです。

    1. 次のコマンドを実行して、OAuth2 アクセス トークンを生成します。

      gcloud auth print-access-token

      このトークンは、Artifact Registry の API キーとして機能します。

    2. 認証情報ファイルを更新します。

      1. ~/.gem/credentials を開き、リポジトリの行を追加します。キーはリポジトリの URL で、値は Bearer の後にトークンが続きます。

        :rubygems_api_key: RUBYGEMS_ORG_KEY
        https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY: Bearer OAUTH_TOKEN
        

        ここで

        • RUBYGEMS_ORG_KEYRubyGems.org の API キーです。
        • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
        • PROJECT は、リポジトリを含むプロジェクトの ID です。
        • REPOSITORY はリポジトリの ID です。
        • OAUTH_TOKEN は OAuth2 アクセス トークンです。
      2. ジェムをプッシュします。認証情報ファイルでキーをすでに定義しているため、GEM_HOST_API_KEY を設定する必要はありません。

        gem push GEM_NAME --host https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY
        

    Bundler で認証する

    Ruby の Bundler は、1 つ以上の gem にわたってアプリケーションの依存関係を管理します。Bundler を設定する手順は次のとおりです。

    1. gemfile にリポジトリのアドレスを source として追加します。

      # Gemfile
      # <...>
      source "https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
      
    2. bundle config を使用してリポジトリに対して認証します。

      export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
      export HOST="https://LOCATION-ruby.pkg.dev/PROJECT/REPOSITORY"
      bundle config $HOST $GEM_TOKEN
      

    ここで

    • LOCATION は、リポジトリのリージョンまたはマルチリージョンのロケーションです。
    • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
    • REPOSITORY はリポジトリの ID です。デフォルトの Artifact Registry リポジトリを構成した場合、このフラグがコマンドから省略されると使用されます。

    リモート リポジトリへの再認証が必要になることがあります。この場合は、ステップ 2 と同じ認証コマンドを実行します。

    Bundler の構成の詳細については、bundler.io のドキュメントの Gemfiles をご覧ください。

    認証方法の詳細については、Ruby gem リポジトリ用に Artifact Registry への認証を構成するをご覧ください。

    リポジトリを作成する

    gem のリポジトリを作成します。

    1. 次のコマンドを実行して、現在のプロジェクトでロケーション us-west1quickstart-ruby-repo という新しい Ruby gem リポジトリを作成します。

      gcloud artifacts repositories create quickstart-ruby-repo \
          --repository-format=ruby \
          --location=us-west1 \
          --description="Ruby gem repository"
      
    2. 次のコマンドを実行して、リポジトリが作成されたことを確認します。

      gcloud artifacts repositories list
      
    3. gcloud コマンドを簡素化するには、デフォルトのリポジトリを quickstart-ruby-repo に、デフォルトのロケーションを us-west1 に設定します。デフォルト値を設定すると、gcloud コマンドでリポジトリまたはロケーションが必要な場合でも指定の必要はありません。

      リポジトリを設定するには、次のコマンドを実行します。

      gcloud config set artifacts/repository quickstart-ruby-repo
      

      ロケーションを設定するには、次のコマンドを実行します。

      gcloud config set artifacts/location us-west1
      

      これらのコマンドの詳細については、gcloud config set のドキュメントをご覧ください。

    Gem をダウンロードする

    Ruby プロジェクトをビルドすると、ディストリビューション ファイルは Ruby プロジェクトの lib サブディレクトリに保存されます。このクイックスタートを簡素化するため、ディレクトリを作成し、そのディレクトリに gem をダウンロードします。

    ディレクトリを作成するには、次のコマンドを実行します。

    mkdir ruby-quickstart
    mkdir ruby-quickstart/lib
    cd ruby-quickstart/lib
    

    次に、gem をダウンロードします。独自の Gem を使用するか、rubygems.org の人気の Gem ページからサンプル Gem をダウンロードできます。rubygems.org から gem をダウンロードするには、次のコマンドを実行します。

    gem fetch GEM_NAME
    

    これで、ruby_quickstart/lib ディレクトリに GEM_NAME という名前の gem が作成されました。次のセクションでは、RubyGems CLI を使用して gem をリポジトリに push します。

    gem をリポジトリに push する

    gem をリポジトリに push するには、次のコマンドを実行します。

    gem push GEM_NAME --host https://us-west1-ruby.pkg.dev/PROJECT/quickstart-ruby-repo
    

    ここで

    • GEM_NAME は、リポジトリに push する gem の名前です。
    • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。

    リポジトリ内の gem を表示する

    gem が追加されたことを確認するには、ruby-quickstart リポジトリ内のパッケージを一覧表示します。

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

    gcloud artifacts packages list --repository=ruby-quickstart
    

    gem のバージョンを表示するには、次のコマンドを実行します。

    gcloud artifacts versions list --package=GEM_NAME
    

    gem をインストールする

    Artifact Registry リポジトリに push した gem をインストールするには、次のコマンドを実行します。

    export GEM_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"
    gem install GEM_NAME --source https://$GEM_TOKEN@us-west1-ruby.pkg.dev/PROJECT/quickstart-ruby-repo
    

    ここで

    • GEM_NAME は、リポジトリにインストールする Gem の名前です。
    • PROJECT は、プロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。

    トラブルシューティング

    詳細については、RubyGems のトラブルシューティングをご覧ください。

    クリーンアップ

    このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

    リポジトリを削除する前に、保持する必要がある Gem が別の場所で使用可能であることを確認してください。

    1. quickstart-ruby-repo リポジトリを削除するには、次のコマンドを実行します。

      gcloud artifacts repositories delete quickstart-ruby-repo
      
    2. アクティブな gcloud 構成のデフォルトのリポジトリとロケーション設定を削除するには、次のコマンドを実行します。

      gcloud config unset artifacts/repository
      gcloud config unset artifacts/location
      

    次のステップ