このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

RubyGemsレジストリの利用

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

GitHub PackagesはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server、GitHub AEで利用できます。

ノート: GitHub Packagesは現在GitHub Enterprise Server 2.22でベータです。 GitHub Enterprise Serverのインスタンスのベータに参加するには、サインアップフォームを使ってください。

デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、GitHubはOWNER/testというリポジトリ内のcom.example:testという名前のパッケージを公開します。

必要な環境

  • 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 への認証を行う

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

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

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

  • GITHUB_TOKENを使って、ワークフローリポジトリに関連づけられたパッケージを公開。
  • PATで他のプライベートリポジトリ(これにはGITHUB_TOKENがアクセスできない)に関連づけられたパッケージをインストール。

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

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

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

gemの公開なら~/.gem/credentialsファイルを編集することで、単一のgemのインストールなら~/.gemrcファイルを編集することで、Bundlerを使って1つ以上のgemを追跡してインストールするなら~/.gemrcファイルを編集することで、RubyGemsでGitHub Packagesに認証を受けることができます。

新しいgemsを公開するには、~/.gem/credentialsファイルを編集して個人アクセストークンを含めることによって、RubyGemsでGitHub Packagesに認証を受けなければなりません。 ~/.gem/credentialsファイルが存在しない場合、新しく作成してください。

たとえば、~/.gem/credentialsを作成もしくは編集して、以下を含めてください。TOKENは個人アクセストークンで置き換えてください。

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

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

  • USERNAMEをGitHubのユーザ名で。
  • TOKENを個人アクセストークンで。
  • OWNER を、プロジェクトを含むリポジトリを所有しているユーザまたはOrganizationアカウント名で。
  • REGISTRY-URL をインスタンスの Rubygems レジストリの URL で。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、 HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

~/.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で置き換えてください。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、 HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

$ 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で置き換えてください。 インスタンスで Subdomain Isolation が有効になっている場合は、rubygems.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/rubygems を使用します。 いずれの場合でも、HOSTNAME をGitHub Enterprise Server インスタンスのホスト名に置き換えてください。

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

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

複数のgemを同じリポジトリに公開したい場合は、GitHubリポジトリのgem.metadataにあるgithub_repoフィールドに、URL を記述できます。 このフィールドを含めた場合、GitHub は、gem 名の代わりに、この値を元にしてリポジトリを照合します。HOSTNAMEを、GitHub Enterprise Serverのインスタンス のホスト名に置き換えます。

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

パッケージをインストールする

GitHub Packagesからのgemsは、rubygems.orgからのgemsを使うのと同じように利用できます。 GitHubユーザあるいはOrganizationを~/.gemrcファイルにソースとして追加するか、Bundlerを使ってGemfileを編集することによって、GitHub Packagesに認証を受けなければなりません。

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

  2. Bundlerについては、GitHubユーザもしくはOrganizationをソースとしてGemfileに追加して、この新しいソースからgemsをフェッチするようにしてください。 たとえば、指定したパッケージに対してのみGitHub Packagesを使用するGemfileに新しいsourceブロックを追加できます。GEM NAMEを GitHub Packagesからインストールするパッケージで、OWNERをインストールしたい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/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"

参考リンク

問題がまだ解決していませんか?