🗂

GitHub Actions と GitHub Pages で簡易 Web API ヘルスチェッカー作成

5 min read

今私のほうで、オープンデータを提供するWeb APIのリストを作成しています。

https://qiita.com/uedayou/items/9e4c6029a2cb6b76de9f

このリストをメンテナンスする上で、提供終了したAPIを見つけ出して削除するのは結構大変です。
また、どのAPIが現在使えないかがぱっとわかれば、利用する側からしても便利だと思いました。

そこで、GitHub Actions で定期的にヘルスチェックを行い、GitHub Pages でその状況を一覧として見れるプログラムを作りました。

https://github.com/uedayou/web-page-checker

今回は、web-page-checkerについて紹介します。

web-page-checker で出来ること

一般的なヘルスチェック(死活監視)で思い浮かぶのは、障害発生時に即座に通知されるような仕組みだと思います。

web-page-checker では、即座に状況がわかるように高頻度でチェックをするためのものではなく、たまに利用する WebページやAPIについて、せいぜい1日に一回程度の頻度でチェックし、ざっくりとした状況が確認できることを想定して作成しました。
このくらいの頻度であれば、GitHub Actions を使っても大丈夫かなと思います。

活用事例

Qiita:利用可能なSPARQLエンドポイントリスト(2021年7月版) の Web API の状況は以下のページで確認ができます。

https://uedayou.github.io/sparql-ep-checker/

GitHub Actions により定期チェックされ、例えばアクセス不能な場合×が表示されます。

使い方

リポジトリ作成

使い方は簡単です。GitHub Actions に関する設定だけ若干面倒です。

まず、自身のGitHubリポジトリにweb-page-checker をフォークして、ローカルにcloneします。
GitHub Actions を利用するため、必ずフォークしてください。
その後 npm install も行います。

$ git clone git@github.com:[アカウント名]/web-page-checker.git
$ cd web-page-checker
$ npm install

試しにここで npm start を実行します。

$ npm start

docs ディレクトリ内の index.html をブラウザで開いて見ましょう。
以下のように表示されます。

チェックリスト変更

チェックする URL は urllist.yaml で管理しています。

- name: Web site
  url: https://uedayou.net/
- name: API server
  url: https://api-jrslod.uedayou.net/sparql
  params: 
    output: json
    query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"

例えばここに、https://uedayou.net/loa/ もチェック対象に加えようとすると以下のように追加します。

- name: Web site
  url: https://uedayou.net/
- name: API server
  url: https://api-jrslod.uedayou.net/sparql
  params: 
    output: json
    query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"
- name: loa site
  url: https://uedayou.net/loa/

その後、npm start を実行すると、index.html の表示が以下のように変わります。

GETパラメータを指定したい場合は、params にパラメータを追加すればパラメータ付きでチェックします。

GETパラメータ付きの記述例
- name: API server
  url: https://api-jrslod.uedayou.net/sparql
  params: 
    output: json
    query: "prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where{ ?s rdfs:label ?label. } limit 10"

チェックしたいURLの追加が完了したら、GitHub に push しておいてください。

GitHub Actions 設定

GitHub Actions の実行スクリプトは以下のようになっています。
このスクリプトは、リポジトリに追加されたデプロイ用の認証情報を使って、gh-pagesブランチにWebページを自動的にデプロイするようになっています。

認証情報の設定方法は、

https://qiita.com/uedayou/items/903f44a8dd251463ce59#サイト公開

を参照してください。
具体的には、秘密鍵・公開鍵作成から秘密鍵を登録の作業が必要です。

.github/workflows/check.yml
name: check

on:
  push:
    branches:
      - 'master'
  #schedule:
  #  - cron: '0 0 * * *'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 1
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - name: check
        run: |
          npm install
          npm run start
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./docs

上記のスクリプトは、masterブランチの push イベントに応じて実行されます。
例えば、

  #schedule:
  #  - cron: '0 0 * * *'

のコメントを外すと、毎日9時過ぎにURLのチェックが実行されます。

GitHub Actions が正常に実行されると、Actions タブで以下のように表示されると思います。

GitHub Pages の設定と確認

GitHub Actions の実行が終わると GitHub Pages の設定さえすれば、チェックリストがWebページとして見れると思います。

デフォルトであれば、以下を開くとチェックリストが表示されます。

https://[アカウント名].github.io/web-page-checker/

懸念点

GitHub Actions は 60日以上リポジトリの活動がない場合は、スケジュール機能が停止するそうです。
https://zenn.dev/hellorusk/articles/fc6d4696f5b269

一応、gh-pagesブランチには自動的に push されるので、この制約にはかからないと思いますが...

まとめ

GitHub Actions と GitHub Pages を使って簡易的な Webページ/API のヘルスチェックの仕組みを作ってみました。

似たようなことはほかでもやってると思いますし、もっと高性能なものもあると思いますが、似たようなニーズがあれば、こちらを試すメリットはあるかなと思います。