学習ガイド

Google Apps Scriptで業務自動化|GASの基本と実践レシピ10選

2026318
2026528
12分で読めます
この記事のポイント

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 に通知したり、毎日のメール集計を自動化したりが定番の使い方です。

関連リソース

よくある質問

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 などのフルマネージドサービスに移行するのが王道です。

次に読むべきリソース

出典・参考リンク

本記事の主張・数値・仕様に関する根拠は、以下の一次情報・公式ドキュメントを参照しています。リンク先の更新により内容が変わる場合があるため、最新情報は各公式サイトで確認してください。

この記事について

  • 監修: 生田 陸人 (LuaGate エンジニア / 大手 IT 企業現役エンジニア)
  • 公開: 2026-05-28
  • 最終更新: 2026-05-28
  • カテゴリ: 業務自動化
  • 検証環境: Google Apps Script V8 ランタイム / 2026-05 時点の Quota
  • 編集ポリシー: 公式ドキュメント・公的統計を一次情報として優先し、社内エンジニアが実機検証した内容のみを掲載しています。修正提案や事実誤認の指摘は チョットデキル運営 までお寄せください。
01/04