GitHub ActionsでGitHub APIを実行しリポジトリのスター数を取得する
1.はじめに
今回はGitHub Actionsのワークフロー経由でGitHub APIを実行しリポジトリのスター数を取得します。
イメージとしてはワークフローが実行されると、
以下のJSONファイルとしてリポジトリ名/スター数が取得できます。
[
{
"name": "リポジトリA",
"stars": 1
},
{
"name": "リポジトリB",
"stars": 22
}
]
以下記事ではJavaScript経由でGitHub APIを実行しリポジトリのスター数を取得していました。
そこで、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