3つの独立したGoogle Apps Scriptプロジェクトを、統合された2ファイル構造にリファクタリングした。これにより、メンテナンスが容易になり、機能の重複も解消された。
元の構造:
- Script A:GitHub基本操作(ファイル読み書き、Issues管理)
- Script B:Prof. Erdenebilegの同期ワークフロー
- Script C:データブリッジ機能
各スクリプトは独立して動作していたが、共通のコード(GitHub API呼び出し、認証処理など)が重複していた。
新しい構造:
Code.gs(メインファイル)
doGet():Webアプリエントリーポイント- API操作ルーティング
- 共通ヘルパー関数
ProfWorkflows.gs(専門ワークフロー)
- Prof. Erdenebileg固有の同期処理
- ブリッジワークフロー
- データ変換関数
この構造は、「Taavi-B Gateway」Webアプリアーキテクチャをベースにしている。すべてのAPI操作は、統一されたエントリーポイント(doGet())を通過する。
function doGet(e) {
const operation = e.parameter.operation;
switch(operation) {
case 'github_read':
return handleGitHubRead(e.parameter);
case 'github_write':
return handleGitHubWrite(e.parameter);
case 'prof_sync':
return handleProfSync(e.parameter);
case 'bridge_data':
return handleBridgeData(e.parameter);
default:
return ContentService.createTextOutput(
JSON.stringify({error: 'Unknown operation'})
).setMimeType(ContentService.MimeType.JSON);
}
}
統合のメリット:
- コードの重複削減:GitHub API呼び出しロジックが1箇所に集約された
- 一貫性の向上:すべての操作が同じエラーハンドリングパターンを使用
- デプロイの簡素化:1つのWebアプリをデプロイするだけ
- Script Propertiesの統合:すべての設定が1箇所に保存される
デプロイ後の設定:
- Script Propertiesに以下を設定:
GITHUB_TOKEN:Personal Access TokenREPO_OWNER:リポジトリオーナー名REPO_NAME:リポジトリ名PROF_DRIVE_FOLDER:Prof用Driveフォルダ ID
- トリガーを設定:
- 毎日午前2時:
triggerDailyProfSync - 毎時:
triggerHourlyBridge
- 毎日午前2時:
現在、統合スクリプトは安定稼働している。3つの独立したプロジェクトの機能がすべて利用可能で、コードベースは半分以下に削減された。