GitHub ActionsでGitHub APIを実行しリポジトリのスター数を取得する

に公開

1.はじめに

今回はGitHub Actionsのワークフロー経由でGitHub APIを実行しリポジトリのスター数を取得します。
イメージとしてはワークフローが実行されると、
以下のJSONファイルとしてリポジトリ名/スター数が取得できます

[
  {
    "name": "リポジトリA",
    "stars": 1
  },
  {
    "name": "リポジトリB",
    "stars": 22
  }
]

以下記事ではJavaScript経由でGitHub APIを実行しリポジトリのスター数を取得していました。
https://zenn.dev/is0383kk/articles/dd4950fe42b1dd
一方でGitHub APIは未認証状態の場合、1時間60リクエストまでの制限があります。
そこで、GitHub Actionsのワークフロー内で実行する(承認済み)ことで上記制限を回避します。

状態 制限内容 単位
未認証 60リクエスト/時間 実行元IP
認証済み 5000リクエスト/時間 ユーザー(トークン毎)

2.事前準備:GitHubのアクセストークンを発行する

ここではワークフロー実行に必要なアクセストークンの発行を行います。

■ トークンを発行する

トークンを発行する
GitHubのトークン作成ページ する。
「Generate new token(classic)」を選択する。

次の画面で以下設定し、トークンを発行&コピーしておく。

  • Note:使用用途
  • Expiration:トークンの有効期限
  • トークンのスコープ:public_repo(パブリックリポジトリのみ)

■ リポジトリにトークンの設定を行う

GitHub上でワークフローを配置するリポジトリの設定画面に遷移する。
「Settings」→「Security」→「Secrets and variables」→「Actions」をクリック

「New repository secret」をクリック

遷移先で以下入力し、トークンを登録する。

  • Name:GH_PAT
  • Secret:ghp_XXXXXXXXXXXXXXXXXXXX(発行されたトークン)

3.ワークフローの作成

ここでは実際にワークフローの作成を行います。

■ ワークフローの動作概要

ワークフローが実行されると、リポジトリの「static」フォルダに「stars.json」というファイルが作成されます。
「stars.json」にはJSON形式で以下が格納されます。

  • name:リポジトリ名
  • stars:リポジトリのスター数

ワークフローの成果物:static/stars.json

[
  {
    "name": "リポジトリA",
    "stars": 1
  },
  {
    "name": "リポジトリB",
    "stars": 22
  }
]

■ ワークフロー

GitHubアクションで実行するワークフローを作成します。
以下部分を変更してリポジトリに配置してください。

  • cron: '0 * * * *' (任意のタイミングに修正)
  • https://api.github.com/users/GitHubアカウントID/repos
  • secrets.GH_PAT(登録したトークン名)

ワークフローファイル:.github\workflows\fetch-stars.yml

name: Fetch GitHub stars

on:
  schedule:
    - cron: '0 * * * *'  # 毎時更新
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Fetch star count
        run: |
          curl -s https://api.github.com/users/GitHubアカウントID/repos \
            -H "Authorization: token ${{ secrets.GH_PAT }}" \
            | jq '[.[] | {name: .name, stars: .stargazers_count}]' \
            > static/stars.json

      - name: Commit and push
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add static/stars.json
          git commit -m "Update stars.json" || echo "No changes"
          git push

4.ワークフローの動作確認

ここではワークフローを実行し、
リポジトリ/スター数が記載された「static/stars.json」を作成します。

■ ワークフローを手動実行する

※通常はcron: '0 * * * *'部分で設定した時間に実行されます。

GitHubでワークフローを配置したリポジトリのページを開き、
「Action」→「Fetch GitHub stars」→「Run workflow」をクリックします。

■ ワークフローの成果物を確認する

実行に成功すると、以下のように「static/stars.json」が作成されています。

■ 「static/stars.json」をJavaScriptで参照する

あとは、使用用途に沿って「static/stars.json」を参照する流れになります。
今回はJavaScriptのサンプルを載せておきます。

fetch('/stars.json')
  .then(response => response.json())
  .then(data => {
    const totalStars = data.reduce((sum, repo) => sum + (repo.stars || 0), 0);
    document.getElementById('total-stars').textContent = totalStars;
  })
  .catch(error => {
    console.error('スター数取得エラー:', error);
    document.getElementById('total-stars').textContent = '取得失敗';
  });

以下のように使用できます。

<p>現在の総スター数は<span id="total-stars"></span>です。</p>

Discussion