GithubのPushログをGoogle Spreadsheetsに記録する

Google Apps Scriptを記述する

Google Spreadsheetsを新規作成します。SpreadsheetのIDとシートの名前を控えておきます。スクリプトからシートを呼び出すときに必要になります。

f:id:tatsuzaki98:20201006011929p:plain
Spreadsheet IDとSheet Nameを控えておく

上のメニューバーから『ツール→スクリプトエディタ』を開きます。

f:id:tatsuzaki98:20201006012529p:plain
スクリプトを記入する画面

スクリプトエディタでGithub Webhookから送られてくる処理をSpreadsheetに記述する処理を書きます。
一番簡単なスクリプトを下に載せておきます。

const doPost = (e) => {
  const dataString = e.postData.getDataAsString();
  const data = JSON.parse(dataString);
  edit(data);
  return;
};

const edit = (data) => {
  const commits = data["commits"];
  const sheet = SpreadsheetApp
      .openById(YOUR_SPREADSHEET_ID_HERE)
      .getSheetByName(YOUR_SHEET_NAME_HERE);
  sheet
      .getRange(sheet.getLastRow()+1, 1, commits.length, 5)
      .setValues(commits.map((commit, key) => ([
        commit["id"],
        commit["message"],
        commit["author"]["name"],
        commit["timestamp"],
        commit["url"],
      ])));
};

スクリプト中のSpreadsheet IDとSheet Nameは各自のものに差し替えておいてください。

スクリプトウェブアプリケーションとして導入する

上のメニューから『公開→ウェブアプリケーションとして導入』を選択します。

f:id:tatsuzaki98:20201006013146p:plain
Webアプリとして導入

who has access to the app:のところをanyone, even anonymousに変更しておきます。
Github Webhookのリクエストを通すためです。

Deployを押すと、「スプレッドシートスクリプトによって操作されますが許可しますか」的なことを聞かれるので構わず続行します。

f:id:tatsuzaki98:20201006013813p:plain
初見でこのページ見るとビビる

これで導入は完了です。

『公開→ウェブアプリケーションとして導入』のところに『Current web app URL』が表示されているはずです。
"https://script.google.com/macros/s/{YOUR_APPS_ID}/exec"の形式のやつです。
このURLに、ためしにbash curlでそれっぽいデータをPOSTリクエストしてみます。

curl \
  -X POST \
  -H 'Content-Type: application/json' \
  -d '{"commits": [{"id": "1", "message": "hello.", "author": {"name": "me"}, "timestamp": "2020/10/10", "url": "example.com"}]}' \
  'https://script.google.com/macros/s/AKfycbw6crKJ9ZJErVurbDI5ZkeZut3a-lh8MULELKR1EM3k_DfNrpQ/exec'

下のようなメッセージが返ってくるはずです。

f:id:tatsuzaki98:20201006015208p:plain
POSTリクエストが完了した

何も返されませんでしたというエラーが出ていますが、これはdoPost関数の返り値をしていないからで、今回の場合は問題になりません。

○行目でエラーが生じました、的なメッセージが出た場合は、スクリプトの該当箇所を修正したのちに、改めて『ウェブアプリケーションとして導入』からProject VersionをNewにして更新するとうまくいくようです。

f:id:tatsuzaki98:20201006015638p:plain
spreadsheetにも反映されている

Spreadsheetにも無事反映されています。

Github WebhookにスクリプトのURLを貼る

自分のレポジトリのページで、設定→Webhookを開きます。URLはhttps://github.com/{USER_NAME}/{REPOSITORY_NAME}/settings/hooksです。

f:id:tatsuzaki98:20201006020112p:plain
Webhookを追加するページ

『Add Webhook』を開き、『Payload URL』に先ほどの『Current web app URL』を貼り付けます。また、『Content type』を『application/json』に変更しておきます。

f:id:tatsuzaki98:20201006021135p:plain
Add Webhook

これで全ての準備は完了です。
試しになにかPushして、Spreadsheetに反映されるか見てみましょう。

f:id:tatsuzaki98:20201006021538p:plain
ok

無事成功しました。
POSTリクエストの中身は、先ほどのGithubのWebhookを設定するページの下の方から確認することができます。

f:id:tatsuzaki98:20201006022232p:plain
POSTリクエストの中身

うまくいかなかった場合はここを確認しつつ試行錯誤してみてください。
以上です。