デフォルトでは、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でユーザ名で認証を受けるのに、個人のアクセストークンが利用できます。 個人トークンを作成する際には、必要に応じて様々なスコープをトークンに割り当てできます。
認証を GitHub Actionsのワークフローで行うには:
- パッケージレジストリの場合(
PACKAGE-REGISTRY.pkg.github.com
)は、GITHUB_TOKEN
を利用できます。 - コンテナレジストリ(
ghcr.io/OWNER/IMAGE-NAME
)の場合は、GITHUB_TOKEN
もしくは個人アクセストークンを利用できます。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@rubygems.pkg.github.com/OWNER/
を含めることによってGitHub Packagesの認証を受けなければなりません。 以下のように置き換えてください。
USERNAME
をGitHubのユーザ名で。TOKEN
を個人アクセストークンで。OWNER
を、プロジェクトを含むリポジトリを所有しているユーザまたはOrganizationアカウント名で。
~/.gemrcファイルがないなら、以下の例を使って新しい~/.gemrcファイルを作成してください。
---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://rubygems.org/
- https://USERNAME:TOKEN@rubygems.pkg.github.com/OWNER/
:update_sources: true
:verbose: true
Bundlerで認証を受けるには、個人アクセストークンを使うようにBundlerを設定してください。 USERNAMEをGitHubのユーザ名で、TOKENを個人アクセストークンで、OWNERをプロジェクトを含むリポジトリを所有しているユーザもしくはOrganizationアカウント名で置き換えます。
$ bundle config https://rubygems.pkg.github.com/OWNER USERNAME:TOKEN
GITHUB_TOKEN
での認証
GitHub Actionsワークフローを使っているなら、GITHUB_TOKEN
を使い、個人アクセストークンを保存したり管理したりする必要なくGitHub Packages内のパッケージの公開や利用ができます。 詳しい情報については「GITHUB_TOKEN
での認証」を参照してください。
パッケージを公開する
デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、octo-gem
をocto-org
というOrganizationに公開するなら、GitHub Packagesはそのgemをocto-org/octo-gem
リポジトリに公開します。 gem の作成に関する詳しい情報については、RubyGems ドキュメンテーションの「gem の作成」を参照してください。
パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しい情報については「パッケージの表示」を参照してください。
-
GitHub Packagesに認証を受けてください。 詳しい情報については「GitHub Packagesへの認証を行う」を参照してください。
-
gemspecからパッケージをビルドして、.gemパッケージを作成してください。
gem build OCTO-GEM.gemspec
-
GitHub Packagesにパッケージを公開してください。
OWNER
をプロジェクトを含むリポジトリを所有しているユーザもしくはOrganizationアカウント名で、OCTO-GEM
をgemパッケージ名で置き換えます。$ gem push --key github \ --host https://rubygems.pkg.github.com/OWNER \ OCTO-GEM-0.0.1.gem
同じリポジトリへの複数パッケージの公開
複数のgemを同じリポジトリに公開したい場合は、GitHubリポジトリのgem.metadata
にあるgithub_repo
フィールドに、URL を記述できます。 このフィールドを含めた場合、GitHub は、gem 名の代わりに、この値を元にしてリポジトリを照合します。
gem.metadata = { "github_repo" => "ssh://github.com/OWNER/REPOSITORY" }
パッケージをインストールする
GitHub Packagesからのgemsは、rubygems.orgからのgemsを使うのと同じように利用できます。 GitHubユーザあるいはOrganizationをソースとして~/.gemrcファイルに追加するか、Bundlerを使い、Gemfileを編集することで、GitHub Packagesの認証を受けなければなりません。
-
GitHub Packagesに認証を受けてください。 詳しい情報については「GitHub Packagesへの認証を行う」を参照してください。
-
Bundlerについては、GitHubユーザもしくはOrganizationをソースとしてGemfileに追加して、この新しいソースからgemsをフェッチするようにしてください。 たとえば、指定したパッケージに対してのみGitHub Packagesを使用するGemfileに新しい
source
ブロックを追加できます。GEM NAMEを GitHub Packagesからインストールするパッケージで、OWNERをインストールしたいgemを含むリポジトリを所有するユーザまたはOrganizationで置き換えてください。source "https://rubygems.org" gem "rails" source "https://rubygems.pkg.github.com/OWNER" do gem "GEM NAME" end
-
1.7.0以前のバージョンのBundlerの場合、新しいグローバルな
source
を追加する必要があります。 Bundlerの利用に関する詳しい情報についてはbundler.ioのドキュメンテーションを参照してください。source "https://rubygems.pkg.github.com/OWNER" source "https://rubygems.org" gem "rails" gem "GEM NAME"
-
パッケージをインストールしてください。
$ gem install octo-gem --version "0.1.1"