【ITニュース解説】Shipping AI into Your CI: Coverage-Aware Reviews with Danger + OpenAI (and SonarCloud)
2025年09月03日に「Dev.to」が公開したITニュース「Shipping AI into Your CI: Coverage-Aware Reviews with Danger + OpenAI (and SonarCloud)」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
CI環境にAIを導入し、コード品質を向上させる方法を紹介。SonarCloudで静的解析とカバレッジをチェックし、DangerとOpenAIで変更箇所に対するテスト提案とコードレビューを自動化。カバレッジ率が低い場合、AIがテストコードを提案。環境変数で動作を調整可能。
ITニュース解説
この記事では、CI(継続的インテグレーション)環境にAIを取り込み、コード品質を向上させる方法について解説する。具体的には、SonarCloud、Jest、Danger、OpenAIといったツールを組み合わせ、変更されたコードに対するカバレッジを意識したレビューを自動化する。
まず、SonarCloudはコードの静的解析を行い、潜在的なバグや脆弱性を検出する。また、プルリクエストに対するデコレーションや、コードカバレッジのダッシュボードを提供する。JestはJavaScriptのテストフレームワークであり、ユニットテストを実行し、コードカバレッジを測定する。Dangerは、CI環境でコードレビューを自動化するためのツールであり、GitHubのプルリクエストに対してコメントやステータスを設定できる。OpenAIは、自然言語処理のAPIを提供しており、コードの分析やテストの提案に利用する。
これらのツールを連携させることで、次のようなことが実現できる。まず、SonarCloudによる静的解析と、変更されたコードに対するカバレッジのチェックを行う。次に、変更されたコードの行に対するカバレッジが設定された閾値(例:80%)を下回る場合、プルリクエストを失敗させ、AIによって生成されたテストのアイデアを提示する。さらに、OpenAIを用いて、変更されたコードに対するユニットテストの提案と、コードレビューを行う。コードレビューでは、変更されたコードのスニペット(変更前後の比較)と、それに対する説明を提示する。
このシステムは、環境変数(Secrets)によって制御されるため、コードを変更せずに、カバレッジの閾値やAIの動作を調整できる。例えば、MIN_FILE_COVERAGEという環境変数で、ファイルごとの最小カバレッジを設定できる。OPENAI_API_KEYは、OpenAIのAPIを使用するためのキーであり、DANGER_GITHUB_API_TOKENは、DangerがGitHubにコメントやステータスを設定するためのトークンである。
このワークフローは、プルリクエストとメインブランチへのプッシュの両方で実行されるが、AIによるレビューはプルリクエストに対してのみ実行されるように設定されている。これにより、メインブランチへのマージ時に、プルリクエストに対するコメントが再生成されるのを防ぐことができる。
dangerfile.tsというファイルに、Dangerの具体的な動作が記述されている。このファイルでは、まず、lcov-parseというライブラリを用いて、coverage/lcov.infoというカバレッジレポートを解析する。次に、プルリクエストの差分を取得し、変更されたコードの行に対するカバレッジを計算する。カバレッジが閾値を下回る場合、プルリクエストを失敗させ、ファイルごとのカバレッジを表示するテーブルを投稿し、AIにテストのアイデアを求める。
AIによるユニットテストの提案では、OpenAIのモデルに「あなたは熟練したTS/React開発者です。実行可能なJest TSテストファイルをMarkdownコードブロックで出力してください。最小限に抑えつつ、差分から推測される分岐やエッジケースをカバーしてください。ファイル名はsrc/tests/.auto.test.tsのようにしてください。」というプロンプトを与える。
AIによるコードレビューでは、変更されたファイル内の追加された行を列挙し、OpenAIにJSON形式でレビュー結果を求める。レビュー結果には、ファイル名、行番号、重要度、タイトル、本文が含まれる。各レビュー結果に対して、変更された行を中心としたコードスニペットを作成し、説明と修正提案とともにコメントとして投稿する。
このシステムは、GitHub Actionsだけでなく、他のCI/CDプラットフォームでも利用できる。必要な環境変数は、それぞれのプラットフォームのシークレットマネージャーに保存すればよい。
このシステムを導入する際には、まず提案のみを行い、ブロックはしないように設定する。次に、MIN_FILE_COVERAGEを80%に設定し、チームが慣れてきたら85〜90%に引き上げる。スニペットファーストのレビューを維持し、インラインコメントを有効にする。準備ができたら、AI_REVIEW_BLOCK_ON_FINDINGSを1に設定し、厳格な強制を行う。
このシステムは、AIを活用してコード品質を向上させるための実践的な方法を提供する。SonarCloudによる静的解析とカバレッジダッシュボードに加え、DangerとOpenAIによるターゲットを絞った、実用的なフィードバックを提供することで、より高品質なコードを効率的に開発できる。