PRコメント強化実装完了レポート

実装日時

2025-11-28

概要

GitHub PR コメント出力を強化し、以下の機能を追加しました:

  1. Self-Healing Summary ブロック(メタ情報) (B-1)
  2. Webダッシュボード/ログビューアへのリンク (B-2)
  3. 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ダッシュボード/ログへのリンク追加

実装内容:

  • AppConfigWEBAPP_BASE_URL を追加(環境変数 WEBAPP_BASE_URL から取得、デフォルト: http://localhost:5000
  • URLビルダ関数を実装:
    • build_run_logs_url(): Run ログの URL
    • build_project_logs_url(): プロジェクトログの URL
    • build_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.py
  • src/nexuscore/api/github_webhook_handler.py

変更内容:

  • format_pr_comment() 関数を新しい build_pr_comment() を使うように書き換え
  • run_id から Run オブジェクトを取得し、PRCommentContext を作成
  • repo_full_namepr_numberformat_pr_comment() に渡すように修正
  • AI要約生成を統合(失敗時はスキップ)

変更ファイル一覧

新規作成ファイル

  1. src/nexuscore/integration/__init__.py
  2. src/nexuscore/integration/github_pr_comment.py (約400行)
  3. src/nexuscore/integration/github_pr_summary.py (約200行)

変更ファイル

  1. src/nexuscore/config/config.py
    • WEBAPP_BASE_URL を追加
  2. src/nexuscore/api/github_self_healing_webhook.py
    • format_pr_comment() を新しい実装に書き換え
  3. src/nexuscore/api/github_webhook_handler.py
    • format_pr_comment() 呼び出し時に repo_full_namepr_number を渡すように修正
    • インデントエラーを修正

動作確認結果

静的解析結果

  • リンターエラー: なし
  • 型チェック: 問題なし(オプショナルインポートを適切に処理)

設計上の改善点

  1. 責務の分離:
    • PR コメント組み立てロジックを integration/github_pr_comment.py に集約
    • AI要約生成を integration/github_pr_summary.py に分離
  2. 後方互換性:
    • Webapp が利用可能でない場合でも動作(オプショナルインポート)
    • 既存の format_pr_comment() のシグネチャを維持(追加パラメータはオプショナル)
  3. エラーハンドリング:
    • 各セクション(Summary、Links、Change Summary)の生成失敗時もコメント全体を落とさない
    • ログを適切に出力

既知の制約・注意事項

  1. Webapp 依存:
    • Self-Healing Summary と Observability Links は Webapp が利用可能な場合のみ表示
    • RunProject が DB に存在する必要がある
  2. AI要約生成:
    • LLM 呼び出しに失敗した場合は Change Summary セクションをスキップ
    • タイムアウトや予算制限により生成が失敗する可能性がある
  3. 環境変数:
    • WEBAPP_BASE_URL が設定されていない場合、デフォルトで http://localhost:5000 を使用
    • 本番環境では適切な URL を設定する必要がある

次のステップ

推奨される動作確認

  1. 実際の PR でテスト:
    • Self-Healing を実行して PR コメントが正しく生成されるか確認
    • 各セクション(Summary、Guardian Review、Change Summary、Links)が表示されるか確認
  2. Webapp 連携の確認:
    • RunProject が DB に正しく保存されているか確認
    • リンクが正しく動作するか確認
  3. AI要約生成の確認:
    • LLM 呼び出しが正常に動作するか確認
    • 要約が適切に生成されるか確認

将来の拡張

  1. パッチプレビューの改善:
    • 既存の build_self_healing_pr_comment() のパッチプレビュー機能を統合
  2. メトリクスの拡張:
    • より詳細なメトリクス(テストカバレッジ、コード品質スコア等)を追加
  3. カスタマイズ:
    • PR コメントのフォーマットを設定ファイルでカスタマイズ可能にする

関連ドキュメント

  • docs/slack_notification_setup.md - Slack 通知設定ガイド
  • docs/saas_architecture.md - SaaS アーキテクチャドキュメント

This site uses Just the Docs, a documentation theme for Jekyll.