
依存ライブラリの脆弱性を定期チェックする仕組み|一人で続ける
npm install や composer install を打つたびに、何十、何百というライブラリが一緒に入ってくる。自分が直接呼んでいるのはほんの数個でも、その裏でさらに別のライブラリがぶら下がっている。package-lock.json を開いて、あの延々と続く行を見たとき、「この中のどれかに、もう脆弱性が見つかっているかもしれない」と、うっすら不安になったことはありませんか。
でも、いざ確かめようとすると、どこから見ればいいのか分からない。OSやミドルウェアのパッチは意識していても、アプリが抱えている依存ライブラリまでは手が回らない——一人で保守を背負っていると、ここは本当に後回しになりやすい場所ですよね。
安心してください。これは、あなたの注意力が足りないからではありません。チェックが「自分で取りに行く」手作業のままで、仕組みになっていないだけです。依存ライブラリの世界には、無料で使える確認ツールと通知の仕組みがそろっています。今日は、それを一人でも続けられる「定期チェック」に組み込む手順を、一緒に組み立てていきましょう。全部を一度に整えなくて大丈夫。まずはコマンド一つ叩くところからで十分です。
結論:①まずnpm audit/composer auditなど手元のコマンドで今の状態を一度見える化し、②GitHub の Dependabot alerts を有効化して「向こうから届く」通知に切り替え、③更新は「悪用の実態(KEV等)× 自分の環境で効くか」で優先度をつけて、まとめてではなく小さく当てる。この順で、まずはコマンド一つから。
依存の管理方法(npm・Composer・pip・Maven・Go modules など)やホスティング(GitHub・GitLab・自前)で、使えるツールも手順も変わります。本文は自分の構成に読み替えつつ、深刻度や対応の要否は必ず公式情報・一次情報で確認してください。
なぜ「依存ライブラリのチェック」だけ後回しになるのか
- OSやミドルウェアと違い、依存ライブラリは数が多く・入れ替わりが速いので、目視では追いきれない
package-lock.jsonの中身は「自分が入れた覚えのないもの(間接依存)」だらけで、どこを見ればいいか分からない- チェックが手作業(気が向いたときにコマンドを叩く)なので、忙しい日は飛ぶし、そのまま何か月も空く
- いざ警告が出ても「更新して壊れないか」が怖くて、結局そのまま閉じてしまう
どれも「もっと気をつける」では解けません。だから、毎回思い出して確認するのをやめて、一度見える化 → 通知は向こうから届く形にする → 更新は小さく優先度順に、という仕組みに寄せていきます。順番に見ていきましょう。
まず言葉を整える:直接依存・間接依存・ロックファイル・SCA

判断に使う言葉は、実はそう多くありません。役割で分けて覚えると、警告を見たときに迷いません。
- 直接依存(自分の
package.json/composer.jsonに自分で書いて入れたライブラリ):更新の判断がしやすい。バージョンも自分で選べる - 間接依存(直接依存がさらに内部で使っている、自分では書いていないライブラリ):数はこちらが圧倒的に多い。脆弱性はここに潜みがちで、直接は指定できないことも多い
- ロックファイル(
package-lock.json・composer.lock・poetry.lockなど、実際に入る全部のバージョンを固定した記録):チェックはこの「実際に入るバージョン」を見て行う。ここを見ないと本当の状態は分からない - SCA(Software Composition Analysis=使っている依存を一覧にして既知の脆弱性と照合する仕組み。
npm auditや Dependabot もこの一種):一つずつ手で調べる代わりに、丸ごと照合してくれる道具
ポイントは、脆弱性は「自分が入れた覚えのない間接依存」に多いこと。だから目視では見つけられません。ロックファイル全体を機械に照合させる——これがSCAの発想で、以降の手順はすべてこの考え方に沿っています。深刻度の読み方(CVE・CVSS・KEV)は脆弱性情報の集め方と優先度の付け方で整理したものと同じ軸を使います。
手順1:まず手元のコマンドで「今の状態」を一度見える化する

仕組みを作る前に、まず「今どうなっているか」を一度見ておきましょう。多くのパッケージ管理ツールには、最初から脆弱性チェックのコマンドが付いています。追加インストールなしで、今すぐ試せます。
- Node.js(npm):
npm audit。深刻度別に何件あるかが出ます。npm audit --production(実行環境に入るものだけ)で、開発用ツールの警告を除いて本番影響に絞れます - PHP(Composer):
composer audit。composer.lockを見て既知の脆弱性を照合します - Python:
pip-audit(要インストール)。入っているパッケージを照合します - その他:yarn なら
yarn npm audit、pnpm ならpnpm auditなど、多くのツールに同等の機能があります
大事なのは、この最初の1回で驚かないことです。長く運用してきたシステムなら、警告が数十件出ることも珍しくありません。全部を今日直す必要はありません。今は「棚卸しとして現状を把握する」だけで十分。件数と、そのうち深刻度が高いものが何件あるかをメモしておきましょう。それが、次の優先度づけの材料になります。
注意:npm audit fix --force のような「まとめて自動修正」は、依存を大きく上げて動かなくなることがあります。最初の1回ではまだ直さず、まず見るだけにしてください。修正は手順3で小さくやります。
手順2:通知を「向こうから届く」形にする(Dependabot)
一度見えても、手で毎回コマンドを叩く運用は続きません。忙しい日は飛ぶからです。そこで、新しい脆弱性が見つかったら向こうから知らせてくれる仕組みに切り替えます。コードを GitHub に置いているなら、無料で使える Dependabot alerts が一番手軽です。
- Dependabot alerts(脆弱性の通知):リポジトリの設定でオンにするだけ。ロックファイルを見て、既知の脆弱性が見つかると通知が届きます。GitHub の Settings →「Code security」から有効化できます
- Dependabot security updates(修正版への更新PRを自動作成):脆弱性が見つかったとき、修正されたバージョンへ上げるプルリクエストを自動で作ってくれます。いきなり本番に入るわけではなく、あなたがレビューして初めて反映されるので、まず作らせて中身を見る、という使い方ができます
- CI に組み込む:GitHub 以外や、より確実にしたいなら、
npm auditやcomposer auditをCI(GitHub Actions など)のパイプラインに入れて、一定以上の深刻度が出たら知らせる形にもできます
まずは alerts をオンにするだけで構いません。それだけで「気づかないうちに何か月も放置」がなくなります。更新PRの自動作成は、通知に慣れてから足せば十分です。GitLab や他のホスティングにも同種の依存スキャン機能があるので、自分の環境の一次情報で確認してみてください。
なお、WordPress のようにライブラリではなくプラグインで機能を足している場合は、考え方は同じでも道具が変わります。そちらはWordPress等のプラグイン更新で壊さないための手順を参考にしてください。
手順3:更新は「優先度順」に「小さく」当てる
通知が届くようになると、今度は「全部すぐ直さなきゃ」と焦りがちです。でも、依存の更新は本番を壊すリスクがある作業。だから、急ぐものと後回しでいいものを分けて、小さく当てるのがコツです。優先度は、深刻度の数字だけでは決めません。
- 急ぐ:実際に悪用が確認されている(KEVに載っている)/外部から届く経路で使っている機能/認証・決済など重要な処理に関わる依存
- 落ち着いて:開発時にしか使わない(本番に入らない)依存/その脆弱な機能を自分は呼んでいない/外から到達できない場所にある
同じ深刻度でも、「本番に入るか」「外から届くか」「その機能を使っているか」で急ぎ方はまるで変わります。この考え方はセキュリティパッチ適用の進め方と同じです。そして更新するときは、一度にまとめて上げない。1つ(または関連する小さなまとまり)ずつ上げて、検証環境で動作を確認し、問題なければ本番へ——を繰り返します。まとめて上げて壊れると、どれが原因か切り分けられなくなります。
更新した内容は、いつ・どの依存を・なぜ上げたかを記録に残しておくと、あとで「なぜこのバージョンなんだっけ」に困りません。変更管理台帳の付け方の1行に足すだけで十分です。
チェックリスト:明日からの依存脆弱性チェック

まずはこれだけ、上から順に。全部そろえる必要はありません。ひとつ潰すごとに、確実に楽になります。
- 自分の環境のパッケージ管理ツールを確認した(npm / Composer / pip など)
-
npm audit(または相当コマンド)を1回叩いて、今の件数と深刻度を見た - 最初の1回では まだ
--force修正はしない(見るだけにした) - GitHub なら Dependabot alerts を有効化した(通知が向こうから届く形にした)
- 通知に慣れたら security updates(更新PR自動作成)を足すか検討する
- 更新は「悪用の実態 × 本番影響 × 外部到達」で優先度をつけると決めた
- 更新は一度にまとめず、小さく当てて検証してから本番、と決めた
- 上げた依存とバージョンを変更管理の記録に1行残すことにした
依存ライブラリの数は、これからも増えていきます。でも、それを一人で全部暗記して見張る必要は、もうありません。今日、コマンドを一つ叩いて通知をひとつオンにすれば、あとは仕組みが代わりに見ていてくれます。あなたは「届いたものに、落ち着いて優先度をつける」ことだけに集中すればいい。まずは npm audit の1行から。ここまで読んだあなたなら、もう半分は動き出しています。
関連記事:
- 脆弱性情報(CVE)の集め方と優先度の付け方|一人で回す
- OS・ミドルウェアのセキュリティパッチ適用の進め方
- サーバー・サービスの構成情報を1枚にまとめる方法
- WordPress等のプラグイン更新で壊さないための手順
本記事は一般的な実務情報です。コマンド・設定・手順は環境やバージョンで挙動が異なります。脆弱性の深刻度や対応の要否、更新の可否は、本番反映前に検証環境と公式情報(各ツールのドキュメント・一次情報)で必ずご確認ください。