maven-dependency-audit について
maven-dependency-auditは、Mavenプロジェクトの保守担当者向けの依存関係監査スキルです。更新確認、依存ツリー分析、脆弱性スキャンを行い、優先順位付きのレポートにまとめます。
主な機能
- 01依存関係とプラグインの更新確認
- 02依存ツリーとバージョン競合の分析
- 03未使用の依存関係の特定
- 04依存関係の脆弱性スキャン
- 05優先順位付き監査レポートの作成
- 06依存関係の更新方針の提示
活用シーン
- 01リリース前にMavenの依存関係を監査
- 02保守時に古い依存や未使用依存を発見
- 03セキュリティ勧告後に脆弱性をスキャン
- 04推移的依存関係を追跡して競合を解消
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ decebals/ claude-code-java --skill maven-dependency-auditインストール後、Claude Code で/maven-dependency-auditを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
Maven 依存関係監査スキル
Maven の依存関係について、更新、脆弱性、競合を監査します。
使用するタイミング
- ユーザーが「依存関係を確認して」「依存関係を監査して」「古くなった依存関係」と言った場合
- リリース前
- 定期的なメンテナンス(月次を推奨)
- セキュリティアドバイザリの公開後
監査ワークフロー
- 更新を確認 - 古くなった依存関係を探します
- ツリーを分析 - 競合と重複を探します
- セキュリティスキャン - 脆弱性を確認します
- 報告 - 優先順位を付けたアクションをまとめます
1. 古くなった依存関係を確認する
コマンド
mvn versions:display-dependency-updates
出力の分析
[INFO] The following dependencies in Dependencies have newer versions:
[INFO] org.slf4j:slf4j-api ......................... 1.7.36 -> 2.0.9
[INFO] com.fasterxml.jackson.core:jackson-databind . 2.14.0 -> 2.16.1
[INFO] org.junit.jupiter:junit-jupiter ............. 5.9.0 -> 5.10.1
更新を分類する
| カテゴリ | 条件 | 対応 |
|---|---|---|
| セキュリティ | 新しいバージョンに CVE の修正が含まれる | できるだけ早く更新 |
| メジャー | x.0.0 の変更 | 変更履歴を確認し、徹底的にテスト |
| マイナー | x.y.0 の変更 | 通常は安全ですが、テストしてください |
| パッチ | x.y.z の変更 | 安全で、テストは最小限で済みます |
プラグインの更新も確認する
mvn versions:display-plugin-updates
2. 依存関係ツリーを分析する
ツリー全体
mvn dependency:tree
特定の依存関係で絞り込む
mvn dependency:tree -Dincludes=org.slf4j
競合を見つける
次の項目を確認します:
[INFO] +- com.example:module-a:jar:1.0:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.36:compile
[INFO] +- com.example:module-b:jar:1.0:compile
[INFO] | \- org.slf4j:slf4j-api:jar:2.0.9:compile (omitted for conflict)
フラグ:
(omitted for conflict)- バージョンの競合が Maven によって解決されました(omitted for duplicate)- 同じバージョンで、問題はありません- 同じライブラリの複数バージョン - 実行時の問題が発生する可能性があります
未使用の依存関係を分析する
mvn dependency:analyze
出力:
[WARNING] Used undeclared dependencies found:
[WARNING] org.slf4j:slf4j-api:jar:2.0.9:compile
[WARNING] Unused declared dependencies found:
[WARNING] commons-io:commons-io:jar:2.11.0:compile
3. セキュリティ脆弱性スキャン
オプション A:OWASP Dependency-Check(推奨)
pom.xml に追加します:
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>9.0.7</version>
</plugin>
実行します:
mvn dependency-check:check
出力:target/dependency-check-report.html に HTML レポートが生成されます
オプション B:Maven Dependency Plugin
mvn dependency:analyze-report
オプション C:GitHub Dependabot
GitHub を使用している場合は、リポジトリの設定で Dependabot アラートを有効にします。
深刻度レベル
| CVSS スコア | 深刻度 | 対応 |
|---|---|---|
| 9.0 - 10.0 | 重大 | 直ちに更新 |
| 7.0 - 8.9 | 高 | 数日以内に更新 |
| 4.0 - 6.9 | 中 | 数週間以内に更新 |
| 0.1 - 3.9 | 低 | 都合のよいタイミングで更新 |
4. 監査レポートを生成する
出力形式
## Dependency Audit Report
**Project:** {project-name}
**Date:** {date}
**Total Dependencies:** {count}
### Security Issues
| Dependency | Current | CVE | Severity | Fixed In |
|------------|---------|-----|----------|----------|
| log4j-core | 2.14.0 | CVE-2021-44228 | Critical | 2.17.1 |
### Outdated Dependencies
#### Major Updates (Review Required)
| Dependency | Current | Latest | Notes |
|------------|---------|--------|-------|
| slf4j-api | 1.7.36 | 2.0.9 | API changes, see migration guide |
#### Minor/Patch Updates (Safe)
| Dependency | Current | Latest |
|------------|---------|--------|
| junit-jupiter | 5.9.0 | 5.10.1 |
| jackson-databind | 2.14.0 | 2.16.1 |
### Conflicts Detected
- slf4j-api: 1.7.36 vs 2.0.9 (resolved to 2.0.9)
### Unused Dependencies
- commons-io:commons-io:2.11.0 (consider removing)
### Recommendations
1. **Immediate:** Update log4j-core to fix CVE-2021-44228
2. **This sprint:** Update minor/patch versions
3. **Plan:** Evaluate slf4j 2.x migration
よくあるシナリオ
シナリオ:リリース前に確認する
# Quick check
mvn versions:display-dependency-updates -q
# Full audit
mvn versions:display-dependency-updates && \
mvn dependency:analyze && \
mvn dependency-check:check
シナリオ:依存関係が含まれる理由を調べる
mvn dependency:tree -Dincludes=commons-logging
シナリオ:特定のバージョンを強制する(競合を解決する)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
</dependencies>
</dependencyManagement>
シナリオ:推移的依存関係を除外する
<dependency>
<groupId>com.example</groupId>
<artifactId>some-library</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
トークンの最適化
-q(quiet)フラグを使うと、出力を簡潔にできます- 特定の依存関係を探すときは、
-Dincludes=groupId:artifactIdで絞り込みます - コマンドを個別に実行し、結果を要約します
- 依存関係ツリー全体を貼り付けず、競合を要約します
コマンド早見表
| タスク | コマンド |
|---|---|
| 古くなった依存関係 | mvn versions:display-dependency-updates |
| 古くなったプラグイン | mvn versions:display-plugin-updates |
| 依存関係ツリー | mvn dependency:tree |
| 特定の依存関係を検索 | mvn dependency:tree -Dincludes=groupId |
| 未使用の依存関係 | mvn dependency:analyze |
| セキュリティスキャン | mvn dependency-check:check |
| バージョンを更新 | mvn versions:use-latest-releases |
| スナップショットを更新 | mvn versions:use-latest-snapshots |
更新戦略
保守的(本番環境向けに推奨)
- パッチバージョンは自由に更新します
- マイナーバージョンは基本的なテストを行ってから更新します
- メジャーバージョンには移行計画が必要です
積極的(開発が活発な場合)
# Update all to latest (use with caution!)
mvn versions:use-latest-releases
mvn versions:commit # or versions:revert
選択的
# Update specific dependency
mvn versions:use-latest-versions -Dincludes=org.junit.jupiter
コメント
Markdown 対応