Madogiwa Blog

主に技術系の学習メモに使っていきます。

lockファイル内のライブラリがどのライブラリによってinstallされているか調べる方法MEMO

間接的に依存しているライブラリに脆弱性がある場合等、自身のpackgae.jsonのどのpackageを更新すれば解消できるか等を調べたい場合、lockファイルを頑張って確認するのは大変です。

package manager(yarn, npm)の機能を使うと割と簡単に調べられたのでメモ🗒

yarn

yarnだとwhyという機能が提供されていています。

yarn why | Yarn

使い方は簡単でyarn why package-nameで実行すると以下のように依存関係を出力してくれます。

$ yarn why minimist
yarn why v1.22.17
[1/4] 🤔  Why do we have the module "minimist"...?
[2/4] 🚚  Initialising dependency graph...
[3/4] 🔍  Finding dependency...
[4/4] 🚡  Calculating file sizes...
=> Found "minimist@1.2.6"
info Reasons this module exists
   - "@lhci#cli#chrome-launcher#mkdirp" depends on it
   - Hoisted from "@lhci#cli#chrome-launcher#mkdirp#minimist"
   - Hoisted from "@lhci#cli#update-notifier#latest-version#package-json#registry-auth-token#rc#minimist"
info Disk size without dependencies: "104KB"
info Disk size with unique dependencies: "104KB"
info Disk size with transitive dependencies: "104KB"
info Number of shared dependencies: 0
✨  Done in 0.20s.

info Reasons this module existsで最上位に記載されているpackageが自身が直接依存している(package.jsonに記載している)packageということですね。便利!

npm

npmではnpm lsという機能が提供されています。

docs.npmjs.com

こちらも使い方は簡単でnpm ls package-nameで依存関係のツリーを表示してくれます。

$ npm ls kind-of
my_package@1.0.0 /foo/bar
└─┬ webpack-cli@4.4.0
  └─┬ webpack-merge@5.7.3
    └─┬ clone-deep@4.0.1
      ├── kind-of@6.0.3
      └─┬ shallow-clone@3.0.1
        └── kind-of@6.0.3 deduped

my_packageを除いた最上位に記載されているpackageが自身が直接依存している(package.jsonに記載している)packageということですね。便利!

おまけ: RubyGems

bundle exec gem dependency -Rで調べられるっぽい。リストが間接的に依存しているもので、Used byにinstall済みで直接 nokogiriに依存しているライブラリっぽい(?)、引数にはgem名を表す正規表現を指定する。完全一致にしたい場合には^foo$で完全一致に該当する正規表現を設定してあげれば良さそう。

bundle exec gem dependency -R "^nokogiri$"
Gem nokogiri-1.13.3-arm64-darwin
  bundler (~> 2.2, development)
  hoe-markdown (~> 1.4, development)
  minitest (~> 5.15, development)
  minitest-reporters (~> 1.4, development)
  racc (~> 1.4)
  rake (~> 13.0, development)
  rake-compiler (= 1.1.7, development)
  rake-compiler-dock (~> 1.2, development)
  rdoc (~> 6.3, development)
  rexical (~> 1.0.7, development)
  rubocop (~> 1.23, development)
  rubocop-minitest (~> 0.17, development)
  rubocop-performance (~> 1.12, development)
  rubocop-rake (~> 0.6, development)
  rubocop-shopify (~> 2.3, development)
  ruby_memcheck (~> 1.0, development)
  simplecov (~> 0.21, development)
  Used by
    rails-dom-testing-2.0.3 (nokogiri (>= 1.6))
    loofah-2.15.0 (nokogiri (>= 1.5.9))
    actiontext-7.0.2.3 (nokogiri (>= 1.8.5))
    xpath-3.2.0 (nokogiri (~> 1.8))
    capybara-3.36.0 (nokogiri (~> 1.8))
    reverse_markdown-2.1.1 (nokogiri (>= 0))

参考

qiita.com