【GAS】Google Apps Script(GAS) の概要と最初の一歩


みなさん、こんにちは。イノベーションLABのハヤシです。

今回は、いよいよ Google Apps Script(GAS)についての記事です。
GAS の概要と、サンプルプログラムの作成と実行について解説します。

1. 前提条件

1-1. 必要なもの

  • Google アカウント
    • 無料の Gmail アカウントでも OK
  • ブラウザ

2. GAS とは

2-1. 概要

Google Apps Script 、略して GAS(ガス)は、主に Google 関連サービスをローコードで素早く統合、自動化、拡張することができるプラットフォームです。
Gmail アカウントを持っていれば利用でき、本格的な開発の経験がなくても独自のソリューションを構築できます。

コードは JavaScript で記述しますが、各 Google サービスは専用ライブラリで簡単に操作できます。
Visual Basic for Applications(VBA) を利用したことがある方は似たようなイメージでとらえていただいてよいと思います。


Excel 同様にマクロを作成することもできます。 Excel では Excel 上で VBA で記述されますが、 Google スプレッドシートでは GAS 上で JavaScript で記述されます。

また、 HTML やスタイルシートファイルを作成し、簡易 Web アプリとして公開することもできます。

2-2. 特徴

開発環境の構築が不要

ブラウザ上で作成・実行することができ、ファイルは Google ドライブに保存されるため、 PC 上での開発環境構築の手間なく始められます。

無料で利用できる

Google Workspace の有料プランに加入していない、個人の Gmail アカウントでも利用することができます。
※ただし、一部機能は有料プランでないと実行できないものや、有料プランよりも制限が厳しいものもあります。
例)Google Chat の制限で bot へのメッセージ送信は無料アカウントではできない、メール本文として設定できるサイズが無料プランだと少ない、など
参考)
Google Chat で利用できる機能を確認する(使用するアカウント別) - Google Chat ヘルプ

Google 各サービスと連携しやすい

Google の各サービスを操作するための機能が整備されているので、簡単に各サービスの操作をすることができます。

トリガー機能で自動実行することができる

GAS にはトリガーという機能があり、特定の条件で作成したプログラムを自動実行することができます。
トリガーには、時間ベースのトリガー、イベントドリブントリガーなどがあります。


時間ベースのトリガーでは、特定の時間になったらプログラムを実行させることができます。
1時間ごとに実行させる、毎日何時頃に実行させる、毎週何曜日の何時頃に実行させる... など選択することができます。
※注意点は、「何時頃」の場合 1時間の範囲内 でしか指定ができません。

参考)
Simple Triggers  |  Apps Script  |  Google Developers
Installable Triggers  |  Apps Script  |  Google Developers

2-3. 注意点

ローカルのファイル操作はできない

ブラウザからプログラムを実行するため、 PC 上のファイルの操作はできません。
Excel のマクロを GAS で置き換えようとする場合は、 ファイルを Google ドライブ上で管理する必要があるので注意してください。

実行制限がある

GAS で実行するプログラムには制限があります。

代表的なものだと実行時間などがあり、これは無料プランでも有料プランでもほぼ変わりません。

  • スクリプトのランタイム(実行時間)
    • 6分/実行(無料・有料ともに)
  • 同時実行
    • 30/ユーザー(無料・有料ともに)
  • メール本文のサイズ
    • 200KB/メッセージ(無料)
    • 400KB/メッセージ(有料)

※2022年8月時点ですので、最新は以下から確認してください。
developers.google.com


この、 6 分の時間制限はなかなか厳しいのではないでしょうか。
6分以上かかる処理を実行しようとすると、6分で処理が止まってしまいますのでお気を付けください。

3. GAS 活用例

3-1. Google サービス自動化

様々な Google サービスを操作することで、日々の業務を自動化することができます。
※各サービスの機能によっては有料の Google Workspace でしか実現できないものもあります

  • Google ドキュメントを作成して、URLをメール送信する
  • Youtube の視聴回数を毎日スプレッドシートに記入する
  • Google スプレッドシートから PDF を生成してURLをメール送信する
  • Google フォームからファイルをアップロードできるようにする

これらは公式のサンプルとしても提供されているので、気になる方は試してみてください。
developers.google.com

3-2. 他のサービスとの連携

GAS の特徴は、 Google の各サービスとの連携が簡単であることを述べました。
その他のサービスについても Google のサービスほど簡単ではないにしろ、通常のプログラムからの連携と同様 Webhook や API を利用して連携することが可能です。


例えば、 GAS で「Google Chat に投稿する」プログラムを、「Slack に投稿する」に変更することも可能です。
MA ツールから定期的にデータを取得してメールしたり、会計ツールのデータをスプレッドシートに転記したり、活用方法は様々です。


ただし、他のサービスの API の制限や、 GAS 自体の制限にはくれぐれも注意するようにしましょう。

3-3. (簡易)Web アプリケーション開発

GAS では主に JavaScript を使用してプログラムを書きますが、 HTML やスタイルシートのファイルを作成し、 Web アプリケーションとして公開することもできます。


通常、 Web アプリケーションを公開する場合はホスティングするサーバを準備する必要がありますが、 GAS の場合は Google 上で実行されるので、新たに準備する必要がありません。


※ただし、独自ドメインは使用できず、基本的に作成したサイトの上部にはこのようなバナーが表示されます。
Google Workspace の同一ドメイン内のみで表示する場合や、 Google Site から呼び出した場合など表示されない条件もあります。

そのため、外部に公開する Web アプリというよりは、社内での簡易な業務アプリに画面が欲しい時、などに利用するイメージです。


また、画面をともなわない API としてデプロイも可能なので、サーバーレスで API を開発することも可能です。

4. スクリプトの種類

GAS には、 2 つのタイプがあります。
それぞれ作成方法や特徴が異なりますので、見ていきましょう。

4-1. スタンドアロンスクリプト

概要

Google スプレッドシートやドキュメントなど、 Google のサービスに紐づけを行わず、単独で動作するスクリプトです。

作成したプロジェクトは Google ドライブに通常のファイルと同じように表示されます。


様々なサービスと連携したい場合や、特定のファイルに紐づいた処理ではない場合に選択することが多いでしょう。

4-2. コンテナバインドスクリプト

概要

特定の Google スプレッドシートなどから作成したスクリプトです。

作成したプロジェクトは紐づけたファイルからしか表示できず、 Google ドライブには表示されません。また、接続の解除もできません。
特定にファイルに対するアドオンやマクロを作成するイメージです。

紐づけたファイルをスタンドアロンスクリプトより簡単に操作することができます。


特定のファイルに特化した操作を行う場合に選択することが多いでしょう。

参考

Container-bound Scripts  |  Apps Script  |  Google Developers

5. サンプルプログラム作成

5-1. スタンドアロンスクリプトの作成

5-1-1. プロジェクトの作成

以下のいずれの方法でも作成できます。

※どちらの方法で作成しても、ファイルは Google ドライブのマイドライブの直下 に保存されます(特定フォルダを開いていたとしても)。必要に応じて移動させてください。

◆パターン1
ブラウザで Google ドライブを開き、左上の「新規」 -> 「その他」 -> 「Google Apps Script」をクリックします。

※一覧にない場合は「アプリを追加」で追加してください

◆パターン2
https://script.google.com/ にアクセスし、左上の「新しいプロジェクト」をクリックします。


いずれの方法でも、以下のような画面に遷移します。

この時点でマイドライブ直下に「無題のプロジェクト」というファイルが出来上がります。

5-1-2. プロジェクトの編集・保存・実行

作成したプロジェクトでは、「コード.gs」というファイルが自動で作成し、開かれています。

まずはプロジェクトの名前を選択して、変更しておきましょう。

Google ドライブ上の表示も変更されます

表示されているエディタの内容を以下のように書き換えます。
※ <名前> 部分は任意の値に書き換えてください

function myFunction() {
  const name = '<名前>';
  console.log('Hello, %s!!', name);
}

「保存」アイコンをクリックすると保存され、「実行」をクリックすると対象の関数が実行され、ログが出力されます。
※複数関数が定義されている場合、「デバッグ」の右隣りにあるドロップダウンで指定されている関数が実行されます

5-1-3. Google ドキュメントを作成してメールを送る処理を実装

ここからは、 Google が提供しているクイックスタートを参考にしていきます。
developers.google.com

GitHub のコードをさきほどのエディタに貼り付けて、保存します。

このソースコードでは、以下のような処理を行っています。

  • Google ドキュメント作成
    • 「DocumentApp」という Google ドキュメントを操作するライブラリの「create」で「Hello, world!」というファイル名のドキュメントを作成する
    • 作成したファイルの内容を「appendParagraph」で書き込む
    • 「getUrl」でファイルの URL を取得する
  • メール送信
    • 「Session.getActiveUser().getEmail()」でログインしているユーザのメールアドレスを取得する
    • 先ほど作成したファイルのファイル名を「getName」で取得して件名とする
    • 「GmailApp」という Gmail を操作するライブラリの「sendEmail」で対象のメールアドレスに対して件名と本文を指定してメール送信する
  • エラー処理
    • エラーが発生した場合はエラーログを出力する


先ほど同様「実行」をクリックすると、権限の確認ダイアログが表示されます。
さきほどはログを出力するだけでしたが、今回はファイルの作成とメール送信を行っているので、それらを実行する権限が必要になります。

「権限を確認」をクリックします。

実行するアカウントを選択します

※無料の Google アカウントの場合は以下の画面に遷移します。表示されているのが信頼できるアドレスであることを確認し、「詳細」をクリックしてください

「StandAlone01(安全ではないページ)に移動」をクリックします。

許可されるものが Gmail と Google ドキュメントだけであることを確認し、「許可」をクリックします。

実行が完了すると、「Hello, world!」というファイルが作成されていることが確認できます。

ファイルを開くと、スクリプトで指定した内容になっているはずです。

また、自分自身のメールアドレス宛にドキュメントの URL がメール送信されています。

これでスタンドアロンスクリプトの作成は完了です。

※アカウントに権限を許可すると、セキュリティメールが届きます。
身に覚えのない許可通知が来た場合は、「アクティビティを確認」で確認・対処しておきましょう。

5-2. コンテナバインドスクリプトの作成

ここでは、 Codelab で公開されているサンプルにそって、 Google スプレッドシートにバインドして、マップや Gmail とも連携するアプリを作成していきます。
codelabs.developers.google.com

5-2-1. 元となるファイルを作成

今回の例では、スプレッドシートを作成します。
Google ドライブの左上から、「新規」 -> 「Google スプレッドシート」 -> 「空白のスプレッドシート」を選択します、

一番左上の A-1 に、住所を入力します。日本語でも大丈夫なので、こんなふうにしてみました。

熊本県熊本市中央区本丸1−1


5-2-2. スクリプトを作成

作成したスプレッドシートに、スクリプトを追加します。

メニューバーで「拡張機能」 -> 「Apps Script」を選択すると、コードエディターが開きます。

スクリプトを以下の内容で上書きして保存します
※Codelab の内容から少し変えています

/** @OnlyCurrentDoc */
function sendMap() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const address = sheet.getRange('A1').getValue();
  const map = Maps.newStaticMap().setLanguage('ja').addMarker(address);
  const email = Session.getActiveUser().getEmail();

  GmailApp.sendEmail(email, 'Map', 'See below.', {attachments:[map]});
}

このソースコードでは、以下のような処理を行っています。

  • Google スプレッドシートからデータ取得
    • 「SpreadsheetApp」という Google スプレッドシートを操作するライブラリの「cgetActiveSheet」でアクティブなシートを取得する(これはスタンドアロンスクリプトでは特定できないため使用不可)
    • 取得したシートの A1 セルに記載された住所情報を取得
  • Google マップ
    • 「Maps」というGoogle マップを操作するライブラリを使用して、取得した住所情報にマーカー(赤いピン)をセットした日本語の地図情報を作成する
  • メール送信
    • 「Session.getActiveUser().getEmail()」でログインしているユーザのメールアドレスを取得する
    • 「GmailApp」という Gmail を操作するライブラリの「sendEmail」で対象のメールアドレスに対して件名と本文、先ほどの地図情報を添付ファイルとして指定してメール送信する

5-2-3. スクリプトを実行
「実行」をクリックすると、権限の確認ダイアログが表示されます。
今回はファイルの読み取りとメール送信を行っているので、それらを実行する権限が必要になります。

権限を承認する方法は、前述の 5-1-3 に記載していますのでそちらをご参照ください。

実行が完了すると、自分自身のメールアドレス宛にマップの情報が添付されたメールが届いています。

これでコンテナバインドスクリプトの作成は完了です。

6. さいごに

GAS とはなんなのか、どういう風に作成するのか、ということをお伝えしました。
みなさん、やりたいことは浮かんできたでしょうか?
ぜひ、様々な処理を自動化してみてください。

こちらでは公式から様々なサンプルが提供されていますので、参考になさってください。
developers.google.com


ちなみに、ここでは触れられませんでしたが、 clasp というものを使うと自分の PC 上で好きなエディタで開発もできるようになります。
github.com

バージョン管理がしたい、お気に入りのエディタを使いたい、などありましたら、試してみてください。


それでは、よい自動化ライフを!

7. 参考

Google Apps Script: Google Workspace を自動化、統合、拡張。
Apps Script  |  Google Developers
Reference overview  |  Apps Script  |  Google Developers