2018年03月30日

Google Apps Scriptの基本

Screenshot 2018-03-20 at 00.43.36.png

 Chromebookを使うようになってから、Googleのサービスをより活用するようになりました。
 中でも、「Google Apps Script」は業務ツールの作成なども含めて最も活用していると言ってもいいと思います。

「Google Apps Script」とは、Googleが提供しているサーバーサイド・スクリプト環境です。サーバーサイド・スクリプトとは、スクリプトをサーバ側で実行するという意味です。つまり、OSやブラウザに依存せずに実行が可能です。
 Googleのクラウド上で自動的に処理されるので、パソコンや端末を立ち上げておく必要もありません。

 Googleのアカウントがあれば無料で利用することができます。GmaiやAndroid端末を持っている人は、すでに利用できる環境があります。

 基本はJava Scriptですが、GoogleのサービスであるGmaiやスプレッドシート・ドキュメントなどと連携できるようになっています。

 スクリプトしだいで、様々なことができます。私が使っている一例としては、
・指定した時間にGmaiの下書きメールを送信する
・Googleフォームに入力があったら、スプレッドシートに記録し・自動返信メールを送る。
・決まった時間に、スプレッドシートの内容をPDFにしてGmaiに添付して送信する。
・RSSをチェックして、ポッドキャストのMP3データをGoogleドライブに保存する。
・Webサイトの更新状況をチェックして、更新されていたら内容をメールで送る。
・PCやスマートフォンとスプレッドシートを連携させる。

 他にもアイデアしだいでいろんなことができます。


Google Apps Scriptを使う方法

 Google Apps Scriptを使う方法はいくつかあります。
1.Google Apps Scriptを単体で作成する
  (Standalone Script)
2.スプレッドシートやGoogleフォームに紐付いたものを作成する。
  (Container Bound Script)

 それぞれの違いは、1の単体で作成するとGoogleドライブにスクリプトファイルが作成されます。
 2の紐付いたものの場合は、スプレッドシートやGoogleフォームに埋め込まれるため、スクリプト自体はGoogleドライブに表示されません。

 Google Apps Scriptの管理画面(https://script.google.com/)を見ると、青の矢印で表示されているのがスクリプト単体です。
 緑のスプレッドシートアイコンに矢印がついたものが、スプレッドシートに紐付いたもの。
 紫のGoogleフォームに紐付いたものは、紫のGoogleフォームアイコンに矢印がつきます。

 Google Apps Scriptの管理画面では、実行回数やエラー率、ユーザ数などが確認できます。

Screenshot 2018-03-20 at 00.46.31.png


Google Apps Scriptの作成方法
 Google Apps Scriptを作成する方法はいくつかあります。

・単体のスクリプト
 Google Apps Scriptの管理画面から新規スクリプトで作成。
 Googleドライブから、新規>その他>Google Apps Scriptで作成する。


・紐付いたスクリプトの作成
 スプレッドシートは、メニューのツールから「スクリプトエディタ」を選択します。
 Googleフォームは、点が3つ並んだ「その他」からスクリプトエディタ」を選択します。


 Google Apps Scriptの作成方法を解説しているWebサイトでは、特にスプレッドシートを使わないのにスプレッドシートから作成する方法を紹介しているものがあります。スプレッドシートと連携しないのであれば、容量の無駄ですので注意が必要です。


いつ実行するのか(トリガーの設定)
 スクリプトをいつ実行するのかは、トリガーで設定します。
 使用できるトリガーは、スクリプトの作り方でも異なります。
・単体スクリプト
 1.時間主導型
 2.カレンダーから

・スプレッドシートに紐付いたもの
 1.時間主導型
 2.カレンダーから
 3.スプレッドシートから(起動・編集・値の変更・フォーム送信時)

・Googleフォームに紐付いたもの
 1.フォームから(起動時・フォーム送信時)


 時間主導型は、特定の日時や、分・時・日・週・月などで実行するものです。
 分:1・5・15・30分毎に起動します。
 時:1・2・4・6・8・12時間毎に起動します。
 日:毎日 午前9〜10時(1日1回指定した時間頃に実行)
 週:毎週 月曜日 午前9〜10時(曜日を指定して指定した時間頃に実行)
 月:毎月 ?日 午前9〜10時(毎月決まった日の指定した時間頃に実行)


 スプレッドシートからの場合は、起動・編集・値の変更・フォーム送信時に実行が可能です。
 起動:スプレッドシートを開いたとき。
 編集:行追加・列追加・行削除・列追加・グリッド挿入・グリッド削除などです。
 値の変更:セルの値が変更されたとき
 フォーム送信時:Googleフォームの回答を記録するスプレッドシート用
 ※値の変更は、どれかひとつでもセルの値が変化すると実行されるので注意が必要です。


 フォームからの場合は、起動時・フォーム送信時に実行可能です。
 起動時:Googleフォームを開いたとき。
 フォーム送信時:回答が送信されたとき。


 カレンダーからの場合は、Googleカレンダーの変更時に実行されます。
 予定を更新しました:予定の新規作成・予定変更・予定削除のときに実行されます。

 よく使うトリガーとしては、時間主導型とGoogleフォームの場合はフォーム送信時です。


 これ以外の方法として、外部からアクセスがあったときに実行する方法があります。
 doGet()とdoPost()という関数を使ってスクリプトを作ります。
 このスクリプトを、公開>ウェブアプリケーションとして導入という手続きを行うと専用のURLが発行されます。
 このURLにアクセスすると、スクリプトが実行されます。
 URLへのアクセスは、ブラウザでも構いませんし、HTTPリクエストでもかまいません。
 IFTTT(イフト)を使って、Webhooksでアクセスすることもできます。



 単体と紐付いたスクリプトの違いでは、もう一つスクリプトの記述方法が異なります。

スプレッドシートの場合は、単体だと
var ss = SpreadsheetApp.openById('<キー>');

 スプレッドシートを特定するキーを記述する必要があります。これは、スプレッドシートのURL
https://docs.google.com/spreadsheets/d/????????????/edit

 ???????????? 部分になります。

スプレッドシートに紐付いたスクリプトの場合
var ss = SpreadsheetApp.getActiveSpreadsheet();

getActiveSpreadsheetだけで、IDの指定は不要です。



Googleフォームでのスクリプト
 Googleフォームとスクリプトを組み合わせると、自動返信メールを送ったり、回答の内容によって処理や文章を変えるなどが可能です。
 Googleフォームには、自動返信の機能がありません。「回答有り難うござましたとか」、「下記の内容で受け付けました」などの自動返信があると回答者は安心できます。

 フォームで使用する場合は、必ず紐付いた形でスクリプトを作る必要があります。


スプレッドシートでのスクリプト
 Excelのマクロ的な使い方よりは、簡易データベースとしての用途の方が適しています。
・スプレッドシートに巡回するサイトのURLを記載しておいて、一定時間ごとにサイトを見に行く。
・フォームやdoGet()で送られたデータを集計して、1日1回スタッフにメールを送る。
・doGetで送られた値をスプレッドシートで検索して結果を返す。


Google Apps Scriptの注意点
 無料で便利なGoogle Apps Scriptですが、制限もあります。
・メール送信は、無料アカウントの場合1日100通が上限です。
 Googleフォームの自動返信で、一度に回答が集中すると超えてしまうことがあります。

・メールを検索して処理をするスクリプトの場合、20,000件/日というGmailの読み取り制限があります。
 ※詳しくは、こちらの過去記事「Google Apps ScriptでGmail読み取り制限によるトラブルを回避する」を参照してください。

・スクリプトの実行時間は最大6分です。
 これを超えると、「起動時間の最大値を超えました」というエラーになります。特にスプレッドシートの読み取りなどでは、書き方によって処理時間が大きく変わります。

 制限はありますが、この範囲内でもかなりのことが可能です。
 当ブログ記事でも、Google Apps Scriptのスクリプトや事例があるので参考になれば幸いです。

 こんなことできない?って質問もお気軽にどうぞ。
posted by Outliner 伊藤 崇 at 17:56| 効率化・仕組み