オノアユムの雑記ブログ

仕事関連の内容やIT系、趣味などいろいろなことを記していく予定です。

GAS(Google Apps Script)でプログラミング!趣味レベルでちょっとしたことをやりたいときにかなり便利なサービス!

f:id:ono-ayumu:20190909224102j:plain

 

Index

 

1.Google Apps Script(GAS)とは?

Google Apps Script(GAS)とは、Googleが提供するサービスの一つであり、JavaScriptプログラムをサーバサイドで動作させることができるものです。

 

このGASの魅力は、Googleのアカウントさえあらえば無料でプログラミングの環境を利用できることです。

 

今でこそ入門書やインターネット上に様々な情報があるので、プログラミングの環境構築はそんなに難しくないですが、通常はプログラミング言語をインストールしたり、設定ファイルをいじったりと気軽に始めるにはハードルが高かったように思えます。

 

その点、GASはすでに開発環境は整っているため、すぐにでもプログラムを書くことが可能となっています。

 

開発環境の構築が不要な点以外にも、Googleが提供しているサービスのおそらくほぼすべてと連携をとることができます。

 

例えば、毎日決まった時間、決まった人に自動的にメール送るシステムの構築やGoogleカレンダーに登録されているスケジュールを取得してスプレッドシートに書き出すシステムの構築などを自分で自由にいろいろなサービスと連携させて作成することができます。

 

 

2.今回のやりたいことの説明

今回やりたいことを具体的に言いますと、自転車のメンテナンス状況(油さしやタイヤの空気入れなどのメンテナンス状況)を例えば「8月21日」に実施したとしたら、Googleカレンダーの8月21日に「自転車 空気入れ」と入れたり、別に日に「自転車 油さし」などという形式でメンテナンスを行った日に予定としてメンテナンス情報を入力しておきます。

 

ここでGASを利用します。

 

GASがやることは大きく分けると3つとなります。

  1. すでに登録されている情報(予定)を抽出する
  2. 抽出した情報(メンテナンスを行った日とそのメンテナンス内容)をプログラム実行日と比較して何日経過しているか計算する
  3. 計算結果をメールの本文としてGメールでメールを送信する

 大筋の流れとしては1~3の処理となりますが、これだけでは毎回自分でプログラムを実行しなくてはならないため、「毎朝6時」に自動でプログラムを実行実行する設定を行う必要があります。

※ここでは「毎朝6時」と仮にしていますが、実際は決まった曜日で実行や決まった時間や数時間・数分置きに実行など様々なパターンで設定することが可能です。

 

 

3.具体的な実装について

①カレンダーから必要な情報を抽出する

コードとしては次の2行で抽出できます。

 var myCals = CalendarApp.getCalendarById(calendarID);
 var myEvents = myCals.getEvents(startDate,endDate);

  calendarID:

  カレンダーに割り振られているIDを格納している変数です。

  IDの直打ちでも可能です。

 startDate,endDate:

  カレンダーの抽出範囲の初めの日と最後の日を格納した変数です。

  こちらも具体的に日付直打ちでも可能です。

②抽出した情報とプログラム実行日を比較する

比較は演算用の関数を利用すれば面倒な日付の計算も一発です。

 Math.floor(( today - myEvents[i].getStartTime() ) / (3600000*24),0);

  today :

  実行日を格納した変数です。

 myEvents[i].getStartTime():

   カレンダーから取得した日付の変数です。

  Math.floor(・・・)/(3600000*24),0);:

  (・・・)の部分はミリ秒で計算されるので日数に換算しています。

③計算結果をメールで送る

メールを送る関数も用意されているので送りたいアドレスと件名、本文をそれぞれ設定するだけでメールが送れます。

 MailApp.sendEmail({
  to : "送りたいメールアドレス",
  subject : "件名",
  htmlBody : ②の計算結果
 });

④トリガーを設定する

自動でプログラムを実行するトリガー(引き金)を設定します。

自動で実行したい時間を設定します。

今回は「午前5時~6時」という時間を設定しています。

一日に一度決まった時間に実行という感じの設定の場合〇時~〇時という形で正確に時刻を設定しての実行はできないようです。

 ※実際に自動で動かしても5時少しすぎくらいには実行してくれるのでよほどサーバが忙しい時間帯でなければ大幅に遅れるということもないのではないかと思います。

 

 

4.さいごに

今回は簡単なプログラムだったので特に詰まることもなかったのですが、やろうと思えばもっといろいろ細かな処理も記述できるので、今回作ったものをベースにどんどん改造していきたいと思います。

 

プログラミングは何かしら作りながら、失敗や調査を繰り返すことで身につくものだと思いますので、勉強だと思っていろいろ試してみようと思います。

 

また進展などありましたら報告できればと思います。