npm について
npm は、npm Registry のアカウント操作やパッケージ作業向けのスキルで、認証、名前の予約、公開を行う開発者を対象とします。共通の認証ヘルパーと一時的な npm 設定を使い、認証情報や対象パッケージに問題がある場合の停止条件も定めています。
主な機能
- 01Registry の本人確認とパッケージ確認
- 02認証・アカウント問題への対応
- 03ローカルパッケージの公開と確認
- 04名前の予約と個別失敗への対応
- 05オフライン回帰テストの実行
活用シーン
- 01使用中の npm Registry アカウントの確認
- 02リポジトリのパッケージバージョンの公開
- 03プレースホルダー公開による名前の予約
- 04合成環境での回帰テスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ steipete/ agent-scripts --skill npmインストール後、Claude Code で/npmを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/npm-auth-cache.mjsnpm-auth-cache.test.mjsnpm-auth-login.mjsnpm-auth-login.test.mjsnpm-auth.shnpm-auth.test.shnpm-cli-test-helpers.mjsnpm-service.shpublish-package.shpublish-package.test.shreserve-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-worktmux セッション(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
)
コメント
Markdown 対応