【Googleスプレッドシート】GitHubのIssueを取り込む!REST APIでデータ自動更新

【Googleスプレッドシート】GitHubのIssueを取り込む!REST APIでデータ自動更新
🛡️ 超解決

GitHubのIssueをスプレッドシートで管理したいと考えたことはありませんか。手動でコピー&ペーストするのは手間がかかり、更新漏れも起きやすいものです。REST APIを使えば、Issueの一覧を自動で取得し、スプレッドシートに反映できます。この記事では、GoogleスプレッドシートのApps ScriptとGitHub APIを組み合わせて、データを自動更新する方法を詳しく解説します。

【要点】GoogleスプレッドシートでGitHub Issueを自動更新する方法

  • Apps Scriptのスクリプトエディタ: GitHub REST APIにHTTPリクエストを送り、取得したJSONデータをシートに書き込みます。
  • GitHub Personal Access Token(PAT): 認証に必要なトークンを発行し、スクリプト内で安全に使用します。
  • トリガーの定期実行: 時間主導型トリガーを設定することで、1時間ごとなど自動更新を実現します。

ADVERTISEMENT

GitHub REST APIとスプレッドシート連携の仕組み

GitHub REST APIは、リポジトリ内のIssueをJSON形式で返します。例えば、特定のリポジトリの全Issueを取得するには、GET /repos/{owner}/{repo}/issuesというエンドポイントにアクセスします。スプレッドシート上では、Apps ScriptのUrlFetchAppクラスを使ってそのURLにリクエストを送信します。レスポンスとして得られたJSON配列をパースし、各Issueのタイトル、ステータス、作成日などをシートのセルに書き込むのです。この仕組みにより、手動でデータを入力する必要がなくなり、常に最新のIssueリストを維持できます。

GitHub Issueをスプレッドシートに自動取り込む手順

  1. GitHub Personal Access Token(PAT)を発行する
    GitHubの設定画面で「Developer settings」→「Personal access tokens」→「Tokens (classic)」に進みます。「Generate new token」をクリックし、スコープは「repo」と「read:org」など必要な権限を選択します。生成されたトークンは後でスクリプト内で使うため、安全な場所に保存してください。
  2. スプレッドシートでApps Scriptを開く
    Googleスプレッドシートを開き、メニューバーの「拡張機能」→「Apps Script」をクリックします。スクリプトエディタが別タブで開きます。
  3. スクリプトコードを記述する
    スクリプトエディタに以下のコードを貼り付けます。
    function fetchGitHubIssues() {
      const token = 'YOUR_PERSONAL_ACCESS_TOKEN';
      const owner = 'リポジトリ所有者名';
      const repo = 'リポジトリ名';
      const url = `https://api.github.com/repos/${owner}/${repo}/issues`;
      
      const options = {
        'headers': {
          'Authorization': `token ${token}`,
          'Accept': 'application/vnd.github.v3+json'
        },
        'muteHttpExceptions': true
      };
      
      const response = UrlFetchApp.fetch(url, options);
      const issues = JSON.parse(response.getContentText());
      
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      sheet.clear(); // 古いデータを削除
      
      // ヘッダー行を追加
      const headers = ['番号', 'タイトル', '状態', '作成日', '更新日', '作成者'];
      sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
      
      // Issueデータを行に追加
      const data = issues.map(issue => [
        issue.number,
        issue.title,
        issue.state,
        issue.created_at,
        issue.updated_at,
        issue.user.login
      ]);
      
      if (data.length > 0) {
        sheet.getRange(2, 1, data.length, data[0].length).setValues(data);
      }
    }

    「YOUR_PERSONAL_ACCESS_TOKEN」「リポジトリ所有者名」「リポジトリ名」は実際の値に書き換えてください。

  4. スクリプトを実行して動作確認する
    スクリプトエディタのツールバーで「実行」ボタンをクリックします。初回は権限の承認が必要です。「許可を確認」画面で自分のアカウントを選び、必要な権限を許可します。実行後、スプレッドシートにIssueリストが表示されれば成功です。
  5. トリガーを設定して自動更新する
    スクリプトエディタの左メニューで「トリガー」をクリックし、「トリガーを追加」を選択します。実行する関数は「fetchGitHubIssues」、イベントのソースは「時間主導型」、時間の間隔は「1時間おき」など好みの頻度を選びます。これで、定期的にスクリプトが実行され、Issueが自動更新されます。

自動更新の注意点とトラブル対処

レート制限に達してしまう

GitHub APIにはレート制限があり、認証なしでは1時間あたり60リクエスト、トークン使用時は5000リクエストまでです。トリガーの間隔を短くしすぎると制限に引っかかる可能性があります。1時間以上の間隔を推奨します。また、不要なリクエストを減らすため、スクリプト内で前回の更新日時を記録し、差分のみ取得する方法も検討してください。

認証エラーが発生する

トークンの権限不足や有効期限切れが原因です。トークンが正しく設定されているか確認してください。特に、privateリポジトリのIssueを取得するには「repo」スコープが必要です。また、トークンをコード内に直接書くと漏洩リスクがあるため、スクリプトプロパティに保存するなど安全な方法で管理しましょう。

列の並びが意図と異なる

APIから返されるJSONのフィールド順は固定ではないため、マッピングを間違えるとデータがずれます。スクリプト内のdata配列で、各issueのプロパティを正しい順番で並べているか確認してください。必要に応じて、取得するフィールドを増減したり、ラベルやマイルストーンなど他の情報も追加できます。

ADVERTISEMENT

手動更新とAPI自動更新の比較

項目 手動更新 API自動更新
更新の手間 Issueの状態を都度確認し、コピペ 一度設定すれば自動で反映
リアルタイム性 更新タイミングに依存し遅れがち トリガー間隔で最新を維持
カスタマイズ性 取得したい項目を選べるが手作業 スクリプトで自由にフィールド選択
エラー発生時の影響 気づきにくい スクリプトエラーをメールで通知可能

この記事では、GoogleスプレッドシートにGitHubのIssueを自動取り込む方法を解説しました。Apps ScriptとGitHub REST APIの組み合わせにより、定期的にデータを更新し、常に最新のIssue一覧を管理できます。さらに、QUERY関数やフィルタビューと組み合わせれば、優先度別の表示など応用も広がります。実際にスクリプトを設定し、GitHubとの連携を試してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。