mcpField
N
npm

npm

github.com/steipete開発7.5k87 回インストール1 週間前に更新
リポジトリ

npm について

npm は、npm Registry のアカウント操作やパッケージ作業向けのスキルで、認証、名前の予約、公開を行う開発者を対象とします。共通の認証ヘルパーと一時的な npm 設定を使い、認証情報や対象パッケージに問題がある場合の停止条件も定めています。

主な機能

  1. 01Registry の本人確認とパッケージ確認
  2. 02認証・アカウント問題への対応
  3. 03ローカルパッケージの公開と確認
  4. 04名前の予約と個別失敗への対応
  5. 05オフライン回帰テストの実行

活用シーン

  1. 01使用中の npm Registry アカウントの確認
  2. 02リポジトリのパッケージバージョンの公開
  3. 03プレースホルダー公開による名前の予約
  4. 04合成環境での回帰テスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/steipete/agent-scripts --skill npm

インストール後、Claude Code で/npmを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
npm-auth-cache.mjs
npm-auth-cache.test.mjs
npm-auth-login.mjs
npm-auth-login.test.mjs
npm-auth.sh
npm-auth.test.sh
npm-cli-test-helpers.mjs
npm-service.sh
publish-package.sh
publish-package.test.sh
reserve-packages.sh

詳細

npm

npm レジストリやアカウントのタスクに使用します:npm whoami、パッケージの利用可否確認、パッケージの予約、公開、組織の確認、認証のデバッグ。

Auth

  • シークレットの取り扱いルールを確認するには、まず one-password を使用します。
  • シェルツールから op を直接実行しないでください。
  • 主要アイテム:Molty 内の npm Registry - steipete - Release Automation。
  • デフォルトでは OP_SERVICE_ACCOUNT_TOKEN を使用します。デスクトップのロック解除は不要です。このアイテムには、使用可能なレジストリセッション(registry_token)と、ユーザー名/パスワード/TOTP のフォールバック情報が含まれています。
  • デスクトップの npmjs は明示的なフォールバック時のみ使用します:Molty を利用できず、ユーザーがフォールバックを希望する場合は --account my.1password.com を渡します。明示的な release/publish の依頼は、ロック解除プロンプトへの同意とみなします。
  • アイテムが見つからない、アカウント/保管庫が曖昧、認証情報の形式が不正、npm がパッケージへのアクセスを拒否する、または指定されたパッケージ/バージョンがリポジトリのリリース対象と一致しない場合は、停止して確認してください。
  • npm の認証処理は、共有 op-work tmux セッション(clawdbot-op.sock。one-password を参照)のタスク用ウィンドウ内で行います。失敗した場合も同じウィンドウを再利用し、npm のタスクが完了したら終了してください。npm 専用のソケットやセッションを作成しないでください。
  • npm の認証情報は一時的な npmrc に保存し、コマンドの実行後に削除してください。
  • すべてのヘルパーは scripts/npm-auth.sh を共有します。保存済みの registry_token セッションを最初に使用し、それが使えない場合は新しい6桁の OTP を使用して scripts/npm-auth-login.mjs でレジストリにログインします。フォールバックセッションの取得に成功した場合は、同じアイテムにキャッシュされます。フィールドの抽出、レジストリへのログイン、キャッシュへの書き込みを独自に実装しないでください。
  • インストール済みスキルディレクトリのシンボリックリンクに対応しています。シェルのエントリーポイントは物理的な兄弟ファイルを解決します。読み込まれた npm-auth.sh は、呼び出し元の SCRIPT_DIR や作業ディレクトリを変更せずに NPM_AUTH_SCRIPT_DIR を管理します。Node ヘルパーは、--preserve-symlinks-main を含め、ファイルのシンボリックリンクにも対応しています。
  • 認証情報の選択では、正規フィールドの id、次に purpose、その後に一意のラベルの順に優先します。ラベルのみで一致する候補が重複している場合は拒否されます(従来の npmjs では、同じラベルのフィールドが残ることがあります)。
  • 一時的な認証済みレジストリコマンドには scripts/npm-service.sh -- <npm args...> を使用します。ローカルパッケージには publish-package.sh を使用します。
  • npm 11 のプロンプトへのパイプ入力は不安定です。printf ... | npm login --auth-type=legacy は避けてください。
  • 必要な場合を除き、npm ログインに expect を使用しないでください。ログにプロンプトが出力されることがあり、誤りも起きやすいためです。
  • 自動化では、ヘルパーのレジストリ API ログイン方式(npm-profile の loginCouch)を優先してください。
  • 認証情報の形式が曖昧な場合や npm whoami が失敗した場合は、停止して正確なフィールドラベルまたは認証情報の修正を確認してください。ほかの 1Password アイテムを調査したり、別の tmux ウィンドウ/セッションを開いたりしないでください。

Package Publishing

パッケージのルートから、同じ認証用 tmux ウィンドウ内で実行します:

/Users/steipete/Projects/agent-scripts/skills/npm/scripts/publish-package.sh

このヘルパーはユーザーの本人確認を行い、既存のパッケージバージョンがある場合は処理を拒否して、新しい OTP を使って公開します。期限切れの OTP に対しては1回再試行し、同じ一時 npmrc を使ってレジストリ上で公開されていることを確認します(アクセス制限付きパッケージも含む)。認証ファイルも削除します。

Package Reservation

同じ tmux ウィンドウ内で scripts/reserve-packages.sh を使用します:

/Users/steipete/Projects/agent-scripts/skills/npm/scripts/reserve-packages.sh package-one package-two

このスクリプトの処理:

  • op を通じて Molty のリリース自動化アイテムを1回読み取ります
  • 保存済みのレジストリセッションを再利用するか、ユーザー名/パスワード/TOTP からセッションを作成します
  • 汎用 README を含む 0.0.0 のプレースホルダーパッケージを公開します
  • パッケージごとの公開に失敗しても処理を続けます
  • ログ内のトークン/OTP をマスキングします
  • 一時 npmrc と作業ディレクトリを削除します

注意:

  • npm は、すでに公開されている名前に似すぎているとしてパッケージ名を拒否することがあります。これは認証の失敗ではなく、レジストリのポリシーによる結果として扱ってください。
  • npm CLI のプロンプトへのパイプ入力は npm 11 で不安定です。スクリプトから npm login を実行するより、ヘルパーのレジストリ API ログイン方式を優先してください。
  • スコープ付きパッケージでは、パッケージが存在していても npm view の反映が遅れたり、404 が返されたりすることがあります。npm access get status <pkg> を確認してください。結果が public の場合、または公開に失敗して previously published versions と表示された場合は、その名前は予約済みです。

Offline Regression Tests

リポジトリのルートで実行します。合成フィクスチャのみを使い、実際の 1Password/npm 認証情報は使用しません。シェルのモックが環境変数内のトークン漏えいを確認するため、必ず空の環境を使用してください:

test_home="$(mktemp -d)"
(
  set -e
  trap 'rm -rf "$test_home"' EXIT
  env -i HOME="$test_home" PATH="$PATH" node --test skills/npm/scripts/*.test.mjs </dev/null
  env -i HOME="$test_home" PATH="$PATH" /bin/bash skills/npm/scripts/npm-auth.test.sh </dev/null
)

コメント