OSV-Scanner は、プロジェクトの package-lock.json や go.mod などから依存ライブラリの一覧を読み取り、既知の脆弱性があるものを教えてくれるツールです。自分のプロジェクトのフォルダを指定して 1 回実行するだけで結果が出ます。
この記事は、npm や pip などのパッケージを使って開発している人に向けています。読み終えると、次のことができるようになります。
- 自分のプロジェクトの依存ライブラリに既知の脆弱性がないか調べる
- OSV-Scanner が外部に何を送るのかを理解し、必要ならオフラインで使う
- コミット前に自動で調べる(pre-commit)
OSV-Scanner でできること
OSV-Scanner の動きは 2 段階です。まず、プロジェクトやコンテナイメージから使っているパッケージを取り出します。次に、そのパッケージを脆弱性データベースの OSV.dev と照らし合わせます。
| サブコマンド | 調べるもの |
|---|---|
scan source |
ソースコードのフォルダ。scan だけでもこれになります |
scan image |
コンテナイメージ |
fix |
脆弱性を直すためのバージョンアップ案を出します(実験的な機能) |
対応する言語は C/C++、Go、Java、JavaScript、Python、Rust など、パッケージマネージャーは npm、pip、yarn、Maven、Go modules、Cargo などです。対応している lockfile の一覧は公式ドキュメントにあります。
fix コマンドを使ったときを除きます)。また、照らし合わせるのはデータベースに載っている既知の脆弱性だけです。自分で書いたコードのバグは見つけません。OSV.dev に送るもの
公式 README によると、通常の実行では OSV.dev の API に次の情報を送ります。
- パッケージの名前
- バージョン
- エコシステム(npm、PyPI など)
- C/C++ のコードを調べるときのファイルのハッシュ値
依存関係の解決やライセンスの確認には deps.dev の API も使い、パッケージ名、バージョン、エコシステムを送ります。どちらの場合も、ソースコードそのものは送りません。
社外に依存ライブラリの一覧を出したくないときは、オフラインモードを使います。--offline を付けると、手元にダウンロードしたデータベースだけで照合し、プロジェクトや依存関係の情報をどこにも送りません。
安全な試し方:自分のプロジェクトを調べる
-
リリース一覧から、使っている OS 用のファイルをダウンロードします。Windows では
winget install Google.OSVScanner、macOS ではbrew install osv-scannerでも入ります。 -
自分のプロジェクトのフォルダを指定して実行します。
-rを付けると、サブフォルダの中まで調べます。osv-scanner scan source -r ./my-project -
結果の表を見ます。
OSV URLの列に脆弱性の詳細ページ、FIXED VERSIONの列に修正済みのバージョンが出ます。--と表示されていれば、まだ修正版がありません。
外部に何も送らずに試したいときは、次のように実行します。1 回目にデータベースをダウンロードし、以降は手元のデータだけで照合します。
osv-scanner --offline --download-offline-databases ./my-project
主な使い方
| やりたいこと | コマンド |
|---|---|
| lockfile を 1 つだけ調べる | osv-scanner scan -L package-lock.json |
| 結果を JSON で出す | osv-scanner scan -L package-lock.json --format json |
| 結果をファイルに保存する | osv-scanner scan -L package-lock.json --output-file scan-results.txt |
| 結果を HTML にしてブラウザで見る | osv-scanner scan -L package-lock.json --serve |
| コンテナイメージを調べる | osv-scanner scan image my-image-name:tag |
| 依存ライブラリのライセンスを確かめる | osv-scanner --licenses path/to/repository |
--serve は、HTML のレポートを手元のポート 8000 で表示します。
終了コードは、脆弱性がなければ 0、見つかれば 1、調べるファイルが見つからなければ 128 です。CI で使うときの判定に使えます。
pre-commit にも対応しています。.pre-commit-config.yaml に https://github.com/google/osv-scanner/ のフック osv-scanner を追加すると、コミット前に依存ライブラリを調べられます。
Trivy との違い
Trivy も依存ライブラリの脆弱性を調べられます。大きな違いは、照合のしかたと調べる範囲です。
| OSV-Scanner | Trivy | |
|---|---|---|
| 照合のしかた | 通常は OSV.dev の API に問い合わせる。--offline で手元のデータベースを使う |
脆弱性データベース(trivy-db)を手元にダウンロードして照合する |
| 調べる範囲 | 依存ライブラリの脆弱性とライセンスが中心 | 脆弱性に加えて、設定ミス、秘密情報、ライセンスも調べる |
依存ライブラリだけを手早く調べたいなら OSV-Scanner、コンテナや設定ファイルもまとめて調べたいなら Trivy、という使い分けができます。
注意点
- 調べる対象は、自分のプロジェクトか、調べる許可を得たプロジェクトに限ってください。
fixコマンドは、信頼できないプロジェクトで使わないでください。公式ドキュメントは、パッケージマネージャーがスクリプトを実行したり、プロジェクトに書かれた外部のレジストリにつないだりすることがあると注意しています。- 社外秘のプロジェクトでは、パッケージ名とバージョンが OSV.dev に送られることを確かめてから使ってください。送りたくなければ
--offlineを使います。
次に読む
出典
- 公式リポジトリ README(データの送信先とプライバシー)github.com/google/osv-scanner
- ドキュメント:インストールgoogle.github.io/osv-scanner/installation/
- ドキュメント:使い方google.github.io/osv-scanner/usage/
- ドキュメント:オフラインモードgoogle.github.io/osv-scanner/usage/offline-mode/
- ドキュメント:出力形式と終了コードgoogle.github.io/osv-scanner/output/
- Trivy 公式リポジトリ READMEgithub.com/aquasecurity/trivy
- Trivy ドキュメント:データベースtrivy.dev/docs/latest/guide/configuration/db/
確認日 2026-10-24
似たツール
Gitleaks
影響範囲 手元だけGit リポジトリやファイルに紛れ込んだパスワード、API キー、トークンなどの秘密情報を見つけるコマンドラインツール。
- 用途
- 防御
- 形式
- コマンドライン
- 難易度
- 初級
- ライセンス
- 自由に使えるMIT
- 分類
- 脆弱性スキャン
Trivy
影響範囲 手元だけコンテナイメージやコード、Kubernetes の脆弱性・設定ミス・埋め込まれた秘密情報を見つけるスキャナー。
- 用途
- 防御
- 形式
- コマンドライン
- 難易度
- 初級
- ライセンス
- 自由に使えるApache-2.0
- 分類
- 脆弱性スキャン/コンテナ・クラウド
Vuls
影響範囲 外に届くサーバーに入っているパッケージを調べ、既知の脆弱性(CVE)に当たるものを一覧にする脆弱性スキャナー。エージェントを入れずに使えます。
- 用途
- 防御
- 形式
- コマンドライン
- 難易度
- 中級
- ライセンス
- 条件つきGPL-3.0
- 分類
- 脆弱性スキャン