本サイトはアフィリエイト広告(A8.net/もしもアフィリエイト/アクセストレード等)を利用しています
Google Apps Scriptでできること10選|無料で毎日使える自動化アイデア集
📂 GAS入門

Google Apps Scriptでできること10選|無料で毎日使える自動化アイデア集

📅 ⏱ 読了 約14分 ✍️ 凛

💡 本記事には広告(アフィリエイトリンク)が含まれる場合があります。

「Google Apps Scriptって聞いたことあるけど、結局これで何ができるの?」

私がGASを始めたときに、いちばん知りたかったのがこれでした。難しい説明よりも、実際に動いている例を見るほうが早いはずです。

この記事では、私が今も毎日動かしているものを中心に、GASでできることを10個、短いコード付きで紹介します。最後に「GASが苦手なこと」も正直に書きました。できないことを先に知っておくほうが、遠回りせずに済みます。

GASとは何か(3行で)

  • Googleが無料で提供しているプログラミングの実行環境
  • スプレッドシート・Gmail・カレンダー・ドライブなどをコードから操作できる
  • 書いたコードはGoogleのサーバーで動くので、パソコンを閉じても動き続ける

サーバーを借りる必要も、パソコンに何かをインストールする必要もありません。ブラウザとGoogleアカウントだけで完結します。言語はJavaScriptです。

1. スプレッドシートの集計を自動化する

「毎朝、前日分を集計して1行にまとめる」といった定型作業を任せられます。関数(SUMIFなど)と違うのは、条件分岐や外部との連携を書ける点です。

function summarize() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('明細');
  const rows  = sheet.getDataRange().getValues().slice(1);   // 見出しを除く
  const total = rows.reduce((sum, r) => sum + (Number(r[2]) || 0), 0);
  SpreadsheetApp.getActive().getSheetByName('集計').appendRow([new Date(), rows.length, total]);
}

コツ:1行ずつ getValue() で読むと遅くなります。getDataRange().getValues() で一度に配列として取り出すのが基本です。

2. Gmailの振り分け・自動返信

Gmailの標準フィルタでは書けない条件も、GASなら自由に書けます。「本文に金額が書かれていて、かつ差出人が特定ドメイン」のような複合条件も可能です。

function labelInvoices() {
  const label = GmailApp.getUserLabelByName('請求書') || GmailApp.createLabel('請求書');
  GmailApp.search('subject:(請求 OR 御請求) newer_than:30d -label:請求書', 0, 20)
    .forEach(thread => thread.addLabel(label));
}

検索の書き方は、Gmailの検索窓とまったく同じです。from: subject: newer_than:7d -label: などがそのまま使えます。

3. 予約メールをカレンダーへ自動登録

美容室・歯科・レストランの予約確認メールから日時を読み取り、カレンダーに予定を作ります。転記の手間と入れ忘れが同時になくなります。

function addEventFromMail() {
  const thread  = GmailApp.search('subject:予約 newer_than:1d', 0, 1)[0];
  if (!thread) return;
  const body    = thread.getMessages()[0].getPlainBody();
  const m       = body.match(/(\d{1,2})月(\d{1,2})日.*?(\d{1,2})[:時](\d{2})?/);
  if (!m) return;   // 読めなければ登録しない(これが大事)

  const y = new Date().getFullYear();
  const start = new Date(y, Number(m[1]) - 1, Number(m[2]), Number(m[3]), Number(m[4] || 0));
  CalendarApp.getDefaultCalendar().createEvent('📩 予約', start, new Date(start.getTime() + 3600000));
}

注意:日時が読み取れなかったときに「とりあえず登録」は絶対にしないこと。間違った予定ほど厄介なものはありません。

4. LINEやSlackへ毎朝まとめて通知する

その日の予定・天気・やることを1通にまとめて自分に送ります。朝にアプリを3つ開く必要がなくなります。

function pushLine(text) {
  const token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
  UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', {
    method: 'post',
    contentType: 'application/json',
    headers: { Authorization: 'Bearer ' + token },
    payload: JSON.stringify({ to: '自分のユーザーID', messages: [{ type: 'text', text }] })
  });
}

注意:以前よく使われていた「LINE Notify」は2025年3月に終了しました。今から作るならLINE Messaging APIです。トークンはコードに直書きせず、スクリプトプロパティに入れます。

5. Webサイトの情報を定期的に取ってくる

公開されているデータを取得して、スプレッドシートに記録できます。為替レート、気象庁の天気、公的機関が出しているオープンデータなどです。

function logExchangeRate() {
  const res  = UrlFetchApp.fetch('https://api.example.com/rate', { muteHttpExceptions: true });
  if (res.getResponseCode() !== 200) return;
  const rate = JSON.parse(res.getContentText()).usd_jpy;
  SpreadsheetApp.getActive().getSheetByName('為替').appendRow([new Date(), rate]);
}

注意:取得先の利用規約は必ず確認してください。多くのサイトは自動取得を禁止しています。API として公開されているもの、または利用が明示的に許可されているデータを使うのが前提です。

6. 画像から文字を読み取る(OCR)

Googleドライブは、画像をGoogleドキュメントに変換するときに文字起こしをします。この仕組みを使えば、追加費用ゼロでOCRができます。

function ocr(fileId) {
  const doc = Drive.Files.copy(
    { name: 'ocr', mimeType: MimeType.GOOGLE_DOCS },
    fileId,
    { ocrLanguage: 'ja' }
  );
  const text = DocumentApp.openById(doc.id).getBody().getText();
  DriveApp.getFileById(doc.id).setTrashed(true);
  return text;
}

レシートの日付と金額を抜き出してシートに貯めれば、確定申告前の入力作業が激減します(事前に「サービス」からDrive APIの追加が必要です)。

7. スマホから使えるWebアプリを作る

GASはURLを1つ発行するだけでWebアプリを公開できます。買い物リスト、簡易な記録アプリ、社内の申請フォームなど、個人や小さなチーム用途なら十分です。

function doGet() {
  return HtmlService.createHtmlOutput('<h1>買い物リスト</h1>');
}

サーバー代もドメイン代もかかりません。公開範囲を「自分のみ」にすれば、他人からは開けません。

8. Googleフォームの回答を自動処理する

フォーム送信をきっかけに処理を走らせられます(フォーム送信時トリガー)。回答内容で分岐して、担当者にメールしたり、シートを振り分けたりできます。

function onFormSubmit(e) {
  const answers = e.namedValues;
  const type = (answers['お問い合わせ種別'] || [''])[0];
  if (type === '見積依頼') {
    GmailApp.sendEmail('sales@example.com', '見積依頼が届きました', JSON.stringify(answers, null, 2));
  }
}

注意e.namedValues['項目名'] は、回答が無いと undefined になります。任意項目があるフォームでは、必ず存在チェックを入れてください。

9. サービスをまたいだ処理をつなぐ

GASの一番の強みはここだと思っています。「Gmailで受け取る → スプレッドシートに記録 → カレンダーに登録 → LINEで通知」が1つのスクリプトの中で全部書けるためです。

自動化サービス(ZapierやIFTTT)で有料プランが必要になる連携も、GASなら無料枠でまかなえることが多いです。そのかわり、動かないときは自分で直す必要があります。

10. 定期実行で「勝手に動く」状態にする

ここまでの処理は、トリガーを付けて初めて自動化になります。

function setup() {
  ScriptApp.newTrigger('summarize').timeBased().atHour(8).everyDays(1).create();
}

毎朝・毎週月曜・毎月1日といった指定ができます。ただし日単位の指定は「8時〜9時のどこか」という1時間の幅があります。分単位のきっちりした指定はできません。

無料でどこまでできる?(制限のはなし)

無料のGoogleアカウントで使う場合、主な上限は次のとおりです。

項目目安
1回の実行時間6分
1日の合計実行時間90分
メール送信1日100通
URL取得(UrlFetch)1日20,000回
トリガーの合計実行時間1日90分

個人の自動化で困ることはまずありません。ぶつかるとしたら「1回6分」です。数千行を1行ずつ処理すると簡単に超えるので、まとめて読み書きする書き方を覚えるのが対策になります。

(上限は変更されることがあります。最新はGoogle公式のQuotasページで確認してください)

GASが苦手なこと

正直に書いておきます。次のような用途には向きません。

  • 重い計算・大量データの処理:6分の壁があるため、数十万行の集計などはBigQueryなど別の道具が向いています
  • 常時監視・秒単位の反応:最短でも1分おきです。秒単位の即時処理はできません
  • 本格的なWebサービス:同時アクセスが多いサービスには不向きです
  • 利用規約で禁止されているスクレイピング:技術的にできても、やってはいけません

「Googleサービス周りの、ちょっとした面倒を消す」——ここがGASの得意分野です。

最初の一歩をどう踏み出すか

私は看護師で、プログラミングの経験はゼロから始めました。最初にやったのは、自分が毎日困っていること1つをGASで解決することでした。教材を最初から順に読むより、こちらのほうが続きます。

おすすめの順番はこうです。

  1. スプレッドシートのメニューから「拡張機能」→「Apps Script」を開く
  2. console.log('こんにちは') を書いて実行してみる(これだけで第一歩)
  3. 自分のシートの値を1つ読んで表示してみる
  4. 毎日やっている作業を1つ選んで、書いてみる

分からないことは、公式のApps Script リファレンスが結局いちばん正確です。日本語の解説記事と併用すると理解が早くなります。

まとめ

  • GASはGoogleサービスを自動で動かす無料の道具
  • 集計・メール・カレンダー・通知・OCR・Webアプリまで、ひととおりできる
  • 無料枠は個人利用なら十分。気をつけるのは1回6分の制限
  • 苦手なこともある。向いていない用途に無理をしない
  • 始め方は「自分が毎日困っていること1つ」から

このブログでは、実際に動かしているコードを、失敗したところも含めて書いていきます。まずは1つ、動くものを作ってみてください。動いた瞬間の「おおっ」という感覚が、いちばんの燃料になります。

関連記事