🎄 本記事は ZOZO Advent Calendar 2025 シリーズ 8 の 22 日目です。
ぜひ他の記事もご覧ください。
はじめに
こんにちは!データシステム部 MA推薦ブロックのスミスと申します。
依存ライブラリの脆弱性対応は定期的に必要な作業です。しかし、バージョンのみ更新するだけでは、破壊的変更によって障害を引き起こすリスクがあります。
本記事では、GitHub Actions と Claude Code Action を組み合わせて、破壊的変更を検出しながらライブラリを自動更新する仕組みを構築してみたので、その方法を紹介します。
本記事は PoC を兼ねており、実際にどの程度まで破壊的変更を検出できるかは検証中です。
課題
前提
言語: Python
パッケージ管理ツール: Poetry
既存ツールの限界
依存関係の自動更新には Dependabot や Renovate などのツールがありますが、以下の課題があります。
| ツール | できること | できないこと |
|---|---|---|
| Dependabot | バージョン更新のPR作成 | 破壊的変更によるコード修正 |
| Renovate | バージョン更新のPR作成 | 破壊的変更によるコード修正 |
| pip-audit | 脆弱性の検出・レポート | バージョン更新・コード修正 |
既存ツールはバージョン番号の更新や破壊的変更の警告はできますが、それに伴うソースコードの修正は人間が行う必要があります。
破壊的変更の具体例: Pillow
例として、Pillow 10.0.0 では Image.ANTIALIAS が削除され、Image.LANCZOS または Image.Resampling.LANCZOS への置換が必要になりました。
参考: Pillow 10.0.0 Release Notes
# Pillow 9.x まで動作していたコード
from PIL import Image
def resize_image(image: Image.Image, size: tuple[int, int]) -> Image.Image:
return image.resize(size, Image.ANTIALIAS) # Pillow 10.x でエラー
このようなコードは、poetry update pillow を実行しただけでは問題に気づけません。インポートは成功するのですが、該当箇所が実行されるまでエラーが発生しないためです。
解決アプローチ
GitHub Actions で脆弱性を検出し、Claude Code Action が自動でソースコードの修正 PR を作成する仕組みを構築しました。
Claude Code Action とは
Claude Code Action は、Anthropic が提供する GitHub Action です。Issue や PR のコメントで @claude をメンションすると、Claude がコードベースを理解し、修正や実装を自動で行います。
できること:
- コード修正: ファイルの編集、作成、削除
-
コマンド実行:
poetry updateなどのシェルコマンド - Web検索: Changelog やドキュメントの確認
本記事では、この Claude Code Action を活用して、脆弱性修正と破壊的変更への対応を自動化します。
全体フロー
┌─────────────────┐
│ 設定ファイル │ 更新対象のディレクトリを選択
│ (YAML) │ - components/xxx
│ │ - components/yyy
└────────┬────────┘
│
▼
┌─────────────────┐
│ pip-audit │ 対象ごとに並列で脆弱性スキャン
└────────┬────────┘
│ 脆弱性検出
▼
┌─────────────────┐
│ Issue 作成 │ 脆弱性と対応手順を記載
└────────┬────────┘
│ @claude コメントでトリガー
▼
┌─────────────────┐
│ Claude Code │ 自動修正
│ - poetry update│
│ - Grep で検索 │
│ - Changelog確認│
│ - コード修正 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ PR 作成 │
└─────────────────┘
具体的な手順は以下の通りです。1〜4 は GitHub Actions、5〜7 は Claude Code Action が実行します。
- 設定ファイルから更新対象のディレクトリを読み取る
- pip-audit で脆弱性のあるライブラリを特定
- 脆弱性と対応手順を記載した Issue を作成
-
@claudeコメントで Claude Code Action をトリガー - Claude がバージョン更新と破壊的変更のコード修正を実行
- 修正内容で PR を作成
- レビュー・動作確認
Claude への指示(プロンプト設計)
Claude の動作は Issue に記載する「対応手順」で制御しています。
## 対応手順
1. `poetry update <パッケージ名>` で脆弱性のあるパッケージのみを更新
2. Grepでコードベース内の該当パッケージの使用箇所を検索
3. WebSearch で Changelog を確認し、deprecated/削除された機能を特定
4. 検索した使用箇所と照合し、影響があれば修正
5. `poetry run pip-audit` で脆弱性が解消されたことを確認
6. PR を作成
実際の動作例
自動作成された Issue
pip-audit が脆弱性を検出すると、以下のような Issue が自動作成されます。
Claude が作成した PR
Issue に @claude とコメントすると、Claude が自動で修正し PR を作成します。
以下のように破壊的変更(Image.ANTIALIAS → Image.LANCZOS)を自動で検出・修正している。
必要な設定
Claude Code Action の allowed_tools
Claude Code Action はデフォルトで多くのツールが使用可能ですが、セキュリティ上の理由から allowed_tools で必要なツールのみに制限しています。
- uses: anthropics/claude-code-action@beta
with:
allowed_tools: "Edit,Read,Write,Glob,Grep,WebFetch,WebSearch,Bash(poetry update:*),Bash(poetry run pip-audit:*),Bash(git add:*),Bash(git commit:*),Bash(git push:*)"
| ツール | 用途 |
|---|---|
Edit, Read, Write
|
コードの読み書き |
Grep, Glob
|
コードベース内の検索 |
WebSearch |
Changelog の確認 |
Bash(poetry update:*) |
パッケージ更新 |
Bash(poetry run pip-audit:*) |
脆弱性の再チェック |
Bash(git *:*) |
コミット・プッシュ |
詳細は Claude Code Action のドキュメント を参照してください。
pip-audit を Matrix で並列実行
複数のコンポーネントを効率的にチェックするため、GitHub Actions の Matrix Strategy を使用しています。
jobs:
get-targets:
# 設定ファイルからチェック対象を取得
steps:
- run: |
TARGETS=$(yq -o=json -I=0 '.targets' config/dependency-check-targets.yaml)
echo "targets=$TARGETS" >> $GITHUB_OUTPUT
check:
strategy:
fail-fast: false
matrix:
target: ${{ fromJson(needs.get-targets.outputs.targets) }}
# 各ターゲットを並列でチェック
report:
# 結果を統合して Issue 作成
設定ファイル(config/dependency-check-targets.yaml)でチェック対象を管理します。
targets:
- components/xxx
- components/yyy
この構成により、ターゲットが増えても並列で処理され、実行時間を短縮できます。
まとめ
GitHub Actions と Claude Code Action を組み合わせることで、以下のように自動でバージョン更新できる仕組みが構築できました。
今後の改善点
破壊的変更を確実に検知するには、テストコードの実行が最も信頼性の高い方法だと認識しています。今後は修正後にテストを実行し、失敗した場合は再修正するサイクルを自動化することで、より安全な更新にしていきたいと考えています。


