Featured image of post GitLab Private NPM Registryを設定する方法とは?マルチパッケージと権限管理のベストプラクティス

GitLab Private NPM Registryを設定する方法とは?マルチパッケージと権限管理のベストプラクティス

GitLab Private NPM Registryの設定の難題を解決します。.npmrcのロジック、マルチパッケージ管理、404エラーのトラブルシューティングを含み、Registryを統一するためのベストプラクティスを提供します。

社内プロジェクトでプライベートパッケージ(Private Package)を使用する必要があるのに、.npmrc の設定で行き詰まっていませんか?

Tokenを設定したはずなのに、なぜまだ 404 Not Found が表示されるのでしょうか?

会社に複数のチームや複数のパッケージ(@frontend@backend など)がある場合、どのようにして .npmrc をスマートに管理すればよいでしょうか?

.npmrc の2つの迷信を解き明かす

.npmrc を理解するには、まずそれがどのように機能するかを理解する必要があります。

簡単に言えば、そのコアロジックはたった2つのことです:Scope マッピング認証

1. Scope マッピング(Scope Mapping)

これは npm に次のように伝えます:@company で始まるパッケージを見つけたら、公式の npmjs.org には行かず、指定された GitLab Registry に行ってください。

@company:registry=https://gitlab.com/api/v4/groups/100/-/packages/npm/

2. 認証(Authentication)

アドレスがあっても、鍵が必要です。その鍵が AuthToken です。

ここに非常に重要なルールがあります:Registry URL と AuthToken のパスは「完全に一致」しなければなりません

# ✅ 正解:パスは上で定義された registry と完全に同じです
//gitlab.com/api/v4/groups/100/-/packages/npm/:_authToken=${GITLAB_TOKEN}

# ❌ 間違い:パスが不一致、これは権限エラーを引き起こします
//gitlab.com/api/v4/:_authToken=${GITLAB_TOKEN}

多くの人が設定に失敗するのは、パスにスラッシュが1つ多かったり、階層が1つ足りなかったりするためです。

依存関係地獄と 404 エラー

最も頭を悩ませる状況はこれです:パッケージ A をインストールしたら、それがパッケージ B(これもプライベート)に依存しており、npm が 404 Not Found を吐き出す場合です。

なぜこうなるのでしょうか?それは、npm が依存関係を解決する際、正しい対応関係がないと迷子になるからです。

特に、異なる GitLab Group にある2つの異なる Scope(例えば @team-a@team-b)がある場合、.npmrc は非常に複雑で保守が難しくなります。さらに、異なる Registry には異なる Token が必要な場合があり、これらの環境変数を管理するだけで精一杯になります。

もっと賢い方法はあるのでしょうか?

推奨ソリューション:統一ダウンロード Group Registry & 独立公開 Project Registry

Registry 説明
Group Registry すべてのパッケージのダウンロードを統一するために、Group Registry を設定して、この Gitlab Group 配下のすべてのパッケージをダウンロードします。
Project Registry 公開時の権限のために、各プロジェクトは独自の Project Registry を設定して公開できます。

なぜそうするのか?

理由 説明
インストールが簡単 同じグループ内のすべてのパッケージを簡単にインストールしてダウンロードできます。
公開が簡単 パッケージをそれぞれのプロジェクトに簡単に公開でき、異なるパッケージが同じ Registry に公開されるのを防ぎます。各プロジェクトは独自の Registry を持ちます。
Token 管理が容易 開発者のコンピュータでも CI/CD 環境でも、GITLAB_NPM_TOKEN を1セット管理するだけで済みます。
依存関係エラーの回避 すべてのプライベートパッケージが同じ場所にあるため、npm は確実に見つけることができます。

設定の実践

このテンプレートを直接コピーできます:

Token を保護する作業は環境変数に任せ、コードに Token を直接書き込まないようにしてください!

# .npmrc
# @company scope は group レベルの registry を使用
# すべての @company/* パッケージはこの registry からインストールされます
@company:registry=https://gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/

# GitLab npm registry 認証設定
# 共通の gitlab.com auth token を使用(すべての group および project レベルのリクエストをカバー)
//gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}
# プロジェクトの registry を使用してパッケージを公開
//gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}


# 他の公開パッケージは公式レジストリへ
registry=https://registry.npmjs.org/

package.jsonpublishConfig を設定し、パッケージを対応する GitLab Project Registry に公開します。

{
  "name": "@company/my-package",
  "publishConfig": {
    "@company:registry": "https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/"
  }
}

結論

「統一ダウンロード Group Registry」「独立公開 Project Registry」 の戦略を通じて、保守コストを大幅に削減し、開発フローをよりスムーズにすることができます。

目標 説明
正確な一致 Scope マッピングと Token パスは完全に一致する必要があります
安全第一 環境変数 ${GITLAB_NPM_TOKEN} を活用してプライベート情報を管理します
集中管理 統一された GitLab Group を優先的に使用して、社内のすべてのプライベートパッケージをダウンロードします
独立公開 独立した GitLab Project を優先的に使用して、それぞれのプライベートパッケージを公開し、混乱を避けるために独立して管理します

これらのロジックを習得すれば、GitLab NPM Registry は会社の開発プロセスにおいて強力な助っ人となるでしょう!

All rights reserved,未經允許不得隨意轉載
Built with Hugo
テーマ StackJimmy によって設計されています。