0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Packagesっていつ使うの?

0
Posted at

GitHub Packagesっていつ使うの?本家npmやAWS ECRとの違いを実戦目線でまとめた

GitHubを使っていると目にするGitHub Packages。「これっていつ使うの?」「本家のnpmやDocker Hub、AWSのECRと何が違うの?」と疑問に思ったことはありませんか?

今回は、具体的なユースケースを交えながら、エンジニアのリアルな実戦目線でメリット・デメリットを整理しました。


💡 一言でいうと?

GitHub Packagesは、**「開発で使う共通パーツ(ライブラリやコンテナイメージ)の、GitHub直結型・プライベート保管庫」**です。


🛠️ 主な3つのユースケース

1. 社内共通ライブラリのプライベート配布(npm, NuGet, Mavenなど)

複数のWebアプリを開発している企業で、ログイン機能や共通のUIコンポーネントをパッケージ化し、社内の別プロジェクトから簡単にインストールできるようにします。

  • イメージ: 身内だけの「プライベートnpm」
  • 具体例: 認証処理の共通ライブラリを @my-company/auth として非公開登録。別チームは npm install @my-company/auth で常に最新の共通機能を利用可能。

2. Dockerコンテナイメージの管理(GitHub Container Registry / GHCR)

GitHub Actionsと連携して、ソースコードが更新されたら自動でDockerイメージをビルドし、GitHub内に保存(プッシュ)します。

  • 具体例: 本番サーバーやクラウド環境(AWS等)が、GitHub PackagesからそのDockerイメージをダウンロード(プル)して、最新状態にデプロイ。

3. マイクロサービス間での型定義の共有

フロントエンドとバックエンドなど、サービス間でやり取りするデータの「型(TypeScriptの型定義やProtocol Buffersなど)」をパッケージ化して共有します。仕様のズレによるバグを未然に防ぐために重宝します。


🤔 よくある疑問に答える(実戦目線での比較)

Q1. AWSの「ECR」じゃなくて、GitHubの「GHCR」を使う理由は?

AWSメインの現場ならECRを使うケースが多いですが、あえてGitHubを選ぶのには明確な理由があります。

比較項目 AWS ECR GitHub Container Registry (GHCR)
権限管理 IAMの設定(アクセスキーやOIDC)が複雑 最初からある GITHUB_TOKEN を使うだけで3行で完結
依存性 AWSに依存 マルチクラウド(AWSもGCPも使う等)でも中央集権にできる
コスト 微々たるものだがストレージ・転送量課金あり GitHub Actions内でのビルド&保存ならデータ転送量が基本無料
  • 結論: インフラの起動速度やAWS内での完結を重視するなら ECR。環境構築の手軽さやGitHub Actionsとの親和性を最優先するなら GHCR

Q2. 無料なら、本家「npm」に公開するんじゃダメなの?

世界中に完全公開(パブリック)するオープンソース開発なら、本家npmに置くのが大正解です。

あえてGitHub Packagesを「プライベート(非公開)」で使うのは、以下の大きなメリットがあるからです。

  • 権限管理のミスが激減する:
    本家npmでプライベートパッケージをやろうとすると、npmアカウントを全員分作り、組織(Organization)に課金し、GitHubとは別に権限管理をする必要があります。
    GitHub Packagesなら、**「このGitHubリポジトリを見られる人は、このパッケージも使える」**という風に、GitHubの権限と一発で連動できます。ツールの数(管理対象)を減らせるのも大きなメリットです。

Q3. 消費者側は「本家npm」と「GitHub Packages」の違いを意識せずに使える?

ここが最大の落とし穴で、「消費者側にひと手間発生する」ため、意識しないと使えません。 これがパブリックなパッケージでGitHub Packagesがあまり流行っていない理由です。

  • 本家npmの場合: npm install lodash と叩くだけ。
  • GitHub Packagesの場合: 消費者側がプロジェクト内の .npmrc に「@ユーザー名 から始まるパッケージは、本家npmじゃなくてGitHubのサーバーに見に行ってね」という設定を書き込む必要があります。
# .npmrc の設定例
@username:registry=[https://npm.pkg.github.com](https://npm.pkg.github.com)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?