メインコンテンツへスキップ

GASで業務自動化する5つの方法

📖 4分で読めます

Google Apps Script(GAS)を使った業務自動化の方法を5つ紹介。メール自動送信、スプレッドシート更新、Slack通知など、コピペで使えるコード付きで解説します。

シェア:

GASで業務自動化する5つの方法

こんな悩みありません?

  • 毎日同じメールを送るのがダルい
  • スプレッドシートのデータ更新を手でやっている
  • 週次レポート作成に時間を取られすぎ
  • ファイル整理が追いつかない
  • チームへの連絡を忘れがち

これ、全部GASで自動化できます。

プログラミングに詳しくなくても大丈夫。この記事のコードをコピペするだけで、けっこういろいろできるようになります。

GASって何?

Google Apps Script(GAS)は、Googleが提供している無料のスクリプト言語です。JavaScriptベースで、Gmail、スプレッドシート、カレンダー、Driveなど、Google Workspaceのサービスと連携できます。

特徴:

  • 無料で使える
  • サーバー不要(クラウドで動く)
  • 時刻指定やイベントトリガーで自動実行
  • Google Workspaceとの連携が簡単

方法1: 定期メール自動送信

何ができる?

毎週月曜日に定例会議のリマインドメールを自動で送る、みたいなことができます。

毎週30分かかっていたメール作成作業が、0分になります。送信忘れもなくなります。

設定手順

  1. Google スプレッドシートを開く
  2. メニュー「拡張機能」→「Apps Script」を選択
  3. 以下のコードを貼り付け
/**
 * 定期メール自動送信
 */
function sendWeeklyReminder() {
  const recipients = "team@example.com";
  const subject = "【リマインド】週次定例会議";

  const body = `
チームの皆様

本日10:00から週次定例会議です。
下記のMeetリンクからご参加ください。

【会議URL】
https://meet.google.com/xxx-xxxx-xxx

【アジェンダ】
1. 先週の振り返り
2. 今週の目標
3. 課題共有

よろしくお願いします。
  `.trim();

  GmailApp.sendEmail(recipients, subject, body);
  Logger.log(`メール送信完了: ${recipients}`);
}

トリガー設定

  1. スクリプトエディタ左の「トリガー」アイコンをクリック
  2. 「トリガーを追加」
  3. 設定:
    • 実行する関数: sendWeeklyReminder
    • イベントのソース: 時間主導型
    • タイプ: 週ベースのタイマー
    • 曜日: 毎週月曜日
    • 時刻: 午前9時〜10時

応用: 個別メール送信

スプレッドシートのリストから個別にメールを送る場合:

function sendPersonalizedEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("メール送信リスト");
  const data = sheet.getDataRange().getValues();

  for (let i = 1; i < data.length; i++) {
    const email = data[i][0];  // A列: メールアドレス
    const name = data[i][1];   // B列: 名前
    const message = data[i][2]; // C列: メッセージ

    GmailApp.sendEmail(email, `${name}様へのお知らせ`, `${name}様\n\n${message}`);
  }
}

方法2: スプレッドシート自動更新

何ができる?

複数のシートからデータを集めて、サマリーを自動で更新します。

毎日1時間かかっていたデータ更新作業が、0分になります。人的ミスもなくなります。

コード

/**
 * 日次サマリー自動更新
 */
function updateDailySummary() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const salesSheet = ss.getSheetByName("売上データ");
  const summarySheet = ss.getSheetByName("日次サマリー");

  // 売上集計
  const salesData = salesSheet.getDataRange().getValues();
  let totalSales = 0;

  for (let i = 1; i < salesData.length; i++) {
    totalSales += salesData[i][2]; // C列: 売上金額
  }

  // サマリーに書き込み
  const today = new Date();
  const row = summarySheet.getLastRow() + 1;

  summarySheet.getRange(row, 1).setValue(today);
  summarySheet.getRange(row, 2).setValue(totalSales);

  Logger.log(`更新完了: 売上=${totalSales}`);
}

毎日深夜1時に自動実行する場合は、トリガーで「日タイマー」を選んで設定します。

応用: 外部APIからデータ取得

function fetchExternalData() {
  const url = "https://api.example.com/data";
  const response = UrlFetchApp.fetch(url);
  const json = JSON.parse(response.getContentText());

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("APIデータ");
  sheet.clear();
  sheet.getRange(1, 1, 1, 3).setValues([["ID", "名前", "値"]]);

  json.forEach((item, index) => {
    sheet.getRange(index + 2, 1, 1, 3).setValues([[item.id, item.name, item.value]]);
  });
}

方法3: Slack通知

何ができる?

スプレッドシートの条件を満たしたら、Slackに通知を飛ばします。

重要な更新をリアルタイムでチームに共有できます。通知忘れがなくなります。

設定手順

  1. Slackで「Incoming Webhooks」を追加
  2. 通知先チャンネルを選択
  3. Webhook URLをコピー

コード

function notifyToSlack() {
  const webhookUrl = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("売上データ");
  const lastRow = sheet.getLastRow();
  const salesAmount = sheet.getRange(lastRow, 3).getValue();

  // 売上が100万円超えたら通知
  if (salesAmount > 1000000) {
    const message = {
      "text": `:tada: 売上が100万円突破! 本日の売上: ¥${salesAmount.toLocaleString()}`
    };

    UrlFetchApp.fetch(webhookUrl, {
      "method": "post",
      "contentType": "application/json",
      "payload": JSON.stringify(message)
    });
  }
}

応用: エラー通知

function sendErrorNotification(errorMessage) {
  const webhookUrl = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";

  const message = {
    "text": `:warning: エラー発生\n\`\`\`${errorMessage}\`\`\``
  };

  UrlFetchApp.fetch(webhookUrl, {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(message)
  });
}

// try-catchでエラーを捕捉して通知
function safeExecute() {
  try {
    updateDailySummary();
  } catch (error) {
    sendErrorNotification(error.toString());
  }
}

方法4: Google Drive自動整理

何ができる?

30日以上更新されていないファイルを自動でアーカイブフォルダに移動します。

ファイル検索時間が80%くらい減ります。

コード

function organizeFiles() {
  const sourceFolderId = "YOUR_SOURCE_FOLDER_ID";
  const archiveFolderId = "YOUR_ARCHIVE_FOLDER_ID";

  const sourceFolder = DriveApp.getFolderById(sourceFolderId);
  const archiveFolder = DriveApp.getFolderById(archiveFolderId);

  // 30日前の日付
  const cutoffDate = new Date();
  cutoffDate.setDate(cutoffDate.getDate() - 30);

  const files = sourceFolder.getFiles();
  let movedCount = 0;

  while (files.hasNext()) {
    const file = files.next();

    if (file.getLastUpdated() < cutoffDate) {
      file.moveTo(archiveFolder);
      movedCount++;
    }
  }

  Logger.log(`${movedCount}個のファイルをアーカイブ`);
}

応用: ファイル名の自動リネーム

function renameFiles() {
  const folderId = "YOUR_FOLDER_ID";
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();

  while (files.hasNext()) {
    const file = files.next();
    const currentName = file.getName();
    const createdDate = file.getDateCreated();

    const dateStr = Utilities.formatDate(createdDate, "JST", "yyyyMMdd");

    // 日付プレフィックスがなければ追加
    if (!currentName.match(/^\d{8}_/)) {
      file.setName(`${dateStr}_${currentName}`);
    }
  }
}

方法5: 定期レポート自動作成

何ができる?

週次データを集計して、PDFレポートを作成し、メールで送信します。

週2時間かかっていたレポート作成が、完全自動になります。

コード

function createWeeklyReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("週次データ");
  const reportSheet = ss.getSheetByName("週次レポート");

  // 今週のデータを集計
  const data = dataSheet.getDataRange().getValues();
  let weeklyTotal = 0;
  let weeklyCount = 0;

  const today = new Date();
  const oneWeekAgo = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);

  for (let i = 1; i < data.length; i++) {
    const recordDate = new Date(data[i][0]);
    if (recordDate >= oneWeekAgo) {
      weeklyTotal += data[i][2];
      weeklyCount++;
    }
  }

  // レポート作成
  reportSheet.clear();
  reportSheet.getRange("A1").setValue("週次レポート");
  reportSheet.getRange("A2").setValue(`期間: ${oneWeekAgo.toLocaleDateString()} ~ ${today.toLocaleDateString()}`);
  reportSheet.getRange("A4").setValue("合計:");
  reportSheet.getRange("B4").setValue(weeklyTotal);
  reportSheet.getRange("A5").setValue("件数:");
  reportSheet.getRange("B5").setValue(weeklyCount);

  // PDF出力してメール送信
  const pdf = DriveApp.createFile(reportSheet.getAs('application/pdf'))
    .setName(`週次レポート_${today.toLocaleDateString()}.pdf`);

  GmailApp.sendEmail(
    "manager@example.com",
    "週次レポート",
    "今週のレポートです。",
    { attachments: [pdf.getAs(MimeType.PDF)] }
  );
}

毎週金曜17時に実行するなら、トリガーで「週ベースのタイマー」を設定します。

まとめ

5つの自動化で、週5時間以上の削減が見込めます。年間だと約250時間。

自動化削減時間/週
メール自動送信30分
スプレッドシート更新1時間
Slack通知15分
Drive整理1時間
レポート作成2時間

始め方

  1. この記事のコードを1つ選んでコピペ
  2. メールアドレスやフォルダIDを自分用に変更
  3. テスト実行してみる
  4. 動いたらトリガー設定

まずは1つ動かしてみるのがおすすめです。


関連記事: