最近更新されたファイルガジェットの代用検討

目次

はじめに

Googleサイトが新しくなってずいぶん経ちましたが、利用できなくなった機能の中に「最近更新されたファイルガジェット」がありました。利用されてた会社様は多いのではと思い、今回の記事では従来のGoogleサイトで利用できていた最近更新されたファイルガジェットをどうにか再現する方法がないかを記載していきます。

最近更新されたファイルガジェットとは

従来のGoogleサイトでは、標準機能の中でいくつかのガジェットが用意されていました。最近更新されたファイルガジェットはファイルキャビネット上のファイルのうち新しいものを指定した件数表示させる機能を持つガジェットになります。ポータルのトップページなどに表示している場合が多い機能ですね。

最近更新されたファイルガジェット

実装する機能

既存のガジェットと同じ機能が提供できるのが理想ではありますが、現実問題としてそうはいきません。まず大本であるファイル置き場のファイルキャビネットの移行先はGoogleサービスの中ではGoogle Drive以外に選択肢がないと考えております。つまりGoogleドライブ上のファイルの更新日付を拾うことにより完全に同じではないにしろ同様の機能を提供します。今回はGoogle Apps Scriptを使って実装してみたいと思います。Google Apps Scriptはメーカーサポートがついていませんので何かトラブルが起きても自己責任ということになりますのでご理解いただいたうえで実装をお願いいたします。

フォルダIDの確認方法

今回のプログラムでは指定したフォルダ内のファイルをチェックすることになります。プログラム上で対象のフォルを指定する必要があります。フォルダIDは以下の形で取得してください。

対象のフォルダを開いてURLのfolders/の後ろにある文字列をコピーします。

Google DriveフォルダID

変数名rootFolderの値にペーストします。合わせてrecipentの値に宛先メールアドレスを指定します。

変数名
rootFolder対象となるフォルダのIDを記載
recipent宛先のメールアドレスを記載

実際のソースコードは下記の通りになります。1日前しか見ないように作っていますが2行目の-1を増やしてもらえれば3日前とか1週間前とか取りに行くことが可能です。めんどくさかったのでグローバル変数使ってますが気になる方は修正してください。

var nowDate = new Date();
var yday = Utilities.formatDate(new Date(nowDate.getFullYear(),nowDate.getMonth(),nowDate.getDate() -1), "JST", "yyyy年MM月dd日 HH:mm:ss");
var messeage ="<html><head></head><body><h2>昨日更新のあったファイルは以下の通りです。</h2><table border=1><tr><th>ファイル名</th><th>更新日</th>";
var i = 0;

function main(){
  var rootFolder = "<フォルダID>";
  getLastUpdatedOnGoogleDriveFilesAndFolders(rootFolder);
  messeage += "</table></body></html>";
  
  //対象が一件もなければメールしない
  if (i > 0){
    sendMail(messeage);
  }
  
}

//メール送信ファンクション
function sendMail(body){
  var sdf = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd');
  //送信先アドレス指定
  const recipient ="<メールアドレス>";
  //メールタイトル指定
  const subject ="ファイル更新通知_" + sdf;

  GmailApp.sendEmail(
    recipient, 
    subject, 
    "HTMLメールが表示できませんでした。",
    {
    htmlBody: body,
    name: "ファイル更新更新通知"
    });
}

//Googleドライブ上のフォルダ/ファイルの最終更新日時を取得するコード
function getLastUpdatedOnGoogleDriveFilesAndFolders(strfolder) {
  var myRootFolder = DriveApp.getFolderById(strfolder);
  var files = myRootFolder.getFiles();
  var folders = myRootFolder.getFolders();

  //ファイルをチェック
  while (files.hasNext()) {
    var file = files.next();
    var name = file.getName();
    var lastUpdatedDate = Utilities.formatDate(file.getLastUpdated(), "JST", "yyyy年MM月dd日 HH:mm:ss");
    
    //前日更新のあったファイルのみを抽出
    if(lastUpdatedDate > yday){
      messeage += "<tr><td><a href=" + file.getUrl() + ">" + name + "</a></td><td>" + lastUpdatedDate + "</td></tr>";
      i += 1
    }
  }

  //フォルダをチェック
  while (folders.hasNext()) {
    var folder = folders.next();
    getLastUpdatedOnGoogleDriveFilesAndFolders(folder.getId());
  }
}

これで前日の更新されたファイルを取得することができるかと思います。HTML形式のメールに表で送信されるように調整してあります。また、ファイル数が膨大の場合うまく動かない可能性がございますので、ご認識の上実行してください。HTMLメールが受け取れない環境の場合もファイルリストは届かない仕様にしてあります。

実行トリガーの設定

前日の値を取りに行きます。厳密には前日の0時からスクリプトが実行された時間までを取ってくるような形にしてあります。不都合ある方はご自身で修正してみてくださいね。Google Apps Scriptには実行タイミングをタスク指定することができますのでその機能を利用して毎日午前0時~午前1時の間でスクリプトを実行させるようにしてみます。スクリプトエディタ画面左にある時計マークをクリックすることでトリガー作成画面に遷移できます。[新しいトリガー]をクリックしていただくことで下記の画面が表示されます。

GASの実行トリガー設定

実行結果は下記のイメージとなります。

通知メール

まとめ

今回はGoogle Apps Scriptを使ってGoogle Drive上の更新ファイルを取得してメール通知する方法をご紹介しました。リアルタイムトリガーが出来ればSpreadsheetに情報を書き出して、GoogleサイトにSpreadsheetを張り付けておくことで最近更新されたファイルガジェットの代用にもなるかもしれないなと思ってみたもののリアルタイム性を求めるのもプログラム回し続けないといけないことから今回の仕様となりました。リアルタイムな通知とはいきませんが一定の代用案としてご利用いただけるのではと考えております。

弊社では、サービスの新規導入、設計変更や運用のご支援を行っております。サービス提供ご希望のお客様は下記よりお問い合せください

目次