⚙️

Bunでプライベートパッケージをインストールする為の設定

に公開

背景

弊社のデザインシステムはGitHub Packages にプライベートパッケージとして公開されています。
これをあるリポジトリで使用する為にインストールする必要がありました。

bunfig.tomlでのGitHub Package Registry認証の設定

🔐 GitHub Packages を使う際の認証方法(npm)

GitHub Packages にあるプライベートパッケージにアクセスするには、以下の2点が必要です

  1. 専用のレジストリURL:
    https://npm.pkg.github.com

  2. パーソナルアクセストークン(Personal Access Token(classic))での認証
    https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#personal-access-token

🔄 Bunでの認証設定方法

Bunを使っている場合、bunfig.toml を使うことで、スコープ別に認証設定できます。

公式ガイド(スコープ別の設定)
https://bun.sh/docs/install/registries

.npmrc 対応オプションとの互換性について
https://bun.sh/docs/install/npmrc#supported-options

📝 補足:
Bunでは .npmrc よりも bunfig.toml の利用が推奨されています。

bunfig.tomlの例は以下です。

[install.scopes]
@sample = { url = "https://npm.pkg.github.com", token = "$BUN_AUTH_TOKEN" }

このファイルはルートディレクトリに置くことを推奨しています。

In general, it's recommended to add a bunfig.toml file to your project root, alongside your package.json.

https://bun.sh/docs/runtime/bunfig#:~:text=In general%2C it's recommended to add a bunfig.toml file to your project root%2C alongside your package.json.

同じ階層に以下の.envを作成します。

BUN_AUTH_TOKEN=Github Personal AccessToken(classic)

参考)bunが.envを読み込むことについて
https://bun.sh/docs/runtime/env

Github Personal AccessToken(classic)の作成方法は以下を参考にしてください。
https://qiita.com/RyutoYoda/items/c6908025c0aef4b35cdd
プライベートパッケージをダウンロードするためには、packagesのreadの権限には必ずチェックを入れる必要があります。

GitHub Workflowsの設定

packages:read権限追加

GitHub Packages からパッケージをダウンロード・インストールするには、
ワークフローに read:packages 権限が必要です。

https://docs.github.com/en/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries

✅ 注意点
呼び出されたワークフローが packages: read を要求する場合、
呼び出し元のワークフローにも同じ権限の許可が必要です。
🔍 エラー例

The workflow is requesting 'packages: read', but is only allowed 'packages: none'

GitHub Workflowsへのbun installのenvにsecrets.GITHUB_TOKENを設定

GitHub Packagesへのアクセスには認証トークンが必要です。
GitHub Actionsではsecrets.GITHUB_TOKENが利用可能です。
https://docs.github.com/en/packages/learn-github-packages/about-permissions-for-github-packages

❓モノレポでのbunfig.tomlの挙動について

モノレポでルートディレクトリにbunfig.tomlを置き、サブディレクトリにはbunfig.tomlがない状態で、サブディレクトリ内でbun i(bun install)を実行したところ、問題なく依存パッケージがインストールできました。

公式documentにはこれを保証する記載はありませんし、以下のissueも挙がっている状態でした。

https://github.com/oven-sh/bun/issues/4112

こちらについては分かり次第また更新したいと思います。

参考

最後に

  • デザインシステムをそもそもプライベートにする必要性について考えても良かったなと思いました
  • この認証設定は大変でしたがなんとか運用できるようになって良かったです
  • モノレポでのbunfig.tomlを探索する挙動についてはまた調査したいです
  • この記事が自分と同じようにbunの設定で苦戦している方の力になれば嬉しいです
immedioテックブログ

Discussion