はじめに
npm shrinkwrap
OpenClaw のソースチェックアウトでは pnpm-lock.yaml を使用します。公開される OpenClaw npm パッケージでは、npm の公開可能な依存関係ロックファイルである npm-shrinkwrap.json を使用するため、パッケージのインストールにはリリース時にレビューされた依存関係グラフが使用されます。
重要な理由
Shrinkwrap は、npm パッケージとともに配布される依存関係ツリーの記録です。インストールする推移的依存関係の正確なバージョンを npm に指示します。
| ファイル | 重要となる場所 | 意味 |
|---|---|---|
pnpm-lock.yaml |
OpenClaw のソースチェックアウト | メンテナー向けの依存関係グラフ |
npm-shrinkwrap.json |
公開される npm パッケージ | ユーザー向けの npm インストールグラフ |
package-lock.json |
ローカルの npm アプリ | OpenClaw の公開契約ではない |
OpenClaw のリリースでは、これは次を意味します。
- 公開パッケージは、インストール時に新しい依存関係グラフを生成するよう npm に要求しません。
- 依存関係の変更はロックファイルの差分に反映されるため、レビューできます。
- リリース検証では、ユーザーがインストールするものと同じグラフをテストします。
- パッケージサイズやネイティブ依存関係に関する予期しない問題が、公開前に明らかになります。
Shrinkwrap はサンドボックスではありません。それ自体で依存関係を安全にするものではなく、ホストの分離、openclaw security audit、パッケージの来歴、インストールのスモークテストに代わるものでもありません。
OpenClaw は Gateway、Plugin ホスト、モデルルーター、エージェントランタイムであるため、デフォルトのインストールは起動時間、ディスク使用量、ネイティブパッケージのダウンロード、サプライチェーンへの露出に影響します。Shrinkwrap はリリースレビューに安定した境界を提供します。レビュー担当者は推移的依存関係の変動を確認でき、検証ツールは予期しないロックファイルのずれを拒否し、Plugin パッケージはルートパッケージに依存せず、独自にロックされた依存関係グラフを保持します。
生成と確認
ルートの openclaw npm パッケージ、OpenClaw が所有する npm Plugin パッケージ(例: @openclaw/discord)、および @openclaw/ai などの公開可能なワークスペースパッケージには、公開時に npm-shrinkwrap.json が含まれます。ワークスペース依存関係はルートパッケージとともに公開されるため、ルートの shrinkwrap から除外されます。代わりに、公開可能な各ワークスペースパッケージが独自の推移的依存関係ツリーを固定します。適切な Plugin パッケージでは、明示的な bundledDependencies を使用して公開することもでき、インストール時の解決だけに依存せず、Plugin の tarball にランタイム依存関係ファイルを含められます。
# shrinkwrap で管理されるすべてのパッケージ(ルート + 公開可能な Plugin)pnpm deps:shrinkwrap:generatepnpm deps:shrinkwrap:check # ルートパッケージのみpnpm deps:shrinkwrap:root:generatepnpm deps:shrinkwrap:root:check # 現在の変更セットの影響を受けるパッケージのみpnpm deps:shrinkwrap:changed:generatepnpm deps:shrinkwrap:changed:checkジェネレーターは npm の公開可能なロック形式を解決しますが、pnpm-lock.yaml にまだ存在しない生成済みパッケージバージョンを拒否します。これにより、pnpm の依存関係の経過期間、オーバーライド、およびパッチレビューの境界が維持されます。
以下はセキュリティ上重要なものとしてレビューしてください。
pnpm-lock.yamlnpm-shrinkwrap.json- バンドルされた Plugin の依存関係ペイロード
package-lock.jsonのすべての差分
OpenClaw のパッケージ検証ツールは、新しいルートパッケージの tarball に shrinkwrap が含まれることを要求し、公開パッケージの package-lock.json を拒否します。Plugin の npm 公開パスでは、Plugin ローカルの shrinkwrap を確認し、パッケージローカルのバンドル依存関係をインストールしてから、パッケージ化または公開します。
公開パッケージの調査
ルートパッケージ:
npm pack openclaw@<version> --json --pack-destination /tmp/openclaw-packtar -tf /tmp/openclaw-pack/openclaw-<version>.tgz | grep '^package/npm-shrinkwrap.json$'Plugin パッケージ:
npm pack @openclaw/discord@<version> --json --pack-destination /tmp/openclaw-plugin-packtar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/npm-shrinkwrap.json$'tar -tf /tmp/openclaw-plugin-pack/openclaw-discord-<version>.tgz | grep '^package/node_modules/'背景情報: npm-shrinkwrap.json。