GoogleDriveからJavaScriptを公開する

以前はGoogleDriveのファイルを公開状態にすることで、そのまま(プレビュモードじゃなく生のもの)を取得できたらしいが、現在はそれができない。

例えばGoogleAppScriptでWebアプリケーションを作る際参照するJavaScriptがどこかのCDNに乗っていないものである場合には、自前でAmazon S3などを借りて準備しなければならない。
そこで、指定したファイルをGoogleDriveから取得して、その中身を文字列として返すGoogleAppScriptを作る。こうすれば別のWebサービスを利用せず、かつ30GBまでなら無料でできる。

欠点として、CDNとは呼べないほどコンテンツの取得までに時間がかかるので、当然ながら大規模サービスには使えない。

GoogleDriveでの準備

以下の構成をGoogleDrive上のファイル・フォルダを準備する。

Files/                        # DocumentRoot相当の公開したいファイルをまとめるフォルダ。
                              #   IDでアクセスするので名前は何でもよい。
      my-javascript-1.js      # 公開したいJavaScriptファイル 1
      my-javascript-2.js      # 公開したいJavaScriptファイル 1
      ...

Filesフォルダのプロパティから、IDを控えておく。

GoogleAppScriptの準備

空のGASを作り、以下のコードを書く。

var DOCUMENT_ROOT_FOLDER_ID = "YOUR_DOCUMENT_ROOT_FOLDER_ID_HERE!!";



function doGet(e) {
  var js = ContentService.createTextOutput();
  js.setMimeType(ContentService.MimeType.JAVASCRIPT);
  
  var filename = e.parameter.f;
  if(!(filename)) {
    return js;
  }
  
  var documentRoot = DriveApp.getFolderById(DOCUMENT_ROOT_FOLDER_ID);
  var file = null;
  var fileIter = documentRoot.getFilesByName(filename);
  while(fileIter.hasNext()) {
    var file = fileIter.next();
    break;
  }
  
  // 対象ファイルが存在しなかった場合は空JSを返す
  if(!(file)) {
    return js;
  }
  
  js.setContent(file.getBlob().getDataAsString());
  return js;
}

そしたらWebアプリケーションとして公開すればOK。

上記の例ではe.parameter.fでファイル名を取得しているので、GASの公開URL+”?f=ファイル名”でアクセスすることで目的のファイルを取得できるようになっている。

今は最低限のシンプルな機能だが、例えば拡張子に応じてJavaScriptだけでなくJSONを返したりいろいろカスタマイズが可能。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です