ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【GAS】ファイルの最終更新者を取得する方法

 最近ちょくちょくGoogleAppsScriptを触っています。

 今回ちょっと気になってGoogleドライブにあるファイルの最終更新者を取得できないかと調べていたらできたので、その備忘録になります。

 では始めます。


1:Drive APIを有効にする
 Googleドライブにあるファイルの最終更新者を取得するにはDrive APIを有効にする必要があります。

 スクリプトエディタを開いてメニューの「リソース」→「Googleの拡張サービス」を選択します。
f:id:rikoubou:20190426154927p:plain

 Googleの拡張サービス画面が出て来るので、その中にある「Drive API」の右側にある「無効」とあるボタンをクリックします。
f:id:rikoubou:20190426155129p:plain

 すると以下のように「ON」に切り替わるので、その状態で「OK」ボタンをクリックします。
f:id:rikoubou:20190426155237p:plain

 これでDrive APIが有効になりました。


2:最終更新者を取得するソースコード
 参考資料にあるサイト様からのそのままの引用ですが、以下の記述で取得できます。

Logger.log("name:" + Drive.Files.get(file.getId()).lastModifyingUserName); //最終更新者の名前を取得
Logger.log("name:" + Drive.Files.get(file.getId()).lastModifyingUser.displayName); //ユーザーから取得

 その他Drive APIでアクセスできる情報一覧は以下の公式リファレンスにあります。


3:サンプルコード

 以前の記事で作ったものを少し改造して、最終更新者を取得できるようにしてみたサンプルコードが以下になります。

・サンプルコード

// The onOpen function is executed automatically every time a Spreadsheet is loaded
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  // When the user clicks on "addMenuExample" then "Menu Entry 1", the function function1 is
  // executed.
  menuEntries.push({name: "Get last update user", functionName: "function1"});
  menuEntries.push(null); // line separator
  menuEntries.push({name: "Menu Entry 2", functionName: "function2"});

  ss.addMenu("addMenuExample", menuEntries);
}

function function1() {
  // 最終更新者取得
  var name = "最終更新者:"
  name = name + Drive.Files.get("[対象ファイルのID]").lastModifyingUserName;
  SpreadsheetApp.getUi().alert(name); // メッセージ通知
}

function function2() {
  SpreadsheetApp.getUi().alert("function2が呼ばれました"); // メッセージ通知
}

 このfunction1の関数を実行すると以下のようにメッセージ画面に対象ファイルの最終更新者のユーザ名が表示されます。
f:id:rikoubou:20190426161016p:plain

 Drive APIを有効にした初回の実行ではスクリプト実行の許可を設定しないといけない場合があるので、許可の設定をしてください。


おまけ:最終更新者が取得できる場合とできない場合
 最終更新者の取得方法はわかりましたが、実は最終更新者が取得できない場合があります。
 それはファイルの共有設定の違いによってきます。

 この以前の記事でGoogleドライブの共有設定を色々と説明しています。
 その中にある「匿名●●」と表示される共有設定の状態で「匿名●●」のアカウントが対象ファイルを更新した場合、最終更新者を取得すると「undefined」となります。

 つまり『最終更新者のアカウント名をちゃんと取得したい場合は「匿名●●」の共有設定にはしない』ということになります。


 以上がGoogleAppsScriptを使ってファイルの最終更新者を取得する方法です。

 公式リファレンスにもあるように、最終更新者以外の様々な情報も取得できるのでファイル管理を自動化する時には割と役に立ちそうです。


・参考資料