marukot-chの日記

弱小SEの雑記です

GitHubにあるリポジトリのTrafficをGoogle Apps ScriptでDiscordに投稿するようにした話

概要

  • GitHubで大したことないツールを管理している
  • 自分はモチベーションをあげるため、Clones、Viewsなどを毎週確認している
  • GitHub APIというREST APIでTrafficを取得できることに気付いため、これを用いてDiscordへ記載することにした

実行結果

Discord投稿結果
SpreadSheet(Summary)
SpreadSheet(Days)

目次

前提条件

  • Fine-grained personal access tokensが作成済みであること
  • Google Driveに書き込み用のスプレッドシートが作成済であり、IDを取得していること
Fine-grained personal access tokensの作成方法について
  • GitHubでFine-grained personal access tokens*1を作成
Fine-grained personal access tokensのアクセス許可について
  • Fine-grained personal access tokensのアクセス許可を行う (資料*2 )

  • Trafficの場合は"Administration"を許可すればよい

スプレッドシートのIDについて

手順

Google Apps Scriptの作成、編集
  • Google Apps Scriptの「新しいプロジェクト」からプロジェクトを作成
  • 左上のプラスボタンを選択し、4つほど「スクリプト」を作成
  • このGistの通りの名前にし、中身もコピペする
    • Gistの説明*4
  • const.gsのreposについては、自分の管理しているリポジトリ名、スレッドIDに変更すること
    • 投稿先がチャンネルの場合、スレッドIDは空欄とする
Google Apps Scriptのスクリプトプロパティを編集
  1. ACCESS_TOKEN: 生成したFine-grained personal access tokensをコピペする
  2. DISCORD_WEBHOOK_URL: Discordに書き込みたいチャンネルのWebhook URLをコピペする
  3. OWNER: GitHubのユーザーネームをコピペする
  4. SPREADSHEET_ID: スプレッドシートのIDをコピペする

Google Apps Scriptのスクリプトプロパティ

動作確認
  1. Google Apps Scriptのmain.gsを選択した状態で、「exportChartAll」を選択し、「実行」する

テスト実行

  • 初回実行時は承認ダイアログが表示される。以下記事にあるとおり。

marukot-ch.hatenablog.com

  1. Discordの該当チャンネル(スレッド)に投稿されていることを確認する

  2. SpreadSheetに書き込まれていることを確認する

トリガー設定
  • Google Apps Scriptのトリガー設定から、任意のトリガーを設定する

トリガー設定

  • 画面キャプチャなどは以下記事に記載あり

marukot-ch.hatenablog.com

困ったことと解決方法

  • グラフのyが2軸あり、わかりづらいので真ん中に値を表示させようとしたが、分からず……
    • こちらのQA記事*5にある、以下部分がとても参考になった(dataLabelPlacement:"center"のところ)
var series = {
  0: {dataLabel: 'value',dataLabelPlacement:"insideBase"},
  1: {dataLabel: 'value',targetAxisIndex: 1,dataLabelPlacement:"center"}
};
  • DiscordのWebhookでスレッドに対して投稿できるかが分からなかったが、ググってでてきた以下記事の通り対応できた
    • https://discord.com/api/webhooks/.../...?thread_id=999999999999のところ scrapbox.io

終わりに

  • 今までは以下のBotで毎週メンションさせ、手動でメモっていた

marukot-ch.hatenablog.com

こんな感じでメモしてた

  • 面倒くさい運用しなくて便利になり、具体的な数値をスプレッドシートに保存でき、今後なにかに使うことができるかもしれない
  • Google Apps Scriptで自動化できることがまだまだ残っている気がする