Skip to main content

RubyGemsレジストリの利用

GitHub Packages にパッケージを公開し、GitHub Packages に保存されたパッケージを依存関係としてBundlerを使うRubyのプロジェクトで利用するよう、RubyGemsを設定できます。

注: GitHub Packages は、GitHub AE では現在ベータ段階です。

前提条件

  • RubyGemsは2.4.1以降を使わなければなりません。 RubyGemsのバージョンは、以下のようにすれば分かります。

    $ gem --version
  • Bundler 1.6.4 以降が必要です。 Bundlerのバージョンは以下のようにすれば分かります。

    $ bundle --version
    Bundler version 1.13.7
  • 複数の資格情報を扱うには、keycutter をインストールしてください。 keycutterは以下のようにすればインストールできます。

    $ gem install keycutter

GitHub Packages への認証を行う

パッケージを発行、インストール、および削除するには、アクセス トークンが必要です。

個人アクセス トークン (PAT) を使用し、GitHub Packages または GitHub AE API の認証を受けることができます。 個人トークンを作成する際には、必要に応じて様々なスコープをトークンに割り当てできます。 PAT のパッケージ関連のスコープの詳細については、「GitHub パッケージのアクセス許可について」を参照してください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKEN では、ワークフロー リポジトリに関連付けられているパッケージを発行します。
  • packages:read 以上のスコープが設定された PAT では、(GITHUB_TOKEN ではアクセスできない) 他のプライベート リポジトリに関連付けられているパッケージがインストールされます。

GitHub Actions ワークフローで使用される GITHUB_TOKEN の詳細については、「ワークフローで認証する」を参照してください。

個人アクセストークンでの認証

GitHub Packages内でパッケージを公開及びインストールするためには、適切なスコープで個人アクセストークンを使わなければなりません。 詳しくは、「GitHub Packages について」をご覧ください。

RubyGems を使用して GitHub Packages に対する認証を行うには、gem を公開するための ~/.gem/credentials ファイルを編集するか、単一の gem をインストールするための ~/.gemrc ファイルを編集するか、1 つ以上の gem を追跡してインストールする Bundler を使用します。

新しい gem を公開するには、 ~/.gem/credentials ファイルを編集して個人用アクセス トークンを含めることによって、RubyGems で GitHub Packages に対して認証を行う必要があります。 このファイルが存在しない場合は、新しい ~/.gem/credentials ファイルを作成します。

たとえば、以下を含むように ~/.gem/credentials を作成または編集します。TOKEN は個人用アクセス トークンに置き換えます。

---
:github: Bearer TOKEN

gem をインストールするには、プロジェクトの ~/.gemrc ファイルを編集して https://USERNAME:TOKEN@REGISTRY-URL/OWNER/ を含めることによって、GitHub Packages に対する認証を行う必要があります。 以下のように置き換えてください。

  • USERNAME を GitHub に。
  • TOKEN を個人用アクセス トークンに。
  • OWNER を、プロジェクトを含むリポジトリを所有しているユーザーまたは Organization アカウントの名前に。
  • REGISTRY-URL を、インスタンスの Rubygems レジストリの URL である rubygems.HOSTNAME に。 HOSTNAME を your enterprise のホスト名に置き換えてください。

~/.gemrc ファイルがない場合は、この例を使用して新しい ~/.gemrc ファイルを作成します。

---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://rubygems.org/
- https://USERNAME:TOKEN@REGISTRY-URL/OWNER/
:update_sources: true
:verbose: true  

Bundler で認証するには、個人用アクセス トークンを使用するように Bundler を構成します。USERNAME を GitHub ユーザー名に、TOKEN を個人用アクセス トークンに置き換えてください。OWNER は、プロジェクトを含むリポジトリを所有しているユーザーまたは Organization アカウントの名前に置き換えます。REGISTRY-URL は、インスタンスの Rubygems レジストリの URL である rubygems.HOSTNAME に置き換えます。 HOSTNAME を your enterprise のホスト名に置き換えてください。

$ bundle config https://REGISTRY-URL/OWNER USERNAME:TOKEN

パッケージの公開

デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、octo-gemocto-org という Organization に公開するときは、GitHub Packages によって gem が octo-org/octo-gem リポジトリに公開されます。 gem の作成の詳細については、RubyGems ドキュメントの「gem の作成」を参照してください。

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「パッケージの表示」をご覧ください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. gemspec からパッケージをビルドして、gem パッケージを作成します。

    gem build OCTO-GEM.gemspec
  3. パッケージを GitHub Packages に公開します。OWNER を、プロジェクトを含むリポジトリを所有しているユーザーまたは Organization アカウントの名前に、OCTO-GEM を gem パッケージの名前に置き換えてください。REGISTRY-URL は、インスタンスの Rubygems レジストリの URL である rubygems.HOSTNAME に置き換えます。 HOSTNAME を your enterprise のホスト名に置き換えてください。

    $ gem push --key github \
    --host https://REGISTRY-URL/OWNER \
    OCTO-GEM-0.0.1.gem

同じリポジトリへの複数パッケージの公開

複数の gem を同じリポジトリに公開するには、GitHub リポジトリの URL を gem.metadatagithub_repo フィールドに含めることができます。 このフィールドを含めた場合、GitHub でのリポジトリの照合は、gem 名を使用するのではなく、この値に基づいて行われます。HOSTNAME を、your enterprise のホスト名に置き換えます。

gem.metadata = { "github_repo" => "ssh://HOSTNAME/OWNER/REPOSITORY" }

パッケージのインストール

GitHub Packages の gem は、rubygems.org の gem を使うのと同じように使用できます。GitHub ユーザーまたは Organization をソースとして ~/.gemrc ファイルに追加するか、Bundler を使用して Gemfile を編集することで、GitHub Packages に対して認証を行う必要があります。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. Bundler については、GitHub ユーザーまたは Organization をソースとして Gemfile に追加して、この新しいソースから gem をフェッチするようにします。 たとえば、指定したパッケージに対してのみ GitHub Packages を使用する新しい source ブロックを Gemfile に追加できます。GEM NAME を、GitHub Packages からインストールするパッケージに、OWNER を、インストールする gem を含むリポジトリを所有しているユーザーまたは Organization に置き換えます。REGISTRY-URL は、インスタンスの Rubygems レジストリの URL である rubygems.HOSTNAME に置き換えます。 HOSTNAME を your enterprise のホスト名に置き換えてください。

    source "https://rubygems.org"
    
    gem "rails"
    
    source "https://REGISTRY-URL/OWNER" do
      gem "GEM NAME"
    end
    
  3. 1.7.0 より前の Bundler バージョンの場合は、新しいグローバルな source を追加する必要があります。 Bundler の使用方法の詳細については、bundler.io のドキュメントを参照してください。

    source "https://REGISTRY-URL/OWNER"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM NAME"
    
  4. パッケージをインストールしてください。

    $ gem install octo-gem --version "0.1.1"

参考資料