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

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

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

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

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

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

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

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

簡単に言えば、その核心的なロジックは2つのことだけです:スコープマッピング(Scope Mapping)認証(Authentication)

1. スコープマッピング(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}

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

依存関係地獄と404エラー

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

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

特に、異なるGitLab Groupに2つの異なるスコープ(例:@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
# 汎用ドメインレベルのauth token(すべてのgroupおよびprojectレベルのインストールリクエストをカバー)
//gitlab.com/:_authToken=${GITLAB_NPM_TOKEN}

# 公開用:project-level auth token(npm publishは正確なパス一致が必要)
//gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}

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

# その他の公開パッケージは公式ライブラリに行きます
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 によって設計されています。