生成AIによる開発スタイルの変化
生成AIを使ったコーディングはこの数年で急速に普及しました。かつては「開発者の支援をするツール」だったものが、今やエージェントモードによってゼロからエージェントにおまかせする開発も現実になっています。
これにより、開発速度は劇的に上がりました。同時に、生み出されるコードの量もまた、劇的に増えました。
AIが書いたコードをレビューもせずにそのままコミットする人は少ないのではないでしょうか?少なからずAIが書いたコードをそのまま使うことにリスクを感じていると思います。しかし、劇的に増えたコードを人手でレビューするのは現実的ではありません。
そこで、静的解析ツールです。AI が大量のコードを生み出す時代だからこそ、静的解析ツールの存在感が増すのです。
生成AIが生み出すコードの”落とし穴”
AIは確かに優秀です。エージェントモードを使えば「ToDoサイトを作って」とプロンプトで依頼すると、フロントエンドからバックエンドまで自律的に作成してくれます。
しかし、AIが「速く書ける」ことと「正しく書ける」ことは別の話です。例えば以下のような課題が考えられます。
1. コーディング規約は「指示できる」が、「保証はできない」
AIエージェントにはコーディング規約をあらかじめ設定する仕組みがあります。そうすることで、AIはある程度それを踏まえてコードを書いてくれます。しかし、確実にAIがルールを守ってコードを書くという保証はありません。AIはよく指示を忘れます。
2. バグやセキュリティ上の脆弱性が紛れ込む可能性
AIエージェントが生成したコードには脆弱性やバグが混入することがあります。バグや脆弱性がない、という保証はありません。学習データやAIの生成ロジックから、意図しないバグやセキュリティ上の脆弱性が含まれる可能性があります。一見正しく動きそうなコードでも特定の条件下でバグが発生したり、セキュリティリスクに繋がる可能性があります。
3. 標準規格への準拠
AIエージェントはOWASP Top10やCWE、PCI DSSなど標準規格への準拠を指示することはできますが、確実に準拠しているという保証はありません。やはり、人手でチェックするなど、それが守られていることを確認する手段が必要です。
静的解析ツールでリスクを下げる
静的解析ツールは、AIのように推論するのではなく、ルールに合致するかどうかを機械的・網羅的に判定します。つまり、実行すると毎回同じ結果が得られます。AIが生成したコードも人間が書いたコードも、同じ基準で確認できます。ここではParasoft社の静的解析・単体テストツールであるJtest/dotTESTを例に対応策をご紹介します。
1. プロジェクト固有のテストコンフィギュレーションを作成し、違反箇所を自動で検出
Jtest/dotTESTにはテストコンフィギュレーションというルールセットを作成する仕組みがあります。プロジェクトのコーディング規約をチェックするテストコンフィギュレーションを作成することで、コーディング規約に違反しているコードを自動で検出できます。
2. バグや脆弱性を網羅的に検出
Jtest/dotTESTではコーディング規約のチェックだけではなく、バグや脆弱性を検出するフロー解析があります。ソースコードを解析し、クラスやプロジェクトをまたがるバグを発見します。
検出可能なバグ
- NullPointerException
- クロスサイトスクリプティング
- SQLインジェクション
- リソースリーク
- ゼロ除算
- デッドロック
3. OWASP、CWE、PCI DSSなど標準ルールセットを搭載
Jtest/dotTESTではOWASPやCWE、PCI DSSなどセキュリティ標準をチェックするコンフィギュレーションが用意されているため、手間をかけずに脆弱性の検証ができます。
チェック可能なセキュリティ標準
- OWASP Top 10
- OWASP Top 10 ASVS
- PCI DSS
- CWE
- CERT for Java
など
静的解析ツールをCI/CDパイプラインの「品質ゲート」に
静的解析ツールで品質のチェックができることは上で述べました。しかし、AIエージェントが大量のコードを生成する場面では手動で実行していると手間もかかり、人手がボトルネックになります。また、解析の実行し忘れなど抜け漏れが発生することもあります。
そこで、CI/CD環境に静的解析を組み込むことで、ソースコードのプッシュ時や、プルリクエスト/マージリクエスト時に静的解析を自動実行し、基準を満たさないコードをマージ前にブロックする仕組みを作ることができます。

まとめ
AIエージェントが大量にコードを生産する時代になっても、人手がボトルネックになっては宝の持ち腐れです。Jtest・dotTESTを開発フローに組み込むことで、AIが生成したコードを検証し、問題があればAIが修正するサイクルを回せます。生成AIとJtest/dotTESTの組み合わせは開発速度をあげたまま品質を落とさない方法のひとつです。
Jtest/dotTESTはそれだけでなく、生成AIと連携し、検出した静的解析の違反を効率よく修正することができます。詳細は別の記事として投稿します。お楽しみに。

