ダッシュボードのTask Schedulerバッジが更新されない問題を調査中、GitHub APIの重要な特性を発見した。

問題は、CSVファイルを更新した後、ダッシュボードのバッジ表示(「Today」「Yesterday」など)が即座に更新されないことだった。Mongolian Headwordsのバッジは1-3秒で更新されるのに、Task Schedulerは数分かかる。

原因は、使用していたAPIエンドポイントの違いだった。当初、commitsリストAPIを使用していた:

// 遅いアプローチ
const commitsUrl = `https://api.github.com/repos/${owner}/${repo}/commits?path=${filePath}`;
const commits = fetch(commitsUrl).getContentText();
const latestCommit = JSON.parse(commits)[0];

このエンドポイントには15-60秒の伝播遅延がある。GitHubが内部的にコミットリストをキャッシュし、定期的にしか更新しないためだ。

解決策は、2段階のアプローチだった:

ステップ1:Content APIで最新のSHAを取得

const contentUrl = `https://api.github.com/repos/${owner}/${repo}/contents/${filePath}`;
const content = fetch(contentUrl).getContentText();
const sha = JSON.parse(content).sha;

Content APIは1-3秒で更新され、常に最新のSHA値を返す。

ステップ2:SHA値で直接コミット情報を取得

const commitUrl = `https://api.github.com/repos/${owner}/${repo}/commits/${sha}`;
const commit = fetch(commitUrl).getContentText();
const commitData = JSON.parse(commit);

この方法により、コミットリストAPIの遅延を回避しつつ、完全なコミットメタデータ(日時、著者、メッセージ)を取得できる。

ダッシュボードのアーキテクチャは、デュアルAPI戦略を使用するようになった:

  • 高速データ取得:Content APIで最新の状態を確認
  • 詳細メタデータ:commit-by-SHA APIで履歴情報を取得

キャッシュメカニズム(5分TTL)も正しく機能していることを確認した。問題はキャッシュではなく、APIエンドポイントの選択だった。

現在、Task Schedulerバッジは、Mongolian Headwordsと同じ速度(1-3秒)で更新される。この経験から、APIの各エンドポイントの特性を理解することの重要性を学んだ。