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);
}
}

統合のメリット:

  1. コードの重複削減:GitHub API呼び出しロジックが1箇所に集約された
  2. 一貫性の向上:すべての操作が同じエラーハンドリングパターンを使用
  3. デプロイの簡素化:1つのWebアプリをデプロイするだけ
  4. Script Propertiesの統合:すべての設定が1箇所に保存される

デプロイ後の設定:

  1. Script Propertiesに以下を設定:
    • GITHUB_TOKEN:Personal Access Token
    • REPO_OWNER:リポジトリオーナー名
    • REPO_NAME:リポジトリ名
    • PROF_DRIVE_FOLDER:Prof用Driveフォルダ ID
  2. トリガーを設定:
    • 毎日午前2時:triggerDailyProfSync
    • 毎時:triggerHourlyBridge

現在、統合スクリプトは安定稼働している。3つの独立したプロジェクトの機能がすべて利用可能で、コードベースは半分以下に削減された。