AI News HubLIVE
サイト内リライト3 分で読了

Copilot SDK を使用した AI を活用した GitHub Issue トリアージの構築

この記事では、GitHub Copilot SDK を React Native アプリに統合し、AI による Issue 要約を生成する方法を紹介します。サーバーサイド統合アーキテクチャ、SDK のライフサイクル管理、プロンプトエンジニアリングのコツ、およびグレースフルデグラデーション戦略について詳しく説明します。

ソースGitHub AI & ML著者: Andrea Griffiths

GitHub Copilot SDK を使うと、Copilot Chat を支えるのと同じ AI を独自のアプリケーションに追加できます。実際の応用例を見るために、IssueCrush という Issue トリアージアプリを構築しました。この記事ではその経験と実装のポイントを共有します。

オープンソースプロジェクトやアクティブなリポジトリを保守していると、通知バッジに「47件の Issue」と表示されるあの感覚をご存知でしょう。中にはバグ、機能リクエスト、議論にすべき質問、3年前の重複 Issue が混在しています。それぞれを読んで判断するのは大きな認知的負荷です。

IssueCrush は GitHub Issue をスワイプ可能なカードとして表示します。左スワイプでクローズ、右スワイプで保持。「AI 要約を取得」ボタンをタップすると、Copilot が Issue を読み、内容と推奨アクションを簡潔に伝えます。これにより、メンテナーは長い説明文を読むことなく、迅速にトリアージ判断を下せます。

アーキテクチャの課題

最初の技術的決定は、Copilot SDK をどこで実行するかでした。React Native アプリは Node.js パッケージを直接使用できません。SDK は内部でローカルの Copilot CLI プロセスを管理し、JSON-RPC で通信するため、サーバーサイドで統合する必要があります。サーバーには Copilot CLI がインストールされ、システム PATH に含まれている必要があります。

採用したサーバーサイド統合パターンの利点:単一の SDK インスタンスを全クライアントで共有、認証情報はサーバーに保持、AI が利用不可でも基本機能を提供するグレースフルデグラデーション、全リクエストのログ記録。

SDK 統合の実装

Copilot SDK はセッションベースのモデルを採用しています。クライアントを開始(CLI プロセスを起動)、セッションを作成、メッセージを送信、最後にリソースをクリーンアップします。

const { CopilotClient, approveAll } = await import('@github/copilot-sdk');
let client = null;
let session = null;
try {
  client = new CopilotClient();
  await client.start();
  session = await client.createSession({
    model: 'gpt-4.1',
    onPermissionRequest: approveAll,
  });
  const response = await session.sendAndWait({ prompt });
  // レスポンスを処理
} finally {
  if (session) await session.disconnect().catch(() => {});
  if (client) await client.stop().catch(() => {});
}

プロンプトエンジニアリング

プロンプト構造は、モデルが適切に動作するための十分なコンテキストを提供します。Issue のタイトル、番号、リポジトリ、状態、ラベル、作成日、作成者、本文を構造化して渡します。ラベルと作成者の情報は特に重要で、初回投稿者からの Issue とコアメンテナーからの Issue では適切な対応が異なります。

クライアント側サービス層

React Native 側では、API 呼び出しをサービスラッパークラスでラップし、初期化とエラー状態を処理します。サービスはヘルスチェックエンドポイントを公開し、クライアントは起動時にこれを確認して AI 要約ボタンの表示を制御します。要約はオンデマンドで生成し、不要な API コストを回避します。結果は Issue オブジェクトにキャッシュされ、ユーザーがスワイプして戻った際に即座に表示されます。

グレースフルデグラデーション

AI サービスは失敗することがあります。サーバーは2種類の失敗モードを処理します:サブスクリプションエラーは 403 を返し、クライアントに明確なメッセージを表示;その他のエラーは Issue メタデータからフォールバック要約を生成します。フォールバック関数はタイトル、ラベル、本文の最初の文など既存の情報を利用します。

学んだ教訓

サーバーサイド統合が正解:SDK が必要とする CLI バイナリはスマートフォンにインストールできないため、サーバー側で AI ロジックを一元管理し、認証情報を安全に保ちます。プロンプトの構造は長さよりも重要で、整理されたメタデータがより良い要約を生みます。常にフォールバックを用意し、AI がオフラインでもユーザーが Issue トリアージできるようにします。セッションは必ずクリーンアップ(disconnect してから stop)する習慣をつけましょう。キャッシュは API 呼び出しの重複を防ぎ、コストとレイテンシを削減します。

AI はメンテナンスを持続可能にします。トリアージは人を疲弊させる目に見えないタスクです。50件の Issue 処理時間を半分にできれば、コードレビューやメンタリング、あるいは単に通知バッジを恐れずに済む時間に充てられます。Copilot SDK はひとつのツールですが、より大きなアイデアは重要です:メンテナンスで消耗する部分を特定し、AI が最初のパスを担当できないか検討することです。

@github/copilot-sdk を試して、他に何が構築できるか見てみてください。Getting Started ガイドでは最初の統合を約5行のコードで説明しています。フィードバックやアイデアがあれば、SDK ディスカッションで会話に参加してください。