Google Apps Script オフィスでの活用例

Google Apps Script (GAS)とは

Google社が提供するGoogle AppsGmail、Calendar、Drive、Spreadsheet等々)で利用できるスクリプト言語です。中身はJavaScriptなんですが、Googleが提供しているAPIがけっこう便利で、ちょっとしたプログラミングで使い慣れたGoogle Appsに自動化処理を組み込む事ができます。イメージ的にはよくエクセルのマクロ(VBA)に喩えられるような気がしますが、エクセルの場合はローカルで動作するのに対し、Google AppsおよびGASはクラウドで動作するのが大きな違いかなと思います。

プログラミング経験がある人であれば、ドットインストールで1、2時間くらいで流してみたら使えるようになると思います。

Google Apps Script入門 (全16回)

GAS

GASを使っていて便利に感じる点

どこでも誰でも書ける

当たり前なんですが、Google Appsクラウドです。GASもクラウド上でコーディングする事ができます。エディタも必要ないですしデプロイみたいな作業も必要ありません。Spreadsheetの場合であればメニューの「ツール」のところから「スクリプトエディタ」を開くだけ。パソコンあればどこからでも誰のパソコンでも書けてしまうのはとても便利ですね。

JavaScriptで書ける

ぼくの場合そんなに使い慣れたプログラミング言語というわけでもなかったんですが、知ってる言語だとハードル下がりますね。加えて冒頭で書きましたが、APIも便利で、たとえばGASから外部のREST APIを叩くなんて事も簡単にできます。下記のような感じ。

var response = UrlFetchApp.fetch(
                          "http://example.com/api/getXX",
                           {
                             'contentType' : 'application/json',
                             'method' : "get",
                           }
                        ); 

var data = JSON.parse(response);

たとえばYahoo!などが提供している天気情報APIと組み合わせて…、など簡単にいろんな事ができてしまいそうです。

スケジュール実行が簡単にできる

これが本当に便利です。通常、スケジュール実行させようとすると、どこかにサーバーを作って、cronを仕掛けてみたいな事を考えてめんどくさくなってしまうんですが、GASだとJavaScript書いて、時間主導型のトリガーとして設定しておくだけ。サーバーを作る必要もcronの設定をする必要もありません。僕の場合、半分くらいこれが便利で使ってるかもしれません。

普段からGoogle Appsを使ってる

まあ前提条件みたいなものですが…。プライベートでも会社でもGoogle Apps使う事が多いです。なので、GASが少し書けるだけで普段の日常生活がちょっとラクになったりするので、普段からプログラミングしない人でも使うモチベーションはけっこう高いです。

オフィスでの活用例

というわけですごく便利だなと思い数ヶ月前からオフィスで使われるようになってきました。馴染みのあるGoogle Appsなのでエンジニアだけじゃなくて、普段プログラミングしないような人も触ってるのが面白いです。まだ少ないですがオフィスでの活用例を紹介します。基本お手軽リマインダー系が多いですね。

活用例1 シート記入を催促

あるプロジェクトでは週次で活動予定と活動実績をSpreadsheetで管理する事になっていて金曜日の夜から月曜の朝までに全員が記入するというルールがありました。ただ金曜日の夜というのもあってみんな忘れちゃう。これを管理者が毎週催促するのも面倒なので、GASを使ってリマインダーメールを送るようにしました。GASは3段階に分かれていて、

  1. 金曜日にその週のシートを作成する。メンバーの一覧と活動予定・活動実績を空欄で作ります。そして、「書いてね」とメールで送信する。全てコードで行います。

  2. 土曜日に空欄の人をチェックし、名指しで書かれてない事をやんわりと伝えるメールを送信する。全てコードで行います。

  3. 日曜日の夜に再度メールを送信する。これもコードで自動実行です。

単純な「書いて」というだけのリマインダーではなく、中身を見て一工夫入れると格段に便利に感じます。この場合は、名指しできた事もあって、けっこう効果がありました。

活用例2 来客予定を定期的に周知

オフィスは小規模なベンチャーなので受付も特にありません。なので、来客はアドミさんが基本対応してくれたりするんですが、気付いた人が対応する場合もけっこうあります。たまにあるのは、あってはいけない事なんですが、応接室が前の会議でコーヒー出しっぱなしになってたり付箋がちらばってたりという事があります。それで、みんなGoogle Calendarを使ってるので、Calendar APIを利用してその日の来客予定を周知するGASを作ってます。

  1. 会議スペースのGoogle Calendarに来客の場合は来客というキーワードを含めてカレンダー登録してもらう

  2. 隔日で直近1週間の予定を確認し来客キーワードがあるものをリストアップ。日時、来客予定の件名、誰のお客さんかを含めメールで周知する。コードで自動実行します。

ちなみにメールだけだとやはりすぐ忘れてしまうので、来客の10分前にオフィス内にある3つのhueライトを点滅させるようにしています。hueはAPIを叩くだけでライトの色を変えたり点灯消灯をコントロールする事が簡単にできるのでとても便利です。これも機会があればまた紹介したいと思います。

これで来客対応が以前よりだいぶスムーズにできるようになりました。ライティングなどの物理的なデバイスと連携できるとより効果が大きいですね。

活用例3 各種リマインダー

上記2つはぼくが作ったんですが、他にもプログラミング書いた事がないアドミさんがお弁当の発注確認をGASで行ったりとか。メールの送信処理なんかはほとんど定型のコードで書けてしまうので、プログラミングした事がない人でも簡単にしかけられます。こういう小技みたいなのを入り口にして徐々に応用的な使い方を覚えて行くというのも面白いかもしれませんね。下記がメール送信のコーディング例です。変数の代入とか関数の呼び出し方さえ分かれば誰でも使えそうです。

function sendMail(mail, subject, body) {

  Logger.log(mail);
  Logger.log(subject);
  Logger.log(body);

  // メール送信先
  var sender = "example@example.com";
  var cc    = "";
  var bcc   = sender;
  var reply = sender;
  var to    = mail;

  // 送信先オプション
  var options = {};
  if ( cc )    options.cc      = cc;
  if ( bcc )   options.bcc     = bcc;
  if ( reply ) options.replyTo = reply;

  // メール送信
  MailApp.sendEmail(to, subject, body, options);

}

もちろん業務利用にも活用できます

オフィスのちょっとした自動化にも便利なGASですが、もちろん業務上の簡易的なツールとして利用するのにもとても便利でたとえばPHP等で開発するのに比べ格段に短期間かつ使いやすいものが作れます。特にSpreadsheetを使う場合が多いですが、要因としてはViewにほとんど手をかける事なく使えるものが作れてしまうという点が大きいです。フィルタをかけたり、ソートが出来たり、集計したり、普段Spreadsheetで当たり前のような操作でもWebアプリで作ろうとするとそれなりに工数がかかります。ですが、Spreadsheetを使っていれば、プログラミングで足りない部分があってもSpreadsheetの機能を使って操作者側で応用する事が簡単にできます。結果として短期間で実装でき、かつ変更対応も自己完結するので手がかからない事が多いように感じてます。ぼく自身もこれまで5本程度ツールを作りましたが簡単なもので1時間、時間がかかったものでも1日程度(他のサーバー開発含め2日程度)でリリースしているように思います。例としては下記のようなものがあります。

  • あるサービスの利用傾向分析ツール各種
  • あるサービスの定型文メール送信ツール(宛先フィルタ&文面自動生成&送信)
  • ある新規事業のプロトタイプシステム(ユーザー管理&SMS送信)

その他にもこれは別の人が作ったものですが、GASで作った社内の経費精算システムなど。クラウドの利便性を当たり前に享受しつつ、使い慣れたSpreadsheetで、ユーザー的にも満足度が高い仕上がりになっています。

また、面白い利用例が出来たら共有させて頂きます。