Google apps script(GAS)とは?使えるシチュエーションを想定してみた!


こんにちは!NexSeedエンジニア講師をしております。一戸です。えりてぃと呼ばれています。

今回はGAS(Google apps scriptの略)を使ってどういうことができるかを具体的に紹介するため、実際に使っているGoogleカレンダーから予定をGoogleスプレッドシートに抜き出し、各タスクに使用している所要時間を割り出す方法を説明したいと思います。

Javascriptをベースにした言語であるため、今回はGoogle Apps独自の関数を使っている部分にフォーカスした説明となります。

 

GAS(Google apps script)が実際に使えるシチュエーション例

<仮想背景>

なぜだかいつも時間に追われてる気がしてならない語学学校NのTeacherえりてぃ。

いつも何に時間を使っているのか、記憶力も極端に乏しいため覚えていない。記憶力がないためGoogleカレンダーにはしっかりタスクを記録はしているけどどのタスクに何時間使っているのかカレンダーを見ながらスプレッドシートに手入力は面倒…。

こういうひと、よく居ると思うんですよね。まさしく私がそうです。自分自身以外でもマネジメントをされている方は自分のメンバーが時間を有効活用できてるかは気になる所。

こんな時、GASが救世主となってくれます!

 

<前提>

対象:2017年9月のスケジュール

取得先:えりてぃのカレンダー

出力先:今回用意したGoogle Spreadシート

実際試してみたい場合はタスクを取得したいカレンダーを用意し、新しいGoogle Spreadシートを一つ作っておきましょう。

では、はじめて行きましょう。

1. 用意したGoogle Spreadシートからスクリプトエディタを開きます

gas1

 

2.開いたスクリプトエディタに名前をつけておきます。ここにGASを書いていきます

gas2

今回やりたいことはスケジュールを管理するのに便利なGoogleカレンダーのイベントをスプレッドシートに取得し、リスト化することで一気に時間計算をするということです。

Googleカレンダーのイベントとは下の図のようにカレンダーを表示した際の四角い水色の単位です。

gas3

 

3.関数の形でGASを書いていきます。

gas4

 

4.書き込むためのスプレッドシートを操作するための変数を用意します。変数名はmySheetとしておきます。

gas5

 

5.読み込みたいカレンダーのカレンダーIDを指定します

gas6

今回は仮のカレンダーID、erity@addressoshienai.netを指定しています。

以下、カレンダーIDの探し方です。

読み込みたいカレンダーを開き、その横の▼をクリック、設定を選択します

gas7

 

開くと、使用できるカレンダーのリンクが表示されるのでクリック

gas8

 

カレンダーの詳細を見ることができる画面が表示されます。その中央あたりにカレンダーIDが表示されているので、GASで指定します

gas9

 

6.取得したい期間を指定し、カレンダー情報を取得します

gas10

 

変数startDate,endDateに取得したい範囲の開始日と終了日をそれぞれ指定します。

このプログラムだと
startDate = ‘2017/09/01 00:00:00’;
endDate = ‘2017/10/01 00:00:00’;
が設定されています。

一見、10月1日の分も取得できそうですが、0時が指定されているため、前日までとうまく指定できています。

 

7.取得したカレンダー情報を、スプレッドシートに書き込みます

gas11

6までの段階で、myEventsという変数にはたくさんのイベント情報が取得されているため、for文で1件ずつ取得し、evtという変数に1件分のイベントを格納しています。

その後、mySheet.appendRowという関数を使用し、取得できた情報をmySheetに書き込んでいます。

こちらが記載したコードのすべてになります。

/* 指定月のカレンダーからイベントを取得する */
function getCalendar() {
var mySheet=SpreadsheetApp.getActiveSheet(); //アクティブなシートを取得
var myCalendar=CalendarApp.getCalendarById('erity@addressoshienai.net'); //特定のIDのカレンダーを取得
var date='2017/09/01 00:00:00'; //月指定(取得したい月の初日)
var startDate=new Date(date); //取得開始日
var endDate=new Date(date);
endDate.setMonth(endDate.getMonth()+1); //取得終了日
var myEvents=myCalendar.getEvents(startDate,endDate); //指定した範囲のカレンダーのイベントを取得
var no=1; //イベントに振るNo
/* イベントの数だけ繰り返してシートに記録 */
for each(var evt in myEvents){
mySheet.appendRow(
[
no, //No
evt.getTitle(), //イベントタイトル
evt.getStartTime(), //イベントの開始時刻
evt.getEndTime(), //イベントの終了時刻
"=INDIRECT(\"RC[-1]\",FALSE)-INDIRECT(\"RC[-2]\",FALSE)" //所要時間を計算
]
);
no++;
}
}

 

出来上がったコードを実行するには「▶」マークの実行ボタンを押します

gas12

 

実行するとスプレッドシートにイベントがリストアップされていきます

gas13

 

ちょっと見づらいので整形するとこんな感じです。(こちらはGoogleスプレッドシートの使い方になるので今回は割愛します)

gas14

試しにムエタイにどれだけ行ってるか確認してみます
gas15

 

6時間行ってます。すぐに見える化ができていますね。

gas16

 

まとめ

いかがでしたでしょうか。

是非今回の記事でGASについて理解していただき、役立てていただけますと幸いです。

engineer-banner

Author Profile

IchinoheEriko
IchinoheEriko
ニュージーランド・オーストラリアを経てセブ島にやってきた、世界を飛び回るベテラン女性エンジニア。インターネット創世期よりWebサイト製作を経験。小売業販促アイテム印刷システム「ipopweb」の立ち上げに企画時から参画し、DB 設計・プログラミング 開発を担当しリリース。業務システムエンハンスやポータルサイトのリニューアル開発、運営、保守も多数手がける。OracleMaster保持者。PHP、JavaScriptを始め15以上の言語使用経験を持つ。茨城大学工学部システム工学科卒。