Pythonで開発をしていると、pip installでライブラリを追加する場面がよくあります。
ただ、そのライブラリに既知の脆弱性が見つかっていたらどうでしょうか。この記事では、Python初心者にもわかるように、pip-auditの役割、使い方、実務での考え方を解説します。
pip-auditとは¶
pip-auditは、Python環境やrequirements.txtのライブラリを調べて、既知の脆弱性がないか確認するためのツールです。簡単に言えば、Pythonライブラリの健康診断のようなものです。
たとえば、DjangoやFlask、requestsなどに過去の脆弱性があり、手元のバージョンが影響を受ける場合、pip-auditが教えてくれます。
ここで大事なのは、pip-auditが見ているのはすでに公表されている脆弱性だという点です。未知の攻撃や悪意ある新規パッケージを何でも見抜ける魔法の道具ではありません。
とはいえ、初心者が最初に導入するセキュリティ対策としてはかなり有効です。コマンド一つで始められ、Python学習中の人にもおすすめです。
そもそも脆弱性とは何か¶
脆弱性とは、ソフトウェアにある安全上の弱点のことです。悪用されると、情報漏えい、改ざん、不正ログイン、サービス停止などにつながることがあります。
初心者のうちは、自分のコードだけを見がちです。しかし実際のアプリは、Python本体、外部ライブラリ、OS、サーバー設定など、いろいろな部品の上で動いています。
特にPythonでは、外部ライブラリを使う機会が多いです。便利な反面、依存している部品が増えるほど、確認すべき範囲も広くなります。
Pythonのライブラリ管理については、以下の記事で詳しく解説しています。
【関連記事】Pythonのpipとは?Pythonのライブラリを管理するコマンド
なぜpip-auditが必要なのか¶
Python開発では、pip install ライブラリ名だけで簡単に機能を追加できます。これはPythonの大きな魅力です。
一方で、簡単に追加できるからこそ、古いライブラリをそのまま使い続けてしまうこともあります。数年前に作ったアプリを久しぶりに動かしたら、依存ライブラリがかなり古いこともあります。
私もエンジニアとして10年ほど開発に関わってきましたが、古いプロジェクトを引き継いだときは、コードの綺麗さだけでなく依存ライブラリも見ます。
なぜなら、コードが読みやすくても、依存ライブラリが放置されていると運用上のリスクになるからです。これは初心者の学習用アプリでも同じです。
pip-auditでできること¶
pip-auditでできることを、初心者向けに整理してみましょう。
| できること | 何を確認するか | 初心者が見るポイント |
|---|---|---|
| 現在のPython環境をチェック | インストール済みライブラリ | まずはpip-auditだけ実行する |
| requirements.txtをチェック | プロジェクトの依存関係 | pip-audit -r requirements.txtを使う |
| 修正版の有無を確認 | どのバージョンへ上げるべきか | Fix Versionsの列を見る |
| JSONやMarkdownで出力 | CIやレポート用の形式 | 最初は通常表示で十分 |
| 自動修正を試す | 脆弱な依存をアップグレード | いきなり本番で使わない |
最初は、今の環境とrequirements.txtをチェックすることだけ覚えれば大丈夫です。
pip-auditのインストール方法¶
pip-auditはpipでインストールできます。公式情報ではPython 3.10以上が必要です。
まずはターミナルやコマンドプロンプトで、次のコマンドを実行します。
python -m pip install pip-audit
Windowsでpythonがうまく動かない場合は、環境によってpy -m pip install pip-auditを使うこともあります。
インストールできたか確認するには、pip-audit --helpを実行します。説明が表示されれば準備完了です。
まずは仮想環境で試そう¶
初心者に強くおすすめしたいのは、いきなりPC全体のPython環境で試すのではなく、仮想環境を使うことです。仮想環境を使うと、プロジェクトごとにライブラリを分けて管理できます。
たとえば、次のように新しい環境を作れます。
python -m venv .venv
macOSやLinuxならsource .venv/bin/activate、WindowsのPowerShellなら.venv\Scripts\Activate.ps1で有効化します。そのあとで、必要なライブラリとpip-auditを入れます。
python -m pip install flask pip-audit
仮想環境がわからないまま進めると、どのプロジェクトに何を入れたのか混乱しやすいです。【関連記事】Pythonの仮想環境(venv)って何のためにある?プロジェクトごとに混ぜない管理法もあわせて読むと整理しやすくなります。
基本の使い方¶
いちばん簡単な使い方は、プロジェクトの仮想環境を有効化した状態で、次のコマンドを実行する方法です。
pip-audit
これだけで、現在の環境にインストールされているPythonパッケージを調べてくれます。問題が見つからなければ、既知の脆弱性は見つからなかったという内容が表示されます。
もし脆弱性が見つかると、パッケージ名、現在のバージョン、脆弱性ID、修正バージョンなどが表示されます。実際の表示は環境によって変わりますが、イメージは次のような形です。
Name Version ID Fix Versions
--------- -------- --------------- ------------
example 1.0.0 PYSEC-XXXX-XXX 1.0.2
ここで大事なのは、脆弱性IDを見て怖がりすぎないことです。まず見るべきなのは、どのライブラリが影響を受けているか、修正版があるか、すぐにアップデートできるかです。
requirements.txtをチェックする方法¶
実務や学習用プロジェクトでは、ライブラリ一覧をrequirements.txtにまとめることがあります。たとえば次のようなファイルです。
flask==3.0.0
requests==2.31.0
このファイルを対象にチェックする場合は、次のように実行します。
pip-audit -r requirements.txt
-rはrequirementsファイルを指定するためのオプションです。pip install -r requirements.txtと似た形なので、見覚えがある人もいるかもしれません。
ただし注意点があります。pip-audit -r requirements.txtは、依存関係の解決を行うため、完全に安全な読み取り専用チェックだと思い込まないほうがよいです。
公式ドキュメントでも、信頼できない入力を気軽に監査対象にすべきではないという考え方が示されています。知らない人から受け取ったrequirements.txtを、そのまま自分のPCで実行するのは避けましょう。
出力結果の読み方¶
pip-auditの出力で、初心者が最初に見るべきなのは3つです。全部を完璧に理解しようとしなくて大丈夫です。
まずはNameです。これは脆弱性が見つかったパッケージ名です。
次にVersionです。これは今使っているバージョンです。
最後にFix Versionsです。これは修正済みとされるバージョンの候補です。
たとえばrequests 2.25.0に問題があり、2.32.0で修正されているなら、アップデートを検討します。基本的には、修正版へ上げてテストを実行する流れになります。
python -m pip install -U requests
python -m pytest
ここでテストが通れば安心感が増します。逆にテストがないと、更新して壊れていないかを人間の目で確認する必要があります。
自動修正の使い方と注意点¶
pip-auditには、脆弱な依存関係を自動で修正しようとする--fixオプションがあります。便利ですが、初心者ほど慎重に使うべきです。
pip-audit --fix
このコマンドは、修正可能なライブラリをアップグレードしようとします。小さな個人プロジェクトなら便利ですが、仕事の本番環境でいきなり実行するのはおすすめしません。
なぜなら、ライブラリのバージョンを上げると、動作が変わることがあるからです。脆弱性は直ったけれど、アプリの一部が動かなくなった、ということもありえます。
私の感覚では、--fixは自動で全部任せる機能というより、更新候補を試すための補助機能です。実務では、更新前にブランチを切り、変更内容を確認し、テストを通してから取り込むほうが安全です。
pyproject.tomlを使っている場合¶
最近のPythonプロジェクトでは、requirements.txtではなくpyproject.tomlで依存関係を管理することも増えています。環境や管理ツールによって運用は変わります。
初心者のうちは、まず現在の仮想環境に依存関係をインストールしてから、pip-auditを実行する方法がわかりやすいです。つまり、プロジェクトを動かせる状態にしてから、その環境をチェックします。
python -m pip install -e .
pip-audit
pyproject.tomlにまだ慣れていない方は、以下の記事もご覧ください。
【関連記事】pyproject.tomlとは?これからのPythonプロジェクト管理入門
GitHub Actionsで自動チェックする¶
慣れてきたら、GitHub Actionsで自動チェックするのもおすすめです。プッシュやプルリクエストのたびに確認できるため、問題に早く気づけます。
たとえば、シンプルな例は次のようになります。
name: Python dependency audit
on:
push:
pull_request:
jobs:
pip-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install pip-audit
run: python -m pip install pip-audit
- name: Audit dependencies
run: pip-audit -r requirements.txt
この設定では、requirements.txtを対象に脆弱性チェックを行います。脆弱性が見つかるとジョブが失敗するため、問題に気づきやすくなります。
最初から厳しすぎる設定にすると開発が止まりやすいので、まずは個人プロジェクトで試すとよいです。
pip-auditと他のセキュリティツールの違い¶
ここで少し整理しておきましょう。Pythonのセキュリティ対策には、似たようなツールがいくつかあります。
| ツール | 主な目的 | 見ているもの |
|---|---|---|
| pip-audit | 依存ライブラリの既知脆弱性チェック | インストール済みパッケージやrequirements |
| Bandit | Pythonコードの危険な書き方を検出 | 自分が書いたソースコード |
| Dependabot | 依存関係の更新通知 | GitHub上の依存ファイル |
| pip list --outdated | 古いパッケージ確認 | 最新版との差分 |
pip-auditは、自分のコードの品質を見るツールではありません。あくまで、使っているライブラリに公表済みの脆弱性がないかを見るツールです。
つまり、pip-auditを入れたからコードレビューが不要になるわけではありません。むしろ、コードレビュー、テスト、依存関係チェックを組み合わせることで安全性が上がります。
pip-auditで防げないこと¶
ここはかなり大事です。pip-auditは便利ですが、万能ではありません。
たとえば、悪意ある新しいパッケージをインストールしてしまった場合、それがまだ脆弱性データベースに登録されていなければ検出できない可能性があります。最近話題になったPyPIのサプライチェーン攻撃のように、パッケージそのものが悪意を持っているケースもあります。
また、あなたのアプリの認証処理が間違っている、SQLの組み立て方が危ない、APIキーをGitHubに公開してしまった、という問題はpip-auditでは見つけられません。そこは別のチェックが必要です。
初心者に伝えたいのは、pip-auditはセキュリティ対策の入口であって、ゴールではないということです。まずは入口に立つだけでも大きな前進です。
初心者におすすめの運用手順¶
では、実際にどう運用すればよいのでしょうか。最初から完璧を目指す必要はありません。
おすすめは、プロジェクトを作ったタイミング、ライブラリを追加したタイミング、公開前のタイミングでpip-auditを実行することです。特に公開前チェックに入れると、かなり安心できます。
流れとしては、まず仮想環境を作ります。次に必要なライブラリを入れて、アプリを動かします。
そのあと、pip-auditを実行します。問題が出たら、修正版があるか確認して、更新して、テストします。
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
pip-audit -r requirements.txt
python -m pytest
Windowsの場合は、仮想環境の有効化コマンドだけ読み替えれば大丈夫です。コマンドが少し違うだけで、考え方は同じです。
エンジニア歴10年の視点で伝えたいこと¶
セキュリティと聞くと、初心者ほど難しく感じると思います。正直、私も最初の頃はCVEや脆弱性IDを見ても、何をすればよいのかよくわかりませんでした。
でも実務を続ける中で、セキュリティは特別な人だけがやるものではなく、日々の開発習慣に組み込むものだと感じるようになりました。pip-auditは、その習慣化にちょうどよいツールです。
特に印象に残っているのは、長く放置されたプロジェクトほど、最初の棚卸しに時間がかかることです。ライブラリの更新を後回しにしていると、いつかまとめて大変になります。
だからこそ、初心者のうちから小さくチェックする癖をつけておくと強いです。毎日完璧にやる必要はありませんが、公開前や月1回の確認だけでも差が出ます。
まとめ¶
pip-auditは、Pythonライブラリの既知の脆弱性をチェックできる便利なツールです。コマンド一つで始められ、Python初心者でも導入しやすいです。
まずは仮想環境を作り、pip-auditをインストールし、現在の環境やrequirements.txtをチェックしてみましょう。脆弱性が見つかったら、修正版を確認し、アップデートして、テストする流れが基本です。
ただし、pip-auditは万能ではありません。悪意ある新規パッケージや、自分のコードのセキュリティミスまで全部見抜けるわけではないからです。
それでも、依存ライブラリを放置しない習慣を作るにはとても良い入口です。Pythonでアプリを作るなら、pip installのあとにpip-auditを思い出せるようになるだけで、開発者として一歩レベルアップできます。
ここまでお読みいただきありがとうございました。