Google Apps Scriptで業務自動化|GASの基本と実践レシピ10選
Google Apps Script(GAS)を使った業務自動化の方法を解説。スプレッドシート、Gmail、カレンダーの自動化レシピを10個紹介。
editor

チョットデキルの編集部です。プログラミング学習に役立つ情報をお届けします。
Google Apps Script(GAS)は、Googleが提供する無料のスクリプト環境です。スプレッドシート、Gmail、Googleカレンダーなど、普段使っているGoogleサービスをJavaScriptベースのコードで自動化できます。特別な開発環境の構築は不要で、ブラウザさえあればすぐに始められます。本記事では、GASの基本的な使い方と、業務で即活用できる実践レシピを10個紹介します。
GAS (Google Apps Script) による業務自動化 とは
Gmail / スプレッドシート / カレンダー / Drive を JavaScript で操作できる Google の無料サービスです。サーバー不要・追加費用ゼロで、定期実行する業務自動化スクリプトをすぐに動かせます。
TL;DR 早わかりサマリー
- Google Apps Script (GAS) は、Google Workspace と連携できるサーバーレスな JavaScript 実行環境です
- Gmail / スプレッドシート / カレンダー / Drive を自動化でき、社内ツール開発の最短ルート
- JavaScript の基本知識があれば 1 週間で実用ツールが作れます
- Slack 通知 / 定期実行 / Web API 作成までできて、無料で動く
GASの基本を押さえる
GASを始めるには、Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」を選択します。するとスクリプトエディタが開き、すぐにコードを書き始められます。
GASの基本構文はJavaScriptとほぼ同じです。Google独自のAPIを通じて、各サービスにアクセスします。
JavaScript
function myFirstFunction() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const value = sheet.getRange("A1").getValue();
Logger.log(value);
}上記のコードは、アクティブなシートのA1セルの値を取得してログに出力する最小限の例です。SpreadsheetAppのようなクラスを通じて各Googleサービスを操作する、というのがGASの基本パターンになります。
また、GASにはトリガー機能があり、「毎日9時に実行」「フォーム送信時に実行」といった自動実行の設定が可能です。これが業務自動化において非常に強力な武器になります。
レシピ1: スプレッドシートのデータ整形
大量のデータを一括で整形する処理は、手作業では時間がかかります。GASなら数秒で完了します。
JavaScript
function formatData() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const range = sheet.getRange(2, 1, lastRow - 1, 3);
const values = range.getValues();
const formatted = values.map(row => [
row[0].toString().trim(),
row[1].toString().replace(/[0-9]/g, s =>
String.fromCharCode(s.charCodeAt(0) - 0xFEE0)
),
Utilities.formatDate(new Date(row[2]), "Asia/Tokyo", "yyyy/MM/dd")
]);
range.setValues(formatted);
}この例では、A列の空白除去、B列の全角数字を半角に変換、C列の日付フォーマット統一を一括で行っています。
レシピ2: スプレッドシートからメール一括送信
スプレッドシートに記載された宛先リストに対して、メールを一括送信するレシピです。
JavaScript
function sendBulkEmails() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 3).getValues();
data.forEach(row => {
const email = row[0];
const name = row[1];
const subject = row[2];
const body = name + " 様\n\nお世話になっております。\n会議のご案内です。";
GmailApp.sendEmail(email, subject, body);
});
}A列にメールアドレス、B列に氏名、C列に件名を入力しておけば、関数を実行するだけで全員にメールが届きます。GmailのAPI制限(1日あたりの送信数)には注意してください。
レシピ3: Gmailの自動ラベル付け
特定の条件に一致するメールに、自動でラベルを付与する処理です。毎朝トリガーで実行すれば、受信トレイの整理が自動化されます。
JavaScript
function autoLabelEmails() {
const label = GmailApp.getUserLabelByName("要対応")
|| GmailApp.createLabel("要対応");
const threads = GmailApp.search("is:unread subject:(至急 OR 緊急 OR 要返信)", 0, 50);
threads.forEach(thread => {
thread.addLabel(label);
});
}件名に「至急」「緊急」「要返信」を含む未読メールを検索し、「要対応」ラベルを自動付与します。
レシピ4: Googleカレンダーのリマインダー通知
翌日の予定をまとめてメールで通知するレシピです。毎日夕方にトリガーを設定しておけば、翌日の準備に役立ちます。
JavaScript
function sendTomorrowReminder() {
const today = new Date();
const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000);
const dayAfter = new Date(tomorrow.getTime() + 24 * 60 * 60 * 1000);
const events = CalendarApp.getDefaultCalendar().getEvents(tomorrow, dayAfter);
if (events.length === 0) return;
let body = "明日の予定一覧:\n\n";
events.forEach(event => {
const start = Utilities.formatDate(event.getStartTime(), "Asia/Tokyo", "HH:mm");
body += start + " - " + event.getTitle() + "\n";
});
GmailApp.sendEmail(Session.getActiveUser().getEmail(), "明日の予定リマインダー", body);
}レシピ5: Googleフォーム回答の自動処理
Googleフォームの回答が送信されたタイミングで、自動的に処理を実行するレシピです。フォーム送信トリガーと組み合わせて使います。
JavaScript
function onFormSubmit(e) {
const responses = e.namedValues;
const name = responses["お名前"][0];
const email = responses["メールアドレス"][0];
const subject = "お申し込みありがとうございます";
const body = name + " 様\n\nお申し込みを受け付けました。\n担当者より3営業日以内にご連絡いたします。";
GmailApp.sendEmail(email, subject, body);
const sheet = SpreadsheetApp.openById("シートIDをここに入力").getActiveSheet();
sheet.appendRow([new Date(), name, email, "未対応"]);
}フォーム回答者に自動返信メールを送り、同時に管理用スプレッドシートにステータス付きで記録します。問い合わせ対応やイベント申し込みの管理に最適です。
レシピ6: Slack通知の送信
SlackのIncoming Webhookと連携して、GASからSlackチャンネルに通知を送るレシピです。
JavaScript
function sendSlackNotification(message) {
const webhookUrl = PropertiesService.getScriptProperties().getProperty("SLACK_WEBHOOK_URL");
const payload = {
text: message,
username: "GAS通知Bot",
icon_emoji: ":robot_face:"
};
UrlFetchApp.fetch(webhookUrl, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
});
}Webhook URLはスクリプトプロパティに保存することで、コードに直接書かずに済みます。他のレシピと組み合わせれば、「フォーム回答があったらSlackに通知」「エラーが発生したらSlackに報告」といった運用が可能です。
レシピ7: 定期レポートの自動生成
スプレッドシートのデータから、週次レポートを自動生成してメール送信するレシピです。
JavaScript
function generateWeeklyReport() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getRange(2, 1, sheet.getLastRow() - 1, 4).getValues();
let totalSales = 0;
let count = 0;
const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
data.forEach(row => {
if (new Date(row[0]) >= oneWeekAgo) {
totalSales += row[2];
count++;
}
});
const report = "週次レポート\n\n"
+ "期間: 過去7日間\n"
+ "取引件数: " + count + "件\n"
+ "売上合計: " + totalSales.toLocaleString() + "円\n"
+ "平均単価: " + Math.round(totalSales / count).toLocaleString() + "円";
GmailApp.sendEmail("report@example.com", "週次売上レポート", report);
}毎週月曜の朝にトリガーを設定しておけば、手動でレポートを作成する手間がなくなります。
レシピ8: 外部APIからデータ取得
外部のWebAPIからデータを取得し、スプレッドシートに書き込むレシピです。
JavaScript
function fetchExchangeRates() {
const response = UrlFetchApp.fetch("https://api.exchangerate-api.com/v4/latest/USD");
const data = JSON.parse(response.getContentText());
const jpyRate = data.rates.JPY;
const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([
new Date(),
jpyRate,
"USD/JPY"
]);
}為替レートや天気情報など、外部データを定期的に収集してスプレッドシートに蓄積する用途に使えます。
レシピ9: ファイル管理の自動化
Googleドライブ上のファイルを自動的に整理するレシピです。指定フォルダ内のファイルを日付別フォルダに振り分けます。
JavaScript
function organizeFiles() {
const sourceFolderId = "フォルダIDをここに入力";
const sourceFolder = DriveApp.getFolderById(sourceFolderId);
const files = sourceFolder.getFiles();
while (files.hasNext()) {
const file = files.next();
const date = Utilities.formatDate(file.getDateCreated(), "Asia/Tokyo", "yyyy-MM-dd");
let targetFolder;
const folders = sourceFolder.getFoldersByName(date);
if (folders.hasNext()) {
targetFolder = folders.next();
} else {
targetFolder = sourceFolder.createFolder(date);
}
file.moveTo(targetFolder);
}
}大量のファイルが蓄積されるフォルダの整理を自動化できます。
レシピ10: シート間データ同期
複数のスプレッドシート間でデータを自動同期するレシピです。マスターデータの変更を各部門のシートに反映する用途に使えます。
JavaScript
function syncSheets() {
const sourceSheet = SpreadsheetApp.openById("元シートのID").getSheetByName("マスター");
const targetSheet = SpreadsheetApp.openById("先シートのID").getSheetByName("データ");
const sourceData = sourceSheet.getDataRange().getValues();
targetSheet.clearContents();
targetSheet.getRange(1, 1, sourceData.length, sourceData[0].length).setValues(sourceData);
const timestamp = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm");
targetSheet.getRange(1, sourceData[0].length + 2).setValue("最終同期: " + timestamp);
}GASを使いこなすためのポイント
GASで業務自動化を進める際に、いくつか注意すべき点があります。
まず、実行時間の制限です。GASのスクリプトは1回の実行につき最大6分間という制限があります。大量のデータを処理する場合は、処理を分割して複数回に分けて実行する設計が必要です。
次に、APIの呼び出し回数にも日次制限があります。Gmailの送信数やスプレッドシートの読み書き回数には上限が設定されているため、大規模な処理では制限に達しないよう配慮が求められます。
そして、エラーハンドリングも重要です。トリガーで自動実行するスクリプトは、エラーが発生しても気づきにくいという問題があります。try-catchで例外を捕捉し、エラー時にはメールやSlackで通知する仕組みを入れておくと安心です。
なお、GASはJavaScriptベースの言語です。JavaScriptの基本文法(変数、関数、配列操作、オブジェクト)を理解していると、GASのコードをより自在に書けるようになります。
Pythonを使った自動化にも興味がある方は、Pythonで仕事を自動化する方法もあわせてご覧ください。GASはGoogleサービスとの連携に強く、Pythonはデータ分析やWebスクレイピングに強いという特徴があるため、用途に応じて使い分けるのが効果的です。
GASを学ぶなら、まずJavaScriptの基礎から
GASを自在に使いこなすには、JavaScriptの基礎力が欠かせません。変数の扱い、条件分岐、繰り返し処理、関数の定義といった基本概念を理解していれば、本記事で紹介したレシピのカスタマイズも容易になります。チョットデキルの「JS基礎」コースでは、ブラウザ上で手を動かしながらJavaScriptの基本を学べます。GASによる業務自動化の土台作りとして、ぜひ活用してください。
GAS の主要 API 早見表
業務で使う頻度の高い操作です。
JavaScript
// スプレッドシート操作
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("売上");
const data = sheet.getDataRange().getValues();
sheet.appendRow(["新規行", 1000]);
// Gmail 送信
GmailApp.sendEmail("user@example.com", "件名", "本文");
// Gmail 受信ボックス検索
const threads = GmailApp.search("from:boss@company.com newer_than:7d");
// カレンダー予定作成
CalendarApp.createEvent("ミーティング", new Date(), new Date(Date.now() + 3600000));
// Drive ファイル作成
DriveApp.createFile("memo.txt", "メモ内容");
// HTTP リクエスト (API 呼び出し)
const response = UrlFetchApp.fetch("https://api.example.com/data");
const json = JSON.parse(response.getContentText());
// 定期実行 (トリガー設定)
// 編集 > 現在のプロジェクトのトリガー で UI から設定これらを組み合わせると、業務の定型処理がほぼ自動化できます。
実用レシピ 10 選
そのまま使えるパターン。
1. 毎朝 9 時に昨日の売上を Slack に通知 2. Gmail で件名「請求書」を含むメールを自動で Drive に保存 3. スプレッドシートの値が変わったら指定アドレスに通知 4. 月次レポートを自動生成して上司にメール送信 5. 入力フォーム送信時に自動返信 + Slack 通知 6. Google Calendar の今日の予定を毎朝メール送信 7. 在庫スプレッドシートを監視、閾値以下で発注メール送信 8. 名刺フォルダから連絡先を自動で連絡先帳に登録 9. 外部 API (天気・株価・為替) を定期取得してスプレッドシート更新 10. WebApp として公開、Slack / フォームから呼び出し可能な簡易ツール化
詳しい応用は Python で仕事を自動化する方法 でも別言語の事例を確認できます。
ハンズオン Step-by-Step
Google アカウントだけあれば 5 分で動かせます。スプレッドシートを 1 つ用意して、次の手順を試してください。
Step 1. スプレッドシートからエディタを開く
対象のスプレッドシートを開き、メニュー 拡張機能 > Apps Script をクリックして GAS エディタを開きます。
Step 2. 最初のスクリプトを書く
エディタに次のコードを貼り付けて保存 (Ctrl/Cmd + S) します。A1 セルに今日の日付が書き込まれる関数です。
JavaScript
function setToday() {
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A1").setValue(new Date());
}Step 3. 実行して権限を許可
上部の「実行」ボタンを押すと、初回は Google アカウントの認可ダイアログが出ます。「許可」して進めてください。
Step 4. スプレッドシートで結果を確認
スプレッドシートに戻ると A1 セルに今日の日付が入っているはずです。
Step 5. トリガーで自動実行に
左メニューの時計アイコン (トリガー) から「時間主導型 → 日タイマー」で、毎朝 9 時に自動実行する設定にできます。
応用として、フォーム回答を Slack に通知したり、毎日のメール集計を自動化したりが定番の使い方です。
関連リソース
- Python で仕事を自動化する方法
- Excel VBA から Python への移行ガイド
- JavaScript とは
- API とは
- AI でメール・文書作成を効率化
- JavaScript 入門コース
よくある質問
Q. GAS と Python、どちらを使うべきですか
A. Google Workspace 中心の業務なら GAS、それ以外なら Python が向きます。GAS はサーバー不要 / 無料 / Google サービス連携が圧倒的、Python は汎用性が高く DB / Web 連携も自在。
Q. GAS は無料で使い続けられますか
A. はい、Google アカウントがあれば無料で使えます。実行時間 / トリガー数 / メール送信数の上限はありますが、個人や小規模業務なら困りません。詳細は Google の Quotas ページを参照。
Q. GAS でセキュリティ事故は起きませんか
A. 権限スコープを最小化、機密データを GAS スクリプトに直書きしない、共有を慎重にする、の 3 点を守れば事故は防げます。社内ポリシーに従ってください。
Q. JavaScript 未経験でも書けますか
A. 基本文法 (変数 / 条件 / ループ / 関数) があれば書けます。Progate / ドットインストールで 2 週間 JavaScript を学ぶと、GAS にスムーズに入れます。詳しくは JavaScript とは を参照。
Q. Microsoft 365 ユーザーも使えますか
A. GAS は Google Workspace 専用です。Microsoft 365 ユーザーは Power Automate / Office Script (TypeScript ベース) を使うのが対応する選択肢です。
Q. 本格的なシステム開発に GAS は使えますか
A. 中小規模ならいけます。大規模 / 高負荷 / 厳格な可用性が必要なケースは、Cloud Functions / Cloud Run などのフルマネージドサービスに移行するのが王道です。
次に読むべきリソース
- 学習を始めたい方 — JavaScript 入門コース
- 深く理解したい方 — Python による業務自動化
- 無料相談したい方 — LuaGate 無料相談
出典・参考リンク
本記事の主張・数値・仕様に関する根拠は、以下の一次情報・公式ドキュメントを参照しています。リンク先の更新により内容が変わる場合があるため、最新情報は各公式サイトで確認してください。
- Google Apps Script 公式ドキュメント
- Google Apps Script: Quotas for Google Services
- Google Apps Script: OAuth Scopes
- Google Workspace 開発者ガイド
- Python 公式ドキュメント
- Microsoft Learn (Office VBA / Office Scripts)
この記事について
- 監修: 生田 陸人 (LuaGate エンジニア / 大手 IT 企業現役エンジニア)
- 公開: 2026-05-28
- 最終更新: 2026-05-28
- カテゴリ: 業務自動化
- 検証環境: Google Apps Script V8 ランタイム / 2026-05 時点の Quota
- 編集ポリシー: 公式ドキュメント・公的統計を一次情報として優先し、社内エンジニアが実機検証した内容のみを掲載しています。修正提案や事実誤認の指摘は チョットデキル運営 までお寄せください。