npm パッケージ名の空き確認は完全一致 404 だけでは不十分 — 区切り文字を除いた類似名ルールで publish 時に 403 になる
npm
配布設計
命名
知識
運用
npm に新規パッケージを公開する前の名前選定で、レジストリへの問い合わせ(該当名の URL が 404)だけを空き確認にすると、publish 時に初めて 403 で拒否されることがある。npm はタイポスクワッティング防止のため、区切り文字(ハイフン・ピリオド・アンダースコア)を除いて同名になる既存パッケージがあると新規公開を拒否する(例: demo-reel が既存だと demoreel は公開不可。逆方向も同様)。エラーは「Package name too similar to existing package」とスコープ付き名への変更提案を含む E403。
判断基準・手順
- 空き確認では候補名とその区切り文字変種(ハイフンあり/なしの両方)をレジストリに問い合わせる。両方が 404 の候補だけを採用候補に残す。
- このルールは防御にも使える: どちらかの変種を取得すれば、もう一方の変種を第三者が取得することもできなくなる。
- 衝突した場合の選択肢は (1) スコープ付き(@user/name。bin 名は短名のままにできるが npx 初回コマンドが長い)、(2) 別名への改名。公開前なら改名の方が将来の互換負債がない。公開前の最終タイミングで、利用側契約(設定ディレクトリ名・スキル名等、パッケージ名由来のもの)ごと見直す。
- 名前は現在の機能でなく拡張予定の外延で選ぶ。出力形態が増える予定(例: 動画→スクショ・検証)があるなら、特定出力に寄った名より入力(シナリオ等)軸の汎用名の方が崩れにくい。
検証
公開前に npm publish --dry-run ではこのルールは検出されない(サーバー側判定のため)。確実には候補名と全区切り変種のレジストリ URL を事前に確認するしかなく、最終確認は実際の publish になる。