【DevSecOps】TrivyとAIを活用したDependabot自動レビューによる個人開発セキュリティ強化
1. 個人開発における「セキュリティの技術的負債」
プロトタイプから本番運用へとフェーズが移行するにつれ、個人開発のWebアプリケーションには「目に見えない技術的負債」が蓄積し始めます。その代表格がセキュリティ脆弱性とシークレットの誤コミットです。
FastAPIやNode.jsで使用しているライブラリには日々新しい脆弱性が発見されます。しかし、専任のセキュリティ担当者がいない個人開発では、自発的にNVD(脆弱性情報データベース)をチェックして手動でアップデートし続けることは現実的ではありません。また、深夜のテンションでAPIキーをハードコードしたまま git push してしまう事故も珍しくありません。
そこで私たちは、「開発体験(DX)を一切損なわず、かつお金をかけない」という制約の中で、完全自動化された DevSecOps パイプライン を構築しました。
2. シフトレフト:TrivyによるCIでのワンパススキャン
セキュリティ問題を本番環境にデプロイする前に防ぐアプローチをシフトレフト(Shift Left)と呼びます。これを実現するため、私たちはオープンソースの高機能スキャナである Trivy を採用し、GitHub Actions のワークフロー(ci-security.yml)に組み込みました。
# .github/workflows/ci-security.yml の抜粋
jobs:
trivy-scan:
name: Trivy Security Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner (Filesystem)
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scanners: 'vuln,secret,config'
ignore-unfixed: true
format: 'table'
exit-code: '1'
severity: 'CRITICAL,HIGH'
Trivyの素晴らしい点は、一つのアクションで vuln(依存パッケージの脆弱性)、secret(APIキーやパスワードのハードコード)、config(Dockerfileなどの設定不備)の3つを同時にスキャンできることです。
severity: 'CRITICAL,HIGH' とし、これらが発見された場合のみ exit-code: '1'(CI失敗)とするルールに設定することで、「軽微な警告でいちいちデプロイが止まる」というノイズを排除し、実用的な運用を実現しています。
3. Dependabotの導入と「レビュー疲労」問題
依存関係の脆弱性を自動検知するだけでは問題は解決しません。「では、どうやってアップデートするのか?」に対する答えが GitHub の Dependabot です。
.github/dependabot.yml を設定するだけで、古いパッケージを更新するための Pull Request(PR)を自動で作成してくれます。
しかし、ここで新たな壁にぶつかりました。「Dependabotが大量に作成するPRを、安全かどうか確認してマージするのが非常に面倒くさい」という問題です。自動テスト(E2Eテストなど)が通ればマージしてもよいとはいえ、ライブラリのメジャーアップデートによる破壊的変更(Breaking Changes)を見逃すと、本番環境で予期せぬ不具合を踏む危険性があります。
4. AIエージェントスキル連携:Dependabot PRの自動分析
この「PRレビュー疲労」を解決するため、Doodle Fighter開発チームは**AI開発エージェントに独自の「スキル」を付与**しました。
リポジトリ内の .agents/skills/dependabot_checker/SKILL.md にプロンプトを定義し、AIに以下のタスクを自動で行わせるようにしたのです。
- 変更内容の要約: Dependabotが提案するパッケージのリリースノートを読み込み、何が変更されたかを把握する。
- 破壊的変更の検出: Changelogから「Breaking Changes」を抽出し、Doodle Fighterのコードベース(
main.pyやapp.js)においてその変更が影響を及ぼす箇所があるかをgrep_searchなどのツールを用いて調査する。 - リスク判定: 影響範囲をもとに、「安全にマージ可能か」「コードの修正が必要か」を判断し、人間に対してレポートを提出する。
これにより、開発者は「AIが『このアップデートは既存コードの呼び出し方に影響しません。安全です』とお墨付きを与えたPR」だけをワンクリックでマージすればよくなり、DevSecOps運用にかかる認知負荷がほぼゼロになりました。
5. まとめと導入後の効果
今回のアップデートにより、Doodle Fighterの開発フローは以下のように進化しました:
- コードをPushするたびに、Trivy が脆弱性とシークレット漏洩をチェックしてガードレールとなる。
- 依存関係が古くなれば、Dependabot が自動で更新PRを作成する。
- そのPRを AIエージェント が自律的に分析し、破壊的変更のリスクを人間に報告する。
専任のセキュリティ担当がいない個人開発において、「Trivy + Dependabot + AIエージェント」の組み合わせは、最高のコストパフォーマンスと安心感をもたらす最強の布陣であると確信しています。CIパイプラインの構築やセキュリティ運用に悩む個人開発者の方は、ぜひこのアプローチを試してみてください。