3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actions × Claude Code Action でライブラリ自動更新時の破壊的変更に対応する

Last updated at Posted at 2025-12-21

🎄 本記事は 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 が実行します。

  1. 設定ファイルから更新対象のディレクトリを読み取る
  2. pip-audit で脆弱性のあるライブラリを特定
  3. 脆弱性と対応手順を記載した Issue を作成
  4. @claude コメントで Claude Code Action をトリガー
  5. Claude がバージョン更新と破壊的変更のコード修正を実行
  6. 修正内容で PR を作成
  7. レビュー・動作確認

Claude への指示(プロンプト設計)

Claude の動作は Issue に記載する「対応手順」で制御しています。

## 対応手順
1. `poetry update <パッケージ名>` で脆弱性のあるパッケージのみを更新
2. Grepでコードベース内の該当パッケージの使用箇所を検索
3. WebSearch で Changelog を確認し、deprecated/削除された機能を特定
4. 検索した使用箇所と照合し、影響があれば修正
5. `poetry run pip-audit` で脆弱性が解消されたことを確認
6. PR を作成

実際の動作例

自動作成された Issue

pip-audit が脆弱性を検出すると、以下のような Issue が自動作成されます。

image.png

Claude が作成した PR

Issue に @claude とコメントすると、Claude が自動で修正し PR を作成します。

image.png

以下のように破壊的変更(Image.ANTIALIASImage.LANCZOS)を自動で検出・修正している。

image.png

必要な設定

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 を組み合わせることで、以下のように自動でバージョン更新できる仕組みが構築できました。

今後の改善点

破壊的変更を確実に検知するには、テストコードの実行が最も信頼性の高い方法だと認識しています。今後は修正後にテストを実行し、失敗した場合は再修正するサイクルを自動化することで、より安全な更新にしていきたいと考えています。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?