Google Apps Script(GAS)を使ってみよう!

Google Apps Script(GAS)とは

Google Apps Script(GAS)は、Googleが提供する各種サービスの自動化・連携を行うための開発ツールです。
Googleカレンダー、Googleスプレッドシートなどのサービス上で
処理を自動化したり、複数のサービスを連携させることができます。
MicrosoftOfficeのExcelマクロの方が馴染み深い方も多いかと思いますが、それのGoogle版です。

GASの基本的な文法は、JavaScriptの文法を踏襲しています。
JavaScriptを学習済みなら、ほとんどそのまま利用できるのも始めやすい点です。

詳細はこちらをご覧ください。

Google Apps Script(GAS)を使うとどんなことができる?

GASの主な活用例をいくつかご紹介します。※ここでの記載が全てではありません

Googleの単一サービス上での自動化

Googleサービス上で様々な処理を自動化できます。

  • Googleカレンダーの予定を自動で登録・編集する
  • Googleフォームを自動で作成する

Googleの複数サービス上での自動化

Gmail×Googleスプレッドシートなど、複数のGoogleサービスを連携させて業務の効率化を図ることも可能です。

  • Googleスプレッドシートの内容を元にGmailからメールを送信する
  • Gmailの内容を元にGoogleスプレッドシートに記載する

外部のサービス/アプリと連携

APIを経由して、外部のサービスやアプリと連携させることも可能です。
※API(Application Programming Interface):Webサービスやアプリなどと外部とをつなぐインタフェース

  • 指定した時間にSlackやChatworkに自動通知メッセージを送信する
  • Googleフォームの入力内容をSlackやChatworkなどに送信する
  • Googleスプレッドに登録したデータをfreeeやkintoneなどのシステムに送信する

もちろん、zappierやIFTTT、BizteX ConnectなどのiPaaSツールをを利用しても連携は可能です。
わたし自身も、実行回数や費用面等を吟味しながら、iPaaSツールも併用して開発しています。
より自由自在に複雑な処理を構築する場合は、GASを選択することが多いです。

また、外部のサービス/アプリと連携する際は、
連携するツール同士のAPIのドキュメント等を必ず参照のうえ、コードを組むことをオススメします。
わたしがよく参照してるのは、下記です。

ChatWorkのAPI仕様

kintoneのAPI仕様

エッコでのGAS活用事例紹介

これまで、数多くのGASを作成し活用してきました。
エッコでの業務効率化事例を一部ご紹介します。

ChatWork×GAS

  • 期日から任意の日数前に、ChatWorkのタスクを自動でリマインド
  • 特定の日時に決まった文言をChatWorkへの自動送信予約
  • 自動応答チャットbot

わたしは、ChatWorkへの自動送信の予約をよく利用しています。
毎月の勤怠締めや経費申請締切のリマインド、交通安全啓蒙週間のお知らせなど、特定の日時に決まった文言で送信している業務が自動化されたので、忘れることがありません!

ChatWork×GAS×Googleスプレッドシート

  • ChatWorkで自身が所属している全ルームIDを自動で一括取得し、Googleスプレッドシートに書き出す
  • 期日から任意の日数前に、ChatWorkのタスクを自動でリマインド
    ※ルーム毎に日数を変更可能
  • Googleスプレッドシートに記載した日時と内容を元に、ChatWorkへの自動送信予約
  • 定期的に発生するTODOをチャットワークのタスクに自動追加

ChatWorkのタスクを自動でリマインドする機能は非常に重宝します。
自分のタスクだけでなく、相手にもリマインドすることができ、タスク漏れを防止してくれます。
会議当日に、会議の詳細情報を自動送信予約しておくと、忘れがちな前日や当日のリマインドも楽になります。

Googleカレンダー×GAS×ChatWork

  • 自身の登録しているカレンダーの予定をChatWorkに自動送信
  • 期限切れのタスク(ToDoリスト)をChatWorkに自動通知

エッコでは、業務の当番通知やMTGルームの予約通知に利用しています。
カレンダーに登録をしておくだけで当日に一覧でお知らせしてくれるので、
各々がカレンダーに確認しにいく、という手間を省けています。

Googleカレンダー×GAS×Googleスプレッドシート

  • 自身以外の人が登録しているカレンダーの予定を数ヶ月単位で一括取得

管理者は部下の稼働工数をまとめたり分析する機会があると思います。
カレンダーに登録してある予定を、指定した期間で一括でスプレッドシートに書き出すことができるため、
その後の表やグラフの作成が非常に楽です。
GoogleカレンダーにもデフォルトでDL機能がありますが、英語表記でDLされるため、GASを使うのがおすすめです。

Gmail×GAS×ChatWork

  • Gmailに届いたメールの内容を元に、所定のChatWorkルームに自動通知

こちらもエッコでは多用しています。
電子契約書からの締結通知、採用媒体からの応募通知やメッセージ通知、申請フォームからのメール、freee人事労務からのアラート通知…など、様々なメールを件名で判別して、所定のChatWorkルームに振り分けて通知しています。
コミュニケーションツールはChatWorkが主で、メールは時々しか見ないため、なかなか気づけないという場合に役立ちます。

Gmail×GAS×Googleスプレッドシート

  • GoogleスプレッドシートのデータをGmailに取り込んでメールを自動作成・送信
  • Gmailに届いたメールの内容を元に、Googleスプレッドシートに転記

上記で様々なメールを件名で判別して、所定のChatWorkルームに振り分けていると書きました。
ChatWorkに振り分けると同時に、スプレッドシートにメールの内容を書き出すこともしています。
そうすることで、メール通知から始まる業務の後続管理をスプレッドシートで行うことができます。

また、複数の宛先に同じ内容のメールを一括で送信するGASもあります。
スプレッドシートに氏名とアドレスを入力し、実行すると、
Googleドキュメントに予め設定しておいた文章で、氏名とアドレスだけ差し替えた状態で一斉送信してくれます。

kintone×GAS×ChatWork

エッコでは顧客管理や案件管理など様々な情報をkintoneで一括管理しています。
kintone上でレコードが更新された際にワークフローを経て業務を進める場合があります。
その際には、レコードの担当者から承認者に対して、ChatWorkから承認依頼などの通知が飛ぶように開発しています。

Googleコンタクト×GAS×kintone

こちらは実験のために構築したのですが、
Googleコンタクトに登録した連絡先が、自動でkintoneの顧客管理アプリに登録されるように開発しました。

このように、会社の業務・運用に合わせて、柔軟に自動化に取り組むことができます!

AD

ChatworkとGoogleカレンダーの連携方法

ChatworkとGoogleカレンダーを連携してできること

ChatworkとGoogleカレンダーの連携を例に、GASの設定方法を紹介してみます。
今回は、Googleカレンダーに登録してある「社内MTG」の予定を当日にChatwork通知してみましょう。

Googleカレンダーで新しい予定を作成する

自身のカレンダーを開きます。

社内MTGの予定を登録します。
今回は社内MTGだけを抽出するため、社内MTG以外の予定も入れてみます。

GoogleドライブでGoogleAppsScriptを作成する

今回は、GoogleスプレッドシートやGoogleドキュメントを利用しないため、スタンドアロン型のスクリプトエディタ起動方法になります。

Googleドライブを開く

Google Apps Scriptを新規作成


Webブラウザ上で新しいタブが開かれ、上のような画面が表示されます。
この画面上の右側、スクリプトエディタ領域にプログラムコードを記述していきます。

プログラム名の変更

スクリプトエディタが表示された時点で、スクリプトファイルが自動作成されています。
スクリプト名はデフォルトで「無題のプロジェクト」となってるので、必要に応じて名前を変更してください。

プロジェクト名を変更するには、画面上部の「無題のプロジェクト」をクリックし、
「プロジェクトの名前を変更」ダイアログで任意のプロジェクトタイトルを入力してから、「名前を変更」をクリックします。

ChatworkClientを導入

次に、ChatworkのスクリプトIDを設定します。
スクリプトエディタのライブラリの+部分をクリックしてください。

クリックすると下記の画面が開くので、スクリプトIDの部分に下記のIDを入力します。

Chatwork Client for Google Apps Script
Google App Script スクリプト ID:
1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

検索ボタン→追加ボタンの順にクリックします。
このとき、バージョンは最新の数字を選択してください。

完了するとライブラリの部分にChatWorkClientと表示されます。

プログラムコードの記述と保存

今回は入門編として、比較的簡単なソースコードを事前に準備しました。
下記のソースコードをコピー&ペーストしてください。
入力し終えたら、ツールバー上の保存ボタンをクリックしてプロジェクトを必ず保存してください。

本格的なプログラムを作成するためには、
JavaScriptの文法やGASが提供するライブラリなどについて知識を深める必要があります。
このソースのコードがどのような処理をしているかは、いつかのブログで一行ずつ解説していこうと思います。

JavaScriptが組める方はもっと複雑な処理を組むこともできると思いますので、ご自由にカスタマイズしてください。
今回はわかりやすいように固定変数をベタ書きしていますが、グローバル変数として宣言した方が保守性が高くなります。
また、nullやundefind・.length == 0のポカ避けもした方がよいでしょう。
ChatWork送信部分をメソッド化したり、他のプロジェクトから呼び出せるように共通部品化したりすると、汎用性がさらに向上します。

※使用上起きた問題についての責任は負いかねます。 自己責任でのご利用をお願いします。

function getCalendarEvents() {
 
 //カレンダーIDを設定
  const CALENDAR_ID = ‘XXXXXXXXXXXXXXXXXXX‘; // 抽出するカレンダーのIDに書き換えてください★
  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
 
 // 今日の0時0分0秒から
  const startTime = newDate();
  startTime.setHours(00);
  startTime.setMinutes(00);
  startTime.setSeconds(00);
 
 // 今日の23時59分59秒まで
  const endTime = newDate();
  endTime.setHours(23);
  endTime.setMinutes(59);
  endTime.setSeconds(59);
 
 // 今日の曜日を取得
  var dayOfWeek = startTime.getDay() ; // 曜日(数値)
  var dayOfWeekStr = [ “日”, “月”, “火”, “水”, “木”, “金”, “土” ][dayOfWeek] ; // 曜日(日本語表記)
 
 // 今日が土・日だったら
 if(dayOfWeekStr === “土” || dayOfWeekStr === “日” ){
 
  // なにもしない
 
 // 今日が平日だったら
 }else{
 
  // 今日のカレンダー一覧を取得する
  const mtgtoday = calendar.getEvents(startTime, endTime);
  var message = ”;
 
  // 今日の会議が1件もない場合
  if(mtgtoday == null || mtgtoday == undefined || mtgtoday.length == 0){
 
   // メッセージ作成
   // ChatWorkの仕様に従って、通知したい内容に書き換えてください★
   message = message + ‘[To:9999999]Aさん\n‘;
   message = message + ‘本日‘+ (startTime.getMonth()+1) + “” + (startTime.getDate()) + “” + ‘は、社内MTGはありません。\n\n;
   message = message + ‘(このメッセージは自動送信しています)‘;
 
  // 上記以外の場合
  }else{
 
   var eccomtg = ”;
 
   // 今日の会議を1件ずつチェック
   for(const mtg of mtgtoday){
 
    // 会議のタイトルに「社内MTG」が含まれる場合
    if (mtg.getTitle().match(/社内MTG/)) { // 抽出したい予定のタイトルに書き換えてください★
 
     // 抽出した会議のリストを作成
     eccomtg = eccomtg + ‘・’ + mtg.getStartTime().getHours() + ‘:’ + mtg.getStartTime().getMinutes() + ‘〜:’+ mtg.getTitle() + ‘\n’;
    }
   }
 
   // 抽出した会議が1件もない場合
   if(eccomtg == null || eccomtg == undefined || eccomtg.length == 0){
 
    // メッセージ作成
    // ChatWorkの仕様に従って、通知したい内容に書き換えてください★
    message = message + ‘[To:9999999]Aさん\n‘;
    message = message + ‘本日‘+ (startTime.getMonth()+1) + “” + (startTime.getDate()) + “” + ‘は、社内MTGはありません。\n\n;
    message = message + ‘(このメッセージは自動送信しています)‘;
 
   // 抽出した会議がある場合
   }else{
 
    // メッセージ作成
    // ChatWorkの仕様に従って、通知したい内容に書き換えてください★
    message = message + ‘[To:9999999]Aさん\n‘;
    message = message + ‘本日‘+ (startTime.getMonth()+1) + “” + (startTime.getDate()) + “” + ‘の社内MTGは下記の通りです。‘;
    message = message + ‘[info]‘+ eccomtg+ ‘[/info]\n\n‘;
    message = message + ‘(このメッセージは自動送信しています)‘;
   }
  }
 
  // チャット通知
  var cwClient = ChatWorkClient.factory({token: ‘XXXXXXXXXXXX‘}); // ChatWorkのAPIトークンに書き換えてください★
 
  cwClient.sendMessage({
   room_id: 999999999999, // 通知するChatWorkのルームIDに書き換えてください★
   body: message
  });
 }
}

必要箇所の書き換え

ソースコードを保存できたら、コードの中で必要な箇所を書き換えしていきます。

GoogleカレンダーID

ソースコードにオレンジ色で色をつけた箇所です。

GoogleカレンダーIDは、下記の流れで取得できます。



ソースコードのオレンジ色の部分に、上記の赤枠内に記載されているIDを書き換えて保存してください。

ChatWork送信先ルームID

ソースコードに緑色で色をつけた箇所です。
下記のガイドに沿って取得し、ルームIDを書き換えて保存してください。

ChatWork送信メッセージ

https://go.chatwork.com/ja/column/usage/usage-010.html?utm_source=cwp&utm_medium=referral&utm_campaign=oyakudachichat_221214

ソースコードにピンク色で色をつけた箇所です。
宛先のTOlinkや装飾タグなどを利用して、送信したいメッセージに書き換えて保存してください。

ChatworkのAPIトークンを取得する

ソースコードに青色で色をつけた箇所です。
下記のガイドに沿って取得し、APIトークンを書き換えて保存してください。

スクリプトを実行するトリガーを設定する

GASをどのタイミングで実行するかを設定しましょう。
スクリプトの左にある時計マークを押下し、トリガーを追加してください。


実行する関数は「getCalendarEvents」です。
今回は毎日午前9:00-10:00に起動するように設定し、保存します。


これで準備完了です。

Chatworkに通知してみる

指定した時間を待っても良いですが、動作確認のため手動で実行してみます。
実行するメソッドを「getCalendarEvents」にして、実行ボタンを押下してください。

Chatworkに送信されました!
・社内MTGの予定登録がある場合

・社内MTGの予定登録がない場合

まとめ

ExcelマクロやGASは、業務効率化の強力な武器です。
日々のちょっとしたルーチン作業の自動化など、比較的手軽に試してみられるものもあるのではないでしょうか。
まずは身近なところでGASを使ってみて、徐々にできることを増やしてみてください。