とほほのGoogle Apps Script入門
目次
- GAS(Google Apps Script)とは
- スタンドアロン型プロジェクトとコンテナバインド型プロジェクト
- GAS を実行する
- GASを REST API として呼び出す
- GAS を Googleスプレッドシートから呼び出す
- GAS をライブラリとして利用する
- GAS を時間トリガーで実行する
- GAS から Gmail にアクセスする
- GAS から Google Calendar にアクセスする
- GAS から HTML を参照する
GAS(Google Apps Script)とは
- Google が提供するスクリプト実行環境です。
- Google Apps Script の頭文字をとって GAS とも呼ばれます。
- JavaScript ベースのスクリプトを Google のサーバー上で動かすことができます。
- Excel から VBA を呼び出すように、Google スプレッドシートから Google Apps Script を呼び出すこともできます。
- Gmail や Google Calendar など Google サービスとの相性がよいです。
- 1度の実行時間は、無料の場合は6分まで、Google Workspace の有料版使用の場合は30分までの制約があります。
- その他、カレンダーへの予定の作成は無料版は 5,000回/日、有償版は 10,000回/日など様々な制限があります。
→ https://developers.google.com/apps-script/guides/services/quotas?hl=ja
スタンドアロン型プロジェクトとコンテナバインド型プロジェクト
スクリプトを作成するにはまず、プロジェクトを作成し、プロジェクトの中にスクリプト関数を作成していきます。プロジェクトには下記の2種類があります。
- スタンドアロン型プロジェクト
- 単独で実行可能なプロジェクトです。
- ライブラリとして登録し、他のプロジェクトから呼び出すこともできます。
- Google Apps Script 管理画面から [新しいプロジェクト] で作成します。
- コンテナバインド型プロジェクト
- Googleスプレッドシート、Googleドキュメント、Googleスライド、Googleフォームファイルに紐づくプロジェクトです。
- Googleスプレッドシートファイル等を開き、[拡張機能]-[Apps Script] から作成します。
- Googleスプレッドシートファイル等を削除するとプロジェクトも削除されます。
GAS を実行する
- スタンドアロン型のプロジェクトを作成します。
- Google Apps Script を開きます。
- [新しいプロジェクト] でプロジェクトを作成します。
- [無題のプロジェクト] をクリックするとプロジェクト名を変更することができます。
- スクリプトを下記の様に編集して Ctrl-S(Macの場合は⌘S) で保存します。
function myFunction() { console.log("Hello world!"); } - [▷実行] ボタンを押して下部の実行ログに
Hello world!と表示されれば成功です。
GASを REST API として呼び出す
- 下記のスクリプトを作成します。
function doGet(e) { const name = e.parameter.name || "(unknown)"; return ContentService.createTextOutput(`Hello ${name}!\n`); } - [デプロイ]-[新しいデプロイ] を実行します。
- [種類の選択⚙] で [ウェブアプリ] を選択します。
- 下記を入力して [デプロイ] ボタンを押します。
説明:My REST API Example アクセスできるユーザー:全員
- URL が表示されるのでコピーして覚えておきます。
- curl を用いて呼び出してみます。リダイレクトが入るので
-L(リダイレクトする) を指定しています。$ curl -L https://script.google.com/macros/s/AKfy.../exec?name=Yamada Hello Yamada!
doGet()を doPost() に変更すれば POST にも対応できます。function doPost(e) { const json = JSON.parse(e.postData.contents); const name = json.name || "(unknown)"; return ContentService.createTextOutput(`Hello ${name}!\n`); }- スクリプトを更新したら [デプロイ]-[デプロイを管理] から [鉛筆✐] をクリックし、[バージョン] で [新バージョン] を指定して [デプロイ] してください。
- curl を用いて下記の様に呼び出してみます。リダイレクトが行われ、リダイレクト先には GET メソッドでアクセスするため、
-X POSTは指定せず、-dオプションのみを指定してください。curl -L https://script.google.com/macros/s/AKfy.../exec -d '{"name": "Yamada"}' Hello Yamada! - デプロイで新バージョンをデプロイすると古いバージョンのデプロイはアーカイブされます。アーカイブの削除機能は無さそうなので、アーカイブを削除する場合はプロジェクトを作り直すしかなさそうです。
- デプロイせずにスクリプトの更新を確認するには、[デプロイ]-[デプロイをテスト] でテスト用の URL を発行し、その URL を使用してください。
GAS を Googleスプレッドシートから呼び出す
- コンテナバインド型のプロジェクトを作成します。
- Googleスプレッドシートファイルを開きます。
- [拡張機能]-[Apps Script] を実行します。
- 下記のスクリプトを入力して Ctrl-S (Macの場合は⌘S)で保存します。
function sayHello() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.getRange("A1").setValue("Hello world!"); } function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('カスタム').addItem('Hello', 'sayHello').addToUi(); } - プロジェクト名は Google スプレッドシート名と同じ名前にしておくと整理しやすいかと思います。
- スプレッドシートを開きなおすと [カスタム]-[Hello] メニューが追加されているので実行します。
- [認証が必要です] のダイアログで [OK] を押します。
- Google アカウントにログインします。
- [このアプリは Google で確認されていません] と表示されますが、自分のみで使用するのであれば [詳細]-[(プロジェクト名)(安全ではないページ)に移動]-[続行] をクリックします。
- 再度 [カスタム]-[Hello] を実行するとスクリプトが実行されます。
- A1 セルに
Hello world!と表示されれば成功です。 - スプレッドシートに関する API の詳細は下記を参照してください。
GAS をライブラリとして利用する
- 新しいプロジェクト CommonLib を作成します。
- 下記のスクリプトを作成します。
function sayHello(sheet) { sheet.getRange("A1").setValue("Hello world!"); } - 左の [⚙プロジェクトの設定] から [スクリプトID] をコピーして記録おきます。
- 新しい Google スプレッドシートを開きます。
- [拡張機能]-[AppScript] を実行します。
- [ライブラリ+] の + マークをクリックして先ほどのスクリプトIDを [検索] して [追加] します。
- 下記のスクリプトを入力して保存します。
function sayHello() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); CommonLib.sayHello(sheet); } function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('カスタム').addItem('Hello', 'sayHello').addToUi(); } - Googleスプレッドシートを開きなおし、[カスタム]-[Hello] を実行します。
- A1 セルに
Hello world!と表示されれば成功です。
GAS を時間トリガーで実行する
- プロジェクトを開き左メニューから [⏰トリガー] を実行します。
- [実行する関数] を選択します。
- [時間ベースのトリガーのタイプを選択] で [特定の日時] や [時間ベースのタイマー] で1時間おきなどを設定します。
GAS から Gmail にアクセスする
- 下記の様なスクリプトで Gmail にアクセスすることができます。
function listGmailMessages() { GmailApp.getInboxThreads().forEach((thread) => { thread.getMessages().forEach((msg) => { Logger.log(`${msg.getDate()} ${msg.getSubject()} (From: ${msg.getFrom()})`); }); }); } - 詳細は下記を参照してください。
GAS から Google Calendar にアクセスする
- 下記の様なスクリプトで Google Calendar にアクセスすることができます。
function listCalendarEvents() { const calendar = CalendarApp.getDefaultCalendar(); const now = new Date(); const nextWeek = new Date(); nextWeek.setDate(now.getDate() + 7); const events = calendar.getEvents(now, nextWeek); events.forEach(event => { Logger.log(`${event.getStartTime()} ${event.getTitle()}`); }); } function createEvent() { const calendar = CalendarApp.getDefaultCalendar(); const start = new Date('2025-11-20T10:00:00'); const end = new Date('2025-11-20T11:00:00'); calendar.createEvent('打ち合わせ', start, end); } - 詳細は下記を参照してください。
GAS から HTML を参照する
- 下記のスクリプトを作成します。
function doGet() { return HtmlService.createTemplateFromFile('index') .evaluate() .setTitle("MY APPLICATION") .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } - [ファイル+]-[HTML] で index という名前の HTML ファイルを作成します。拡張子は自動的に .html となります。
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <h1>Hello world!</h1> </body> </html> - [デプロイ] または [デプロイをテスト] で URL を発行し、GET メソッドで参照すると HTML が表示されます。
CSS や JavaScript ファイルを分割する
- スクリプト(*.gs) の他に登録できるのは HTML(*.html) ファイルのみです。
- CSS や JavaScript ファイルを分割するには HTML を下記の様に修正してください。
<!DOCTYPE html> <html> <head> <base target="_top"> <?!= include('style') ?> </head> <body> <h1>Hello world!</h1> <?!= include('js') ?> </body> </html> - スクリプトに下記の関数を追加してください。
function include(filename) { return HtmlService.createHtmlOutputFromFile(filename).getContent(); } style.htmlを下記の様に作成してください。<style> h1 { color: #666; } </style>js.htmlを次のように作成してください。<script> window.addEventListener("load", () => { console.log("Loaded!"); }); </script>
Copyright (C) 2025 杜甫々
https://www.tohoho-web.com/ex/gas.html