このファイルは、このリポジトリでコードを扱う際の Claude Code (claude.ai/code) へのガイダンスを提供します。
Google Drive API 経由で Google スプレッドシートからチームの名簿データを取得し、JSON 形式に変換する TypeScript アプリケーションです。Google サービスアカウント認証を使用して、TRIAX チームのメンバーデータをエクスポートします。
このアプリケーションはシンプルなパイプラインアーキテクチャに従っています:
-
認証 (
src/auth.ts): サービスアカウント認証を使用した Google OAuth を処理- 環境変数とローカルファイル両方の認証に対応
- API アクセスに
googleapisライブラリを使用
-
ターゲット解決 (
src/target.ts): URL から Google Drive ファイル ID を抽出- デフォルトターゲットは特定の Google スプレッドシートドキュメント
GOOGLE_DRIVE_TARGET_FILE_URL環境変数で上書き可能
-
CSV エクスポート (
src/target.ts): Drive API を使用して Google スプレッドシートを CSV としてエクスポート -
データ変換 (
src/convert.ts): CSV を解析して構造化された JSON に変換- カンマを含む引用符付きフィールドを含む複雑な CSV 解析を処理
- Google Drive 画像 URL を直接アクセス URL に変換
- Google Drive API を使用して画像の実際の MIME タイプを検出
- パフォーマンス最適化のためファイルメタデータをキャッシュ
- ジャージ番号でメンバーをソート
-
ファイル保存 (
src/save.ts): 最終的な JSON をdata/roster.jsonに書き込み
# 依存関係のインストール
npm install
# アプリケーションの実行(roster データを取得し JSON に変換)
npm start
# コンソールに roster データを出力しながら実行
npm run dev
# Lintチェック
npm run lint
# Lint自動修正
npm run lint:fixGOOGLE_SERVICE_ACCOUNT_KEY_JSON: サービスアカウント認証情報を含む JSON 文字列GOOGLE_DRIVE_TARGET_FILE_URL: デフォルトの Google スプレッドシート URL を上書き
googleapis: Drive/Sheets アクセス用 Google API クライアントtsx: コンパイルなしの TypeScript 実行- TypeScript: ES2019 ターゲットと Node.js モジュール解決を使用
- メインエントリポイント (
main.ts) がプロセス全体を調整 - メンバーデータには個人情報、ポジション、写真、好みが含まれる(
src/types.tsのMember、Photo、RosterJSONインターフェースを参照) - 出力形式は
RosterJSONインターフェースに従い、バージョンとタイムスタンプを含む - 画像は Google Drive 共有 URL から直接アクセス URL に変換され、実際の MIME タイプ検出を行う
- Photo オブジェクトには URL と MIME タイプ(例:image/jpeg、image/png、image/heif)の両方が含まれる
このリポジトリは GitHub Actions による自動更新を実装しています:
- 毎日 JST 3:00 に自動実行
- 手動実行 も Actions タブから可能
- 自動コミット:
data/roster.jsonの変更を検出して自動コミット - エラー通知: 失敗時に GitHub Issue を自動作成
- GitHub Secrets に
GOOGLE_SERVICE_ACCOUNT_KEY_JSONを設定 service-account-key.jsonの内容をそのまま Secret として登録
- サービスアカウント認証情報は環境変数またはローカルの
service-account-key.jsonファイルで提供可能 - このアプリケーションはスケジュールジョブとして実行されるよう設計されている
- データ仕様は
spec/DATA_SPEC.mdに文書化されている --dumpフラグを渡すことで roster JSON をコンソールに出力可能- CI bot として
ayanel-ciユーザーを使用してコミット