Skip to main content

Enterprise Server 3.15 は、現在リリース候補として使用できます。

RubyGemsレジストリの利用

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

注: サイト管理者はそれぞれのサポートされているパッケージの種類を有効化あるいは無効化できるので、このパッケージの種類はインスタンスで利用できないかもしれません。 詳しくは、「Enterprise 向けのパッケージエコシステムサポートを設定する」を参照してください。

前提条件

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

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

    $ bundle --version
    Bundler version 1.13.7
    

GitHub Packages への認証を行う

GitHub Packages では、personal access token (classic)を使用した認証のみがサポートされています。 詳しくは、「個人用アクセス トークンを管理する」を参照してください。

非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。

personal access token (classic) を使って、GitHub Packages または GitHub Enterprise Server API の認証を受けることができます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープの詳細については、「GitHub Packagesの権限について」を参照してください。

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

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

personal access token

で認証を行う

GitHub Packages でパッケージを発行およびインストールするには、適切なスコープで personal access token (classic) を使う必要があります。 詳しくは、「GitHub Packages の概要」を参照してください。

gem を公開してインストールするには、personal access tokenを使って GitHub Packages に対する認証を行うように、RubyGems または Bundler を構成できます。

新しい gem を公開するには、 ~/.gem/credentials ファイルを編集してpersonal access token (classic)を含めることによって、RubyGems で GitHub Packages に対して認証を行う必要があります。 このファイルが存在しない場合は、新しい ~/.gem/credentials ファイルを作成します。

たとえば、以下を含むように ~/.gem/credentials を作成または編集し、TOKEN をpersonal access tokenに置き換えます。

---
:github: Bearer TOKEN

gem をインストールするには、https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/ を含むように gem ソースを更新することによって、GitHub Packages に対する認証を行う必要があります。 以下のように置き換えてください。

  • USERNAME を GitHub に。
  • TOKEN をpersonal access token (classic) に。
  • NAMESPACE を、gem を含むリポジトリを所有している個人アカウントまたは Organization の名前に。
  • REGISTRY_URL を、インスタンスの Rubygems レジストリの URL に。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

パッケージをグローバルに使用できるようにする場合は、次のコマンドを実行して、レジストリをソースとして追加できます。

gem sources --add https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/

Bundler で認証を行うには、personal access token (classic) を使うように Bundler を構成します。USERNAME は GitHub のユーザー名、TOKEN はpersonal access token、NAMESPACE は gem を含むリポジトリを所有している個人アカウントまたは Organization の名前に、それぞれ置き換えます。REGISTRY_URL は、インスタンスの RubyGems レジストリの URL に置き換えます。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

bundle config https://REGISTRY_URL/NAMESPACE USERNAME:TOKEN

パッケージの公開

既定で、GitHub はパッケージと同じ名前の既存のリポジトリにパッケージを発行します。 たとえば、octo-org 組織に GEM_NAME を発行すると、GitHub Packages によって gem が octo-org/GEM_NAME リポジトリに発行されます。 gem の作成の詳細については、RubyGems のドキュメントの「gem の作成」を参照してください。

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

  2. gemspec からパッケージをビルドして、gem パッケージを作成します。 GEM_NAME を gem の名前に置き換えます。

    gem build GEM_NAME.gemspec
    
  3. パッケージを GitHub Packages に公開します。NAMESPACE をプロジェクトを含むリポジトリを所有している個人アカウントまたは Organization の名前に、また GEM_NAME を gem パッケージの名前に置き換えます。REGISTRY_URL を、インスタンスの Rubygems レジストリの URL に置き換えます。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

    注: gem の metadata.gz のファイルの圧縮されていない最大サイズは、2 MB 未満である必要があります。 その制限を超える gem をプッシュする要求は失敗します。

    $ gem push --key github \
    --host https://REGISTRY_URL/NAMESPACE \
    GEM_NAME-0.0.1.gem
    

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

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

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からインストールするパッケージに、NAMESPACE を、インストールする gem を含むリポジトリを所有している個人アカウントまたは Organization に置き換えます。REGISTRY_URL を、インスタンスの Rubygems レジストリの URL に置き換えます。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

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

    source "https://REGISTRY_URL/NAMESPACE"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM_NAME"
    
  4. パッケージをインストールしてください。

    gem install GEM_NAME --version "0.1.1"
    

参考資料