GASで全カレンダーリソースの名称とアドレスをスプレッドシートに取得する方法

  • このエントリーをはてなブックマークに追加
  • LINEで送る

1.はじめに

GoogleWorkspaceを使っている方で、
「当社管理のカレンダーリソースを全件取得したい!」
などと思っている方、居られるのではないでしょうか。

そんな方々へ、簡単コピペで実現できるGASコードをご紹介します。
これらのデータの活用方法も交えながら解説していきます!

2.コード

ではコードをどうぞ。
実行すると、シートA列に指名、B列に対応するメールアドレスがズラっと羅列されます。
シート名やアドレスはご自身の環境に合った内容に変更してくださいね。

function getResourcesAll(){

  const customerId = AdminDirectory.Users.get("あなたのメールアドレス").customerId;
  let pageToken = '';
  let result = [["名称","アドレス"]];

  do{
      let resources = AdminDirectory.Resources.Calendars.list(customerId, {pageToken: pageToken});
      let items = resources.items;

      for(let item of items){
        result.push([item.resourceName, item.resourceEmail]);
        /**
         * itemから取得可能なプロパティは以下の通り
         * resourceEmail
         * capacity
         * etags
         * resourceName
         * resourceCategory
         * generatedResourceName
         * resourceDescription
         * resourceId
         * buildingId
         * kind
         */
      }
      pageToken = resources.nextPageToken;      
    }while(pageToken);
  
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
  sheet.clear();
  SpreadsheetApp.flush();
  sheet.getRange(1,1,result.length, result[0].length).setValues(result);
}

3.解説-前提

3-1.スクリプトエディタについて

まず、リストを載せるスプレッドシートを用意してください。
スプレッドシートの拡張機能タブからエディタを開いてください。
拡張機能タブからAppsScriptを選択

3-2.権限について

前回記事でユーザーリストを取得した時と同じ内容になります。

まず、AdminDirectoryを利用できるユーザーでないと実行できません。
GoogleWorkspaceの特権管理者だと実行可能ですが、
部分的に権限を持つことも可能です。
ここは社内の管理者に付与してもらうしかありません。

なぜなら、AdminDirectoryはリソース情報の編集など、影響の大きい行為を実行できるからです。
誰しもがそんな権限を行使できたら・・・恐ろしいですよね。

ということで、情シスの方に
「GASでAdminDirectoryっての使いたいんだけど、権限もらえる?」
と聞いてみてください。相手が管理者なら分かるはずです。

3-3.AdminDirectoryサービスについて

こちらも前回記事と同じですね。

スクリプトエディタの左側に「サービス」という項目があります。
こちらに「AdminDirectory」との表示がないと、このGASは動きません。

サービスの横の+ボタンをクリックし、
「Admin SDK API」を選択、追加ボタンをクリックしてください。
すると、サービスの欄に追加されます。
AdminSDKを追加

3-4.トリガーについて

日次更新したい場合、日次のトリガー設定を行ってください。
後でも解説しますが、毎回データを削除して再取得した内容に洗い替えるコードになっています。

4.解説-コード

4-1.customerIdについて

最初で定義するcustomerId、ご自身のメールアドレスから取得と書いていますが、
必要なカレンダーリソースをGoogleカレンダーに登録しているアカウントにしてください。

実際に実務で検証してみたところ、
そのアカウントがカレンダー上に表示可能なリソースとして登録している分だけを取得できるようです。

例えば会議室A,B,Cがあったとして、
自身の「マイカレンダー」「その他のカレンダー」にAとBしか登録していなかった場合、
customerIdに自身を設定するとCの情報は取得できません。
必要なカレンダーを予め「マイカレンダー」か「その他のカレンダー」に登録しておくか、
必要なカレンダーが登録されているアカウントをcustomerIdに設定してください。
「マイカレンダー」「その他のカレンダー」の設定方法はこちらです。

4-2.各リソースから取得可能な値について

for文内のコメントに記載していますが、
各カレンダーリソースから様々な情報を取得可能です。

例えばcapacity。
会議室に収容人数を設定していた場合、その値が取得できます。

他にもbuildingIdなど、活用すると拠点情報と紐づけできそうです。
例えばGASを使って空き状況を可視化したい場合などを想定すると、
拠点ごとに検索をする必要がありますから、ビルディングの設定は必須です。

取得する項目を変更する場合、冒頭で定義しているヘッダ項目名を変更するなど
二次元配列の列構成に気を付けてコードを変更してくださいね。

4-3.シートクリアについて

貼り付ける前にシート内容を「sheet.clear()」でクリアしています。
もしコードを書き替えて、差分情報だけ貼り付けしたい場合などは
この部分を削除してください。

5.活用方法のアイデア

様々な活用方法があると思います。

5-1.社員に見せるためのマスタ情報とする

「リソースのブラウジング」という機能があるので、
一般ユーザーが普通にカレンダー登録する際には特にマスタは必要ありません。

ですが例えばcapacity属性に登録した収容人数情報がシートに自動連携され、
一覧性のある状態になっていれば便利そうじゃないですか?

また各社員での開発が盛んな企業の場合、
リソースIDを公開しておくことにも意義があります。

5-2.空き会議室検索ツール用のマスタ

実務で作成しました。
開始時刻と終了時刻、対象の拠点を選択して、
その時間帯に空いている会議室を表示するアプリを開発できます。

Googleカレンダー上でも予定を作成する画面上で空き部屋を検索可能ですが、
「予定作成画面をわざわざ開かずに見たい」というユーザーには好評です。
まあ、UI/UXの好みの問題でしょうね。

5-3.リソース管理/更新用アプリを開発する

マスタ上に「ビルディング/リソースの作成/変更/削除」機能をGASで持たせましょう。
GoogleWorkspace上で操作しなくても、マスタを参照しながらマスタシート上で
管理/更新を一括管理するアプリを開発できます。

あまり手間をかけずに更に拡張するなら、
総務系の拠点管理担当からリソース作成等の依頼を飛ばせる依頼用UIを開発しましょう。
その依頼内容を以て、承認できるようなUIも作成。
承認したら作成等の処理とマスタ更新が走ります。
更新メニューを開く事のできるアカウントを制限するとより良いでしょう。
GASでのwebアプリ開発経験者にとっては、あまり難しくないと思います。

6.さいごに

いかがでしたでしょうか。
たかがカレンダーリソースですが、
固く運用するのであれば開発のし甲斐がありそうですよね。

ご参考になれば幸いです。ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

コメントを残す

*