Devinにライブラリバージョンアップのリスク評価をやらせたらめっちゃよかった!
株式会社tacomsではAIツールの導入が積極的に進められており、Devinもそのひとつです。
tacomsでは以下のようなクイックスタートガイドラインが整備され、積極利用中です!
今回はライブラリバージョンアップのリスク評価をDevinにしたところ、非常に精度がよかったのでご紹介させていただきます!
ライブラリバージョンアップのリスク評価とは
使っているフレームワークやライブラリなどのバージョンアップを行う際、破壊的変更が含まれていた場合、その機能に依存している機能で障害が発生する可能性があります。
ユニットテストを充実させている場合この変更に気づきやすくなりますが、ユニットテストでは十分にカバーできるかと言うとそうでもなかったりするところもあると思います。
そのためライブラリのバージョンを上げる際は、どのような変更が含まれるか確認しリスク評価をする必要があります。
ただこれはとても大変な作業で、バージョンアップの差分をがんばって見に行く必要があります。
割と単調な作業だし、量が多いと見逃しもあったりします。
Devinにリスク評価させてみた
このような単調で大変な作業はAIにやってもらったほうがよさそうということで、Devinにお願いしてみました!
Slackで次のような依頼をしました。
@Devin
- 次のプルリクエストにアクセスして
- {ここにプルリクURL}
- ファイル差分にgolangのライブラリのバージョンアップが含まれている。これらのバージョン差分を各ライブラリのchangelogから確認し、バージョンアップによるリスクがないかを確認して
- 各ライブラリの変更点をまとめ、その中でリスクがある変更をプルリクエストに記載してください
- あなたの確認に問題ないか私が確認するために変更を確認するためのURLを提供してください
今回はgolangのWebフレームワークのechoのバージョンアップ差分を確認してもらいました。
go.mod
の差分は以下のようになってます。
このバージョンアップのリスク評価結果がこちら:
# Echo v4.11.4 から v4.13.0 へのアップグレード リスク評価
## 主な変更点
### 高リスクの変更
- **JWTミドルウェアの削除**: JWTミドルウェアがコアから削除され、別のリポジトリ(labstack/echo-jwt)に移動されました(セキュリティ脆弱性CVE-2024-51744への対応)
- **影響評価**: 本プロジェクトではJWTミドルウェアを使用していないため、影響はありません
- JWTミドルウェアを使用するプロジェクトでは、labstack/echo-jwtへの移行が必要になります
### 中リスクの変更
- **バインディング機能の改善**:
- BindBodyメソッドの改善(v4.13.0)
- マルチパートフォームのサポート強化(v4.13.0)
- マップへのバインディング機能の改善(v4.12.0)
- **影響評価**: 本プロジェクトでは高度なバインディング機能を使用していないため、影響は限定的です
- **セキュリティ修正**:
- golang.org/x/net依存関係の更新(GO-2024-2687、GO-2024-3333)
- その他のセキュリティ脆弱性の修正
- **影響評価**: セキュリティ向上のため推奨される変更です
### 低リスクの変更
- **パフォーマンスの最適化**:
- 構造体のアライメント最適化(v4.13.0)
- バインディング処理のパフォーマンス向上(v4.13.0)
- **新機能の追加**:
- TemplateRendererの追加(v4.13.0)
- Context.GetResponseメソッドの追加(v4.13.0)
- CORSミドルウェアの改善(v4.13.0)
## 本プロジェクトへの影響分析
本プロジェクトでは、以下のEcho機能を使用しています:
- 基本的なルーティング
- middleware.Logger()
- middleware.Recover()
- middleware.CORS()
これらの機能はv4.13.0でも引き続きサポートされており、大きな変更はありません。JWTミドルウェアは使用していないため、その削除による影響はありません。
## 結論
v4.13.0へのアップグレードは安全に行えると判断します。セキュリティ修正とパフォーマンス最適化が含まれており、プロジェクトの安定性と安全性が向上します。
ローカル環境でテストを行い、すべてのエンドポイントが期待通りに動作することを確認しました。
## 確認用リンク
- [Echo v4.13.0リリースノート](https://github.com/labstack/echo/releases/tag/v4.13.0)
- [Echo v4.12.0リリースノート](https://github.com/labstack/echo/releases/tag/v4.12.0)
- [GO-2024-2687脆弱性詳細](https://pkg.go.dev/vuln/GO-2024-2687)
- [golang.org/x/crypto v0.17.0...v0.22.0の変更](https://github.com/golang/crypto/compare/v0.17.0...v0.22.0)
- [golang.org/x/net v0.19.0...v0.24.0の変更](https://github.com/golang/net/compare/v0.19.0...v0.24.0)
- [golang.org/x/sys v0.15.0...v0.19.0の変更](https://github.com/golang/sys/compare/v0.15.0...v0.19.0)
- [golang.org/x/text v0.13.0...v0.14.0の変更](https://github.com/golang/text/compare/v0.13.0...v0.14.0)
この内容がプルリクエストにコメントされます。
使ってみた感想
私もバージョンアップの変更内容を確認しましたが、echoのJWTライブラリの破壊的変更についても正しくキャッチできており、精度も十分だと感じました!
しかし注意点としては、この評価は確実に信頼ができるものではないので、クロスチェックの意味で依頼者はバージョンアップ差分を確認する必要があります。
ただ情報確認のためのURLをまとめてくれたりするので、格段にチェックしやすくなりました!
今後もDevinの活用を進めていきたいと思います!
Discussion
これ、真似してみました。非常に良かったです。ありがとうございます。