ADVERTISEMENT

【Googleスプレッドシート】GitHub ActionsのワークフローをSheetsで監視!CI/CDの集計

【Googleスプレッドシート】GitHub ActionsのワークフローをSheetsで監視!CI/CDの集計
🛡️ 超解決

CI/CDパイプラインを運用していると、GitHub Actionsのワークフローが正しく動作しているか気になるものです。しかし、GitHubの画面だけでは複数リポジトリの実行履歴を横断して確認するのは手間がかかります。この記事では、GoogleスプレッドシートとGitHub APIを組み合わせて、ワークフローのステータスを一覧で監視する方法を解説します。定期的に自動更新されるシートを使えば、チーム全体でCI/CDの状況を簡単に把握できるようになります。

【要点】GitHub Actionsのワークフロー監視をスプレッドシートで実現する方法

  • GitHub APIとApps Scriptの連携: Personal Access Tokenを使ってワークフローの実行履歴を自動で取得します。
  • QUERY関数による集計とフィルタ: 取得したデータをQUERY関数で加工し、成功・失敗の割合や平均実行時間を計算します。
  • グラフ機能による可視化: スプレッドシートのグラフを使って、日別の成功件数やレイテンシの推移を視覚的に確認できます。

ADVERTISEMENT

GitHub Actionsワークフローデータをスプレッドシートで取得する仕組み

GitHubはREST APIを提供しており、ワークフローの実行履歴やジョブのステータスを取得できます。このAPIをGoogle Apps Script(GAS)から呼び出すことで、スプレッドシートにデータを取り込めます。GASはGoogleが提供するJavaScriptベースのスクリプト環境で、スプレッドシートと密接に連携できます。定期的なトリガーを設定すれば、数分おきに最新の実行結果を自動更新できます。取得したデータは、シート上でQUERY関数やグラフを使って分析するための基盤となります。

GitHub APIを使ってワークフローの実行履歴を取得する手順

1. GitHub Personal Access Tokenを作成する

  1. GitHubのSettingsにアクセスする
    GitHubのプロフィールアイコンから「Settings」を開き、左側のメニューから「Developer settings」をクリックします。
  2. Personal Access Tokensを選択する
    「Personal access tokens」→「Tokens (classic)」を選び、「Generate new token」ボタンを押します。
  3. スコープを設定する
    「repo」と「workflow」のスコープを有効にします。必要に応じて「admin:org」も追加してください。
  4. トークンを生成してコピーする
    「Generate token」をクリックし、表示されたトークンを安全な場所に保存します。このトークンは後でGASで使います。

2. Google Apps Scriptでスクリプトを作成する

  1. スプレッドシートを開き、拡張機能メニューからApps Scriptを起動する
    新しいスプレッドシートを作成し、メニューの「拡張機能」→「Apps Script」をクリックします。
  2. スクリプトエディタにコードを記述する
    以下のコードを貼り付けます。GitHubのユーザー名やリポジトリ名、トークンは適宜置き換えてください。
    function getWorkflowRuns() {
    const token = 'YOUR_GITHUB_TOKEN';
    const owner = 'YOUR_GITHUB_USERNAME';
    const repo = 'YOUR_REPO_NAME';
    const url = `https://api.github.com/repos/${owner}/${repo}/actions/runs?per_page=100`;
    const options = {
    headers: { Authorization: `Bearer ${token}` },
    muteHttpExceptions: true
    };
    const response = UrlFetchApp.fetch(url, options);
    const data = JSON.parse(response.getContentText());
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    const rows = data.workflow_runs.map(run => [
    run.id,
    run.name,
    run.head_branch,
    run.status,
    run.conclusion,
    run.event,
    run.created_at,
    run.updated_at
    ]);
    sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
    sheet.getRange(1, 1, 1, 8).setValues([['ID', 'Name', 'Branch', 'Status', 'Conclusion', 'Event', 'Created', 'Updated']]);
    }
  3. スクリプトを保存して実行する
    フロッピーアイコンで保存し、実行ボタンを押します。初回は権限の承認が必要です。シートにデータが書き込まれます。

3. 定期実行のトリガーを設定する

  1. Apps Scriptエディタでトリガーを追加する
    左側の時計アイコン「トリガー」をクリックし、「トリガーを追加」を押します。
  2. 関数と時間間隔を設定する
    実行する関数に「getWorkflowRuns」を選択し、時間ベースのトリガーを1時間おきなどに設定します。

シート上で可視化・集計を行う方法

取得したデータは生のままでは見づらいため、QUERY関数で加工します。例えば、ワークフロー名ごとの成功回数を集計するには、以下のような数式を使います。

=QUERY(A1:H, "select B, count(A) where E = 'success' group by B label count(A) '成功数'")

また、日別の成功率を計算したい場合は、作成日をDATEVALUEで日付に変換してグループ化します。グラフ機能を使えば、折れ線グラフで成功率の推移を可視化できます。メニューの「挿入」→「グラフ」から、データ範囲を選択してグラフを作成してください。

ADVERTISEMENT

よくあるエラーや注意点

APIレート制限に引っかかる場合

GitHub APIには1時間あたりのリクエスト制限があります。認証ありで5000回までです。ワークフローが多い場合は、トリガー間隔を2時間以上に設定するか、ページネーションを実装して必要なデータだけ取得してください。

トークンの有効期限切れ

Personal Access Tokenには有効期限を設定できます。期限切れになるとAPI呼び出しが失敗するため、定期的にトークンを再生成してGASのコードを更新してください。

タイムゾーンのズレ

APIから返される日時はUTCです。スプレッドシート上で日本の時間に表示したい場合は、GAS内で日付を変換するか、シートの書式設定でタイムゾーンを調整してください。

スプレッドシート監視のメリットと他の方法との比較

比較項目 スプレッドシート監視 GitHub Actionsの画面
複数リポジトリの横断確認 一つのシートで統合可能 リポジトリごとに画面を切り替え
カスタム集計 QUERY関数やピボットで自由に加工 制限あり、フィルタのみ
自動更新 GASトリガーで定期取得 リアルタイムで自動更新
チーム共有 スプレッドシートの共有リンクで簡単 GitHubのコラボレーター権限が必要

まとめ

GoogleスプレッドシートとGitHub APIを連携することで、CI/CDワークフローの監視を一元化できます。GASを使えば自動取得が可能になり、QUERY関数で集計やグラフ化も自在にできます。応用として、Slackに通知するスクリプトを追加すれば、失敗時にすぐ気づけるようになります。まずは小規模なリポジトリから試してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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