14 第5部 演習 / 手を動かして試す

GASドリル(実装演習)

第10〜12章のApps Scriptを「実際に書いて」身につける実装ドリル。値の読み書き・getValues/setValues一括処理・トリガー・差込メール・外部API・全角半角正規化・PropertiesService・例外処理・バッチ分割まで、難易度別の実装課題で鍛えます。

読了 約18分 最終更新 2026.06 演習実装ドリルGASApps ScriptトリガーMailAppUrlFetchApp

読むだけでは Apps Script は身につきません。 この章は、第10〜12章で学んだ GAS を 自分の手で書いて 確かめる実装ドリルです。各課題には、書くための場面と要件があり、自分で書いてから模範解答と見比べられます。ゴールは「型を見ずに自力で書ける」状態です。

基礎 — 値の読み書き

GAS の入口は SpreadsheetApp。「ブック → シート → 範囲 → 値」の階層をコードでたどります。

実装課題 基礎 セルを読んで、隣に書き込む

アクティブなシートの A1 にデータが入っています。

課題A1 の値をログに出力し、B1 に「確認済」と書き込む関数 check を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 基礎 指定シートの最終行に1行追加する

「ログ」という名前のシートに、行を追記していきます。

課題シート「ログ」の最終行の下に、[日時, メッセージ] の1行を追加する関数 addLog(dateStr, msg) を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

一括処理 — getValues / setValues

GAS高速化の核心は「シートへのアクセス回数を減らす」こと。1セルずつではなく、まとめて読み、配列で計算し、まとめて書く のが鉄則です。

実装課題 応用 単価×数量を一括で金額列に書く

A列=単価、B列=数量(2行目以降)。C列に金額を入れたい。

課題2行目から最終行までの「単価×数量」を計算し、C列一括で書き込む関数 fillAmount を書いてください(1セルずつのループは避ける)。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 応用 各行の宛先に差し込みメールを送る

A列=宛先、B列=件名、C列=本文(2行目以降)。

課題各行の宛先に、その行の件名・本文でメールを送る関数 sendAll を書いてください。宛先が空の行はスキップします。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

トリガー — 自動で動かす

手動実行から一歩進み、「編集したら」「毎朝」「フォーム送信時に」自動で動かします。単純トリガーとインストーラブルトリガーの違いを意識します。

実装課題 応用 編集した行にタイムスタンプを記入する(onEdit)

誰かがセルを編集したら、その行の N 列(14列目)に編集時刻を自動で記録したい。

課題編集時に走る単純トリガー onEdit(e) を書いてください。編集された行の14列目に現在時刻を入れます。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 応用 開いたときにカスタムメニューを追加する(onOpen)

利用者が手動で関数を実行できるよう、メニューを用意したい。

課題スプレッドシートを開いたとき、「ツール」メニューに『金額を計算』という項目を追加し、押すと fillAmount が走るようにする onOpen を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 発展 毎朝9時に合計をメールする(時間主導トリガー)

「売上」シートの C 列(金額)の合計を、毎朝メールで受け取りたい。

課題(1) 合計をメール送信する dailyReport と、(2) それを毎日9時台に実行するトリガーを登録する setup の2つを書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 発展 フォーム送信時に自動返信する(onFormSubmit)

Google フォームの回答がスプレッドシートに溜まります。回答列は[タイムスタンプ, メール, 名前]の順。

課題フォーム送信時に、回答者へ受付完了メールを送る onFormSubmit(e) を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

連携・正規化 — シートの外とつなぐ

外部APIから値を取り込んだり、関数では難しい変換をカスタム関数で解決します。

実装課題 応用 外部APIのJSONを取り込む(UrlFetchApp)

ある API が {"rate": 150.2} のような JSON を返します。

課題API を取得して、rate の値を A1 に書き込む関数 fetchRate を書いてください(URLは https://api.example.com/rate とする)。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 応用 全角・半角をそろえるカスタム関数(NFKC)

「ABC123」と「ABC123」が混在し、VLOOKUP のキーが一致しません。標準関数だけでは一括変換できません。

課題セルから =NORMALIZE(A2)=NORMALIZE(A2:A100) で呼べる、NFKC 正規化のカスタム関数 NORMALIZE を書いてください(範囲にも対応)。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

安全運用 — 機密・エラー・大量データ

「動く」だけでなく「安全に動かし続ける」ためのコードです。

実装課題 発展 APIキーを安全に保管する(PropertiesService)

API キーをコードに直書きすると、共有時に漏れます。

課題(1) キーを保存する saveKey と、(2) 保存したキーを使って API を呼ぶ useKey を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 発展 エラーを握って管理者に通知する(try/catch)

自動実行の処理が失敗しても、誰も気づかないのは危険です。

課題riskyTask() を実行し、失敗したら管理者にエラー内容をメールする safeRun を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

実装課題 発展 大量データを分割して、続きから処理する

数万行を1回のトリガーで処理すると、実行時間の上限で途中停止します。

課題1回につき100行ずつ処理し、どこまで進んだかを保存して次回は続きから再開する processBatch を書いてください。
Apps Script

ここに Apps Script を書いてみましょう(実行は GAS エディタで)

関数とGASのドリルを一巡したら、第10章 GAS入門第11章 GAS実践パターン第12章 連携と運用 で型を復習し、関数ドリル と合わせて「読む↔書く」を往復してください。用語は 用語集、一次情報は 参考資料 に。