想像してみてください。あなたは一流のシェフです。チェーン展開するすべてのレストランで同じ美味しい料理を提供するために、一連の「秘密のソース」を開発しました。これらのソースを各店舗に届けたいと考えていますが、通りすがりの人に勝手に持ち去られるわけにはいきません。
コンピュータソフトウェア開発の世界では、これらの秘密のソースは**社内の「プライベートパッケージ」**にあたります。
プロジェクトが増えるにつれ、次のような不満を感じたことがあるはずです。同じUIコンポーネントやユーティリティ関数をすべてのプロジェクトでコピー&ペーストしたり、Git Submoduleで人生の選択を疑うほど苦労したりすることです。実際、必要なのは「プライベートパントリー(プライベートNPMレジストリ)」だけです。今日は、pnpmを使用してパッケージをGitLabに公開する方法について説明します。これにより、チームメンバーはオープンソースパッケージと同じように、コマンド一つでこれらをインストールできるようになります。
なぜプライベートパッケージとスコープが必要なのですか?
Node.jsの世界では、プライベートパッケージには「苗字」が必要です。これがスコープ(Scope)です。
例えば、会社の名前が @my-company の場合、パッケージ名は @my-company/ui-kit のようになります。この苗字があれば、pnpm はあてもなく npmjs.org を探すことはありません。代わりに、指定された会社の座標へ直接向かいます。
重要な決定:グループレベル vs プロジェクトレベル
GitLabでは、これは調味料をどこに保管するかを決めるようなものです。
| レベル | 説明 |
|---|---|
| プロジェクトレベル | シェフの個人的な金庫のようなもので、特定の料理にのみ使用できます。各パッケージに独立した設定が必要なため、設定が面倒です。 |
| グループレベル | これは「セントラルキッチン」のコンセプトであり、強くお勧めします!一度設定すれば、同じグループ内の数十、あるいは数百のパッケージが同じ設定と認証情報を共有できます。 |
「パスポート」の設定:アクセストークンと環境変数
地下の食料庫に入るには、まず「入室カード」を取得する必要があります。
- GitLabの Settings > Access Tokens に移動します。
- トークンを申請し、
read_api(ダウンロード用)とwrite_package_registry(公開用)の権限にチェックを入れます。 - 重要: トークンを取得したら、コードや
.npmrcファイルに直接ハードコードしないでください!それは金庫の鍵をドアに差しっぱなしにするようなものです。
最もプロフェッショナルな方法は、それを「環境変数」に隠すことです。MacまたはLinuxのターミナル(例:~/.zshrc)に次の行を追加します。
export GITLAB_TOKEN="あなたのGitLabトークン"
これにより、システムが自動的に認証情報を付加してくれるため、安全で便利です。
ナビゲーション設定:.npmrc の極意
次に、プロジェクトのルートにナビゲーションマップである .npmrc を作成し、pnpmにどこへ行くべきかを伝えます。
# @my-company で始まるものはすべて GitLab に送信します
@my-company:registry=https://gitlab.com/api/v4/groups/<YOUR_GROUP_ID>/-/packages/npm/
# 入室カードの認証を設定します(先ほど設定した環境変数を読み取ります)
//gitlab.com/api/v4/groups/<YOUR_GROUP_ID>/-/packages/npm/:_authToken="${GITLAB_TOKEN}"
会社のグループIDを入れ替えるだけで、道が開けます!
公開前の最後の1マイル:パッケージングの芸術
接続を設定した後、急いで公開して、誤ってテストファイルや秘密の設定までアップロードしてしまう人が少なくありません。ここで package.json の files フィールド が役に立ちます。
これは「ホワイトリスト」の考え方です。
{
"name": "@my-company/lib-1",
"files": [
"dist"
],
"publishConfig": {
"registry": "https://gitlab.com/api/v4/projects/<YOUR_PROJECT_ID>/packages/npm/"
}
}
| 設定 | 説明 |
|---|---|
files |
システムに対し、dist 内のコンパイルされた要点のみを公開し、他の不要なものはすべて残すように明示的に伝えます。 |
publishConfig |
これは二重の保険であり、このパッケージが誤って公海(npmjs.org)に公開されないようにします。 |
公開する前に、pnpm pack コマンドを使用してローカルで内容を確認することをお勧めします。すべて問題なければ、自信を持って pnpm publish を実行しましょう!
まとめ
プライベートパントリーを作成するのは難しくありません。鍵となるのは以下の点です。
- トークンを申請し、環境変数で保護する。
- 正しい
.npmrcナビゲーションマップを設定する。 package.jsonのfilesフィールドを使用して正確に出荷する。
このワークフローをマスターすることで、会社のコードの再利用をプロフェッショナルかつ安全でエレガントなものにできます。さあ、あなた自身のセントラルキッチンを作りに行きましょう!