はじめに
この記事はリンクアンドモチベーション Advent Calendar 2023の12日目の記事です。
Qiita初投稿となります、Daisukeです。
社内でDX推進を担っており、生産性向上のためにGAS(Google Apps Script)をメインに業務改善のツールを作成しております。
今回紹介する話
業務改善のツールのなかでも「部署のメンバーの時間の使い方を可視化したい」という要望をもらうことがあります。(例:部署内で顧客ごとに費やしている時間に偏りが無いか確認したい。) そのために現状の時間のデータを取得が必要となります。
この記事では、エンジニアでなくてもGASでカレンダー(カレンダー)のデータを取得できるツールを作成したお話をできればと思います。その過程で以下2つを解決しました。
① 取得の対象者をプログラム側から変更→スプレッドシートから取得の対象者を変更
② GASの実行時間制限の壁→時間制限前にトリガーを設定し制限を突破
作成したスプレッドシート「Google カレンダーのデータ取得」をコピーすればユーザー自身でカレンダーデータを取得できる状態としました。
① スプレッドシートとの連携
今回はスプレッドシートにGASを連携させます。スプレッドシートでは取得対象者のGoogleのメールアドレスを以下画像のように記載します。
ここで、A,B,C列はそれぞれ以下となります。B列には記入が必要です。
列 | ヘッダー名 | 情報 | 記入者 |
---|---|---|---|
A | データ取得日 | データ取得された日付が書き込まれます | GASにより記入(課題②、細かい仕様にて詳細説明) |
B | メールアドレス | メールアドレスを記入ください(必須) | ユーザーが記入 |
C | 氏名 | ご自由に記入ください(任意) | ユーザーが記入 |
このようにGoogleアカウントさえあれば、ユーザーが自身で環境構築をせずとも取得対象者のカレンダー情報がシート"取得データ"に書き出されます。
② 実行時間制限の壁を突破
ご存知の方もいらっしゃると思いますが、GASには実行時間の制限(無償アカウント:6分、有償アカウント:30分) があります。
今回のようなGASによるカレンダーデータの取得には時間を要します。
そのためこちらのサイトを参考に、時間制限の壁を越えるためのコーディングを施しました。簡単に言うと、時間制限がくる前に次の実行トリガーを設定するというものです。
しかし今回のGASにそのまま適用してしまうと、どの対象者までデータを取得できたのか、プログラム側で判別がつきません。
そのため、以下コードの110行目にて実行中に取得が完了した対象者がいる場合シート"取得対象者"の対象者の行A列にGASの実行日が書き込むこと で解決しました。
まとめ
今回は作成したスプレッドシート「Google カレンダーのデータ取得」をコピーすればエンジニアでなくてもユーザー自身でカレンダーデータを取得するために行ったことを紹介しました。
以下、取得したデータのイメージを記載します。※時刻・カレンダータイトルは仮で入力しました。
またこの記事ではデータを取得した後の活用に関する機能については、スコープ外としました。取得したデータの活用方法に関しては、いずれQiitaで続編を投稿予定です!
(備考)ユーザーの使用手順
- スプレッドシート「Google カレンダーのデータ取得」にアクセスしファイルを複製
- シート名"取得対象者"のA列"データ取得日"のA2以降を空欄化、メールアドレスを指定)を1.で複製したスプレッドシートから設定
- "新しいカレンダーを作成する"の"新しいカレンダーを設定する"から取得対象者をユーザーのカレンダーに登録
- 1.で複製したスプレッドシートからメニューバーの"カスタムメニュー"→"カレンダーデータを取得"を選択し、GASを実行
参考資料
タイトル:GASおじさんのブログ/ GASでタイムアウトエラーを回避する方法【6分の壁/30分の壁】
URL:https://support.google.com/calendar/answer/37095?hl=ja
タイトル:Google カレンダーヘルプ/ 新しいカレンダーを作成する
URL:https://uncle-gas.com/avoid-timeout-error/