見出し画像

GitHub Packagesのプライベートnpmパッケージを限定公開する方法

こんにちは,Caratの斎藤( @saitoxu )です.

今回は小ネタですが,最近調べたGitHub Packagesのプライベートnpmパッケージを限定公開する方法を紹介します.

背景

GLITの開発で培ったノウハウを活かして,年始から求人メディア企業のアプリ開発・運営の支援を行うGLIT Platformというサービスを始めました.

詳しいサービス内容や立ち上げた理由については以下の記事をご覧ください.

現在,最初のプロジェクトの開発を行っているところですが,単なるアプリ開発の受託ではなくプラットフォームと謳っているため,クライアントに低コストで様々な機能を提供できるような仕組み作りも同時に行っています.
そのための1つが求人ドメインに特化したUIライブラリです.

ドメイン特化のUIライブラリを開発することで,クライアントアプリではレゴブロックのようにコンポーネントを組み合わせることでアプリを構築できるようにし,低コスト化を実現しています.

問題

UIライブラリは今後様々なクライアントのアプリで再利用したいので,UIライブラリのパッケージ(npm)自体はGitHub Packagesのプライベートパッケージとして会社のorganization下で管理しています.

GitHub Packagesのプライベートパッケージを社内で利用する分には色々情報があったのですが(下記の記事などが参考になりました),今回やりたいのは社外に限定公開することです(図1).

図1: 社外の特定のorganizationからのみ利用できるようにしたい

この,社内のprivateパッケージを社外に限定公開する方法について言及している記事は調べたところなかったため,何かスマートにやる方法はないかと考えてみました.

解決策

色々検討したあげく,今回は以下の方法で解決しました.

  1. UIライブラリの限定公開用にGitHubアカウントを用意

  2. 自社のorganizationに1のアカウントを外部コラボレータとして追加

  3. 1のアカウントのpersonal access token (PAT)を,パッケージを共有したいクライアントに配布

  4. クライアントのorganizationでは3のトークンを使ってパッケージにアクセス

図示すると次のような感じです(図2).

図2: 社外のorganizationに限定公開する方法

この方法のメリットは,

  • 仕組み的には社内でのprivateパッケージの利用方法と同じなので分かりやすい

  • 共有するトークンのアクセス範囲を最小限にできる(特定のリポジトリのpackage read権限だけ付与できる)

です.一方でデメリットは,

  • organizationに1アカウント追加するので,その分コストがかかる(約4ドル/月)

などでしょうか.地味にコストがかかってしまうのがネックですが,分かりやすく権限も細かく管理できるのでまぁいったん良いかなと思っています.もっと良い方法があるよーという方がいらっしゃれば是非教えていただきたいです.

おわりに

以上,GitHub Packagesのプライベートnpmパッケージを限定公開する方法を紹介しました.
ニッチなケースだと思いますが,誰かの参考になれば幸いです.

最後に,弊社では日本の仕事探しにおける負を一緒に解決してくれる仲間を募集しています.
下記の募集ポジションまたは,その他少しでも興味を持たれた方は斎藤のTwitterまでお気軽にご連絡ください.


この記事が気に入ったらサポートをしてみませんか?