PRコメント強化実装完了レポート
実装日時
2025-11-28
概要
GitHub PR コメント出力を強化し、以下の機能を追加しました:
- Self-Healing Summary ブロック(メタ情報) (B-1)
- Webダッシュボード/ログビューアへのリンク (B-2)
- AIによる「治したポイントまとめ(自然言語要約)」 (B-3)
実装ステップ
ステップ1: PRコメント組み立てロジックを一箇所に集約
1-1. 新規モジュール github_pr_comment.py の作成
ファイル: src/nexuscore/integration/github_pr_comment.py
実装内容:
PRCommentContextクラス: PR コメント組み立てに必要なコンテキスト情報を保持build_pr_comment()関数: PR コメント本文を組み立てるメイン関数_collect_run_metrics()関数: Run からメトリクスを収集(パッチ情報、LLM呼び出し、コスト等)_compute_recent_success_rate()関数: 過去30回の成功率を計算- URLビルダ関数: Webapp へのリンクを生成
特徴:
- Webapp モデルが利用可能な場合のみ DB から情報を取得(オプショナルインポート)
- エラーハンドリングを適切に実装(失敗時もコメント全体を落とさない)
ステップ2: B-1 - Self-Healing Summary ブロックの追加
実装内容:
_collect_run_metrics()で以下を取得:- 実行時間(started_at〜finished_at)
- 使用モデル一覧(NPE ExecutionLog から)
- 生成パッチの行数 / 影響ファイル数
- 概算コスト(円換算)
_compute_recent_success_rate()で過去30回の成功率を計算build_pr_comment()内で Self-Healing Summary セクションを生成
出力形式:
## 🤖 Self-Healing Summary
- Project: `project_name` (owner/repo)
- Run ID: `run_id` (status: `SUCCESS`)
- Duration: 5m 30s
- Patches: 150 lines across 3 files
- Models:
- `gpt-4.1`: 3 calls
- `claude-3-opus`: 2 calls
- Estimated cost: ~123.45 JPY
- Recent success rate (last 30 runs): 93.3%
ステップ3: B-2 - Webダッシュボード/ログへのリンク追加
実装内容:
AppConfigにWEBAPP_BASE_URLを追加(環境変数WEBAPP_BASE_URLから取得、デフォルト:http://localhost:5000)- URLビルダ関数を実装:
build_run_logs_url(): Run ログの URLbuild_project_logs_url(): プロジェクトログの URLbuild_project_dashboard_url(): プロジェクトダッシュボードの URL
build_pr_comment()内で Observability Links セクションを生成
出力形式:
---
## 📊 Observability Links
- Run logs: http://localhost:5000/logs/runs/{run_id}
- Project logs: http://localhost:5000/logs/projects/{project_id}
- Project dashboard: http://localhost:5000/dashboard/projects/{project_id}
ステップ4: B-3 - AIによる修正要約の追加
ファイル: src/nexuscore/integration/github_pr_summary.py
実装内容:
generate_pr_change_summary()関数: Run に紐づくパッチとログを元に、自然言語で要約を生成guarded_llm_call経由で LLMRouter を呼び出し- プロンプトに以下を含める:
- Guardian レビュー本文
- パッチ diff スニペット(最大10ファイル、1ファイルあたり80行まで)
- 重要なログ(ERROR/WARNING、最大100エントリ)
- 日本語で5項目以内の箇条書きで要約
出力形式:
---
## ✨ Change Summary (AI-generated)
- 修正前の問題点: ...
- 変更内容: ...
- リスク軽減: ...
- 残存リスク: ...
- 推奨事項: ...
ステップ5: 既存PRコメント送信部分の修正
修正ファイル:
src/nexuscore/api/github_self_healing_webhook.pysrc/nexuscore/api/github_webhook_handler.py
変更内容:
format_pr_comment()関数を新しいbuild_pr_comment()を使うように書き換えrun_idからRunオブジェクトを取得し、PRCommentContextを作成repo_full_nameとpr_numberをformat_pr_comment()に渡すように修正- AI要約生成を統合(失敗時はスキップ)
変更ファイル一覧
新規作成ファイル
src/nexuscore/integration/__init__.pysrc/nexuscore/integration/github_pr_comment.py(約400行)src/nexuscore/integration/github_pr_summary.py(約200行)
変更ファイル
src/nexuscore/config/config.pyWEBAPP_BASE_URLを追加
src/nexuscore/api/github_self_healing_webhook.pyformat_pr_comment()を新しい実装に書き換え
src/nexuscore/api/github_webhook_handler.pyformat_pr_comment()呼び出し時にrepo_full_nameとpr_numberを渡すように修正- インデントエラーを修正
動作確認結果
静的解析結果
- リンターエラー: なし
- 型チェック: 問題なし(オプショナルインポートを適切に処理)
設計上の改善点
- 責務の分離:
- PR コメント組み立てロジックを
integration/github_pr_comment.pyに集約 - AI要約生成を
integration/github_pr_summary.pyに分離
- PR コメント組み立てロジックを
- 後方互換性:
- Webapp が利用可能でない場合でも動作(オプショナルインポート)
- 既存の
format_pr_comment()のシグネチャを維持(追加パラメータはオプショナル)
- エラーハンドリング:
- 各セクション(Summary、Links、Change Summary)の生成失敗時もコメント全体を落とさない
- ログを適切に出力
既知の制約・注意事項
- Webapp 依存:
- Self-Healing Summary と Observability Links は Webapp が利用可能な場合のみ表示
RunとProjectが DB に存在する必要がある
- AI要約生成:
- LLM 呼び出しに失敗した場合は Change Summary セクションをスキップ
- タイムアウトや予算制限により生成が失敗する可能性がある
- 環境変数:
WEBAPP_BASE_URLが設定されていない場合、デフォルトでhttp://localhost:5000を使用- 本番環境では適切な URL を設定する必要がある
次のステップ
推奨される動作確認
- 実際の PR でテスト:
- Self-Healing を実行して PR コメントが正しく生成されるか確認
- 各セクション(Summary、Guardian Review、Change Summary、Links)が表示されるか確認
- Webapp 連携の確認:
RunとProjectが DB に正しく保存されているか確認- リンクが正しく動作するか確認
- AI要約生成の確認:
- LLM 呼び出しが正常に動作するか確認
- 要約が適切に生成されるか確認
将来の拡張
- パッチプレビューの改善:
- 既存の
build_self_healing_pr_comment()のパッチプレビュー機能を統合
- 既存の
- メトリクスの拡張:
- より詳細なメトリクス(テストカバレッジ、コード品質スコア等)を追加
- カスタマイズ:
- PR コメントのフォーマットを設定ファイルでカスタマイズ可能にする
関連ドキュメント
docs/slack_notification_setup.md- Slack 通知設定ガイドdocs/saas_architecture.md- SaaS アーキテクチャドキュメント