💨

依存してる npm パッケージの作者を調べる

2022/09/27に公開

日々いろんな npm パッケージに依存してるわけですが、その作者が気になるときがある。

単純に気になるときもあるけど、調査が必要になるときもある。

たとえば最近 substack の GitHub アカウントが削除された。npm から消えたわけじゃないから、すぐに困るってことはないけど、誰にも移譲されていないリポジトリがあっとして、もし自分がそれに依存してしまっていたら代替を探したくなる。

また、自分が関わっている OSS プロジェクトでは過去のメンテナーが作ったたくさんのライブラリに依存していて、その人がすでにアクティブでなくなったいるため、やや悪い影響が出始めていたりする。

そのため、自分の依存している npm パッケージの作者をシュッと調べて、フォークするか移管してもらうか色々判断できると便利である。

ということでそれに役に立つツールを作った。

https://github.com/sosukesuzuki/your-deps-authors

npm に publish してあるので package.json が存在するディレクトリにいる状態で

npx your-deps-authors

を実行すると次のようなテーブルが表示される。

╔══════════════════════════════════╤═══════════════════╤════════════════════╗
║ name                             │ author            │ maintainers        ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ prettier                         │ James Long        │ jlongster,         ║
║                                  │                   │ lydell,            ║
║                                  │                   │ thorn0,            ║
║                                  │                   │ vjeux,             ║
║                                  │                   │ fisker,            ║
║                                  │                   │ suchipi,           ║
║                                  │                   │ duailibe,          ║
║                                  │                   │ ikatyang,          ║
║                                  │                   │ azz,               ║
║                                  │                   │ sosukesuzuki,      ║
║                                  │                   │ prettier-bot       ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ eslint                           │ Nicholas C. Zakas │ openjsfoundation,  ║
║                                  │                   │ eslintbot,         ║
║                                  │                   │ nzakas,            ║
║                                  │                   │ ivolodin           ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ npm-run-all                      │ Toru Nagashima    │ mysticatea         ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ table                            │ Gajus Kuizinas    │ gajus,             ║
║                                  │                   │ gajus-table        ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ @types/node                      │                   │ types              ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ eslint-plugin-import             │ Ben Mosher        │ jfmengels,         ║
║                                  │                   │ ljharb,            ║
║                                  │                   │ benmosher          ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ typescript                       │ Microsoft Corp.   │ typescript-bot,    ║
║                                  │                   │ weswigham,         ║
║                                  │                   │ sanders_n,         ║
║                                  │                   │ andrewbranch,      ║
║                                  │                   │ minestarks,        ║
║                                  │                   │ rbuckton,          ║
║                                  │                   │ sheetalkamat,      ║
║                                  │                   │ typescript-deploys ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ eslint-plugin-unicorn            │ Sindre Sorhus     │ sindresorhus       ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ eslint-config-prettier           │ Simon Lydell      │ lydell,            ║
║                                  │                   │ thorn0             ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ npm-registry-fetch               │ GitHub Inc.       │ fritzy,            ║
║                                  │                   │ darcyclarke,       ║
║                                  │                   │ nlf,               ║
║                                  │                   │ gar,               ║
║                                  │                   │ lukekarrys         ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ pkg-up                           │ Sindre Sorhus     │ sindresorhus       ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ @typescript-eslint/parser        │                   │ jameshenry         ║
╟──────────────────────────────────┼───────────────────┼────────────────────╢
║ @typescript-eslint/eslint-plugin │                   │ jameshenry         ║
╚══════════════════════════════════╧═══════════════════╧════════════════════╝

これで author や maintainers をざっくり見て「ヤバそうじゃね?」と思ったら詳しく調査しにいく、みたいなユースケースで使える。

ちなみに、これは package.jsondependenciesdevDependencies しか見てない。ロックファイルも見ない。peerDependencies とかも見るようにしたほうがいいかもしれない。

本当は JSON とかでも吐けるようにして jq とかでフィルターできると便利なんだろうけど一旦テーブル表示と grep でいいやと思っている。

Discussion