みんなの知恵袋+

Google Apps Scriptで日々の繰り返し作業を自動化する:初めてのGAS活用術と実用サンプル

Tags: Google Apps Script, GAS, 業務自動化, スプレッドシート, Gmail

日々の繰り返し作業に潜む課題とGoogle Apps Script (GAS) の可能性

中小企業のシステム担当者様は、ITインフラの維持管理からユーザーサポートまで、多岐にわたる業務を担われていることと存じます。その中でも、データの集計、定型レポートの作成、関係者への定期的なメール送信といった、繰り返し発生するルーティンワークに多くの時間を費やしているケースは少なくないでしょう。これらの手作業は、時間と労力を要するだけでなく、入力ミスや送信漏れといったヒューマンエラーのリスクも伴い、業務効率化の大きな妨げとなることがあります。

本記事では、Google Workspace(旧 G Suite)の利用企業様向けに、Google Apps Script (GAS) を活用してこれらの課題を解決し、日々の業務を効率化するための基礎的な知識と具体的な実践方法をご紹介いたします。

Google Apps Script (GAS) とは何か

Google Apps Script (GAS) は、Google Workspace の各種サービス(Gmail、Google スプレッドシート、Google ドキュメント、Google カレンダー、Google ドライブなど)を連携・自動化するためのクラウドベースのスクリプトプラットフォームです。JavaScript をベースとしており、特別な開発環境の構築は不要で、Webブラウザ上で直接コードを記述・実行できます。

GASの最大のメリットは、Google Workspace 環境に深く統合されている点にあります。これにより、例えば以下のような自動化が可能になります。

プログラミング初心者の方でも、基本的な概念を理解すれば、実用的なスクリプトを作成することが可能です。

GASの基本的な使い方と開発環境へのアクセス

GASのスクリプトエディタにアクセスする方法はいくつかありますが、最も一般的なのはGoogleスプレッドシートからアクセスする方法です。

  1. 自動化したい対象となるGoogleスプレッドシートを開きます。
  2. メニューバーから「拡張機能」をクリックし、「Apps Script」を選択します。
  3. 新しいタブでスクリプトエディタが開きます。

初めて開いた際、初期状態では function myFunction() { } という基本的な関数が記述されています。ここに処理を記述していきます。

1. 初めてのスクリプト実行とログの確認

スクリプトエディタで、以下のコードを記述してみましょう。

function helloGAS() {
  // ログにメッセージを出力する
  Logger.log("Hello, Google Apps Script!");
}

コードを記述したら、ツールバーの保存アイコン(フロッピーディスクのアイコン)をクリックしてプロジェクトを保存し、関数名のドロップダウンリストから helloGAS を選択し、実行ボタン(再生アイコン)をクリックします。

初めてスクリプトを実行する際には、スクリプトにGoogleアカウントへのアクセス権限を付与するための承認プロセスが発生します。画面の指示に従い、適切な権限を承認してください。

実行が完了すると、画面下部の「実行ログ」に Hello, Google Apps Script! と表示されます。これは、スクリプトが正しく実行されたことを示しており、デバッグ作業などにおいて非常に重要な機能です。

実用サンプル1: スプレッドシートからの特定データ抽出と別シートへのコピー

ここでは、日々の業務でよくある、複数のシートから特定の条件でデータを抽出し、別のシートに集計する例を考えてみます。手作業では手間がかかり、ミスが発生しやすい作業です。

シナリオ

「日報データ」というスプレッドシートがあり、各営業担当者が日々の活動を記録するシートが日別に存在するとします。月末に、これらのシートから特定の製品の売上データを抽出し、「月次集計」シートにまとめる必要があるとします。

GASによる解決手順

  1. スプレッドシートとシートの取得: まず、対象のスプレッドシートと、元のデータが格納されているシート、そしてデータを書き込む集計シートを取得します。

  2. データの読み込みとフィルタリング: 元のシートからすべてのデータを読み込み、特定の製品名(例: 「製品A」)が含まれる行を抽出します。

  3. 集計シートへの書き込み: 抽出したデータを集計シートの最終行に追加します。

サンプルコード

function extractAndAggregateSalesData() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在開いているスプレッドシートを取得
  const sourceSheetName = "0101_日報"; // 例として元データのシート名を指定
  const targetSheetName = "月次集計"; // 集計先のシート名を指定
  const targetProduct = "製品A"; // 抽出したい製品名

  const sourceSheet = spreadsheet.getSheetByName(sourceSheetName);
  const targetSheet = spreadsheet.getSheetByName(targetSheetName);

  if (!sourceSheet || !targetSheet) {
    Logger.log("指定されたシートが見つかりません。シート名を確認してください。");
    return;
  }

  // 元シートの全データを取得(ヘッダー行を除く)
  const lastRow = sourceSheet.getLastRow();
  const lastColumn = sourceSheet.getLastColumn();
  if (lastRow <= 1) { // データがない場合(ヘッダーのみ)
    Logger.log("元シートにデータがありません。");
    return;
  }
  const allData = sourceSheet.getRange(2, 1, lastRow - 1, lastColumn).getValues();

  const extractedData = [];
  // 各行をチェックし、指定製品のデータのみを抽出
  for (let i = 0; i < allData.length; i++) {
    const row = allData[i];
    // 例えば、製品名が2列目(インデックス1)にあると仮定
    if (row[1] === targetProduct) {
      extractedData.push(row);
    }
  }

  if (extractedData.length > 0) {
    // 集計シートの最終行からデータを書き込む
    const nextRow = targetSheet.getLastRow() + 1;
    targetSheet.getRange(nextRow, 1, extractedData.length, extractedData[0].length).setValues(extractedData);
    Logger.log(`${extractedData.length}件のデータを「${targetSheetName}」シートに抽出・コピーしました。`);
  } else {
    Logger.log("指定された製品のデータは見つかりませんでした。");
  }
}

解説

実用サンプル2: スプレッドシートのデータに基づいた定期的なメール通知の自動化

次に、スプレッドシートに記載された情報に基づいて、定期的にリマインダーメールや通知メールを自動送信する例を見ていきましょう。

シナリオ

「タスク管理」というスプレッドシートがあり、各タスクの担当者、期限、ステータスが記録されているとします。期限が近づいている、あるいは期限を過ぎた未完了のタスクについて、担当者に自動的にリマインダーメールを送信したいとします。

GASによる解決手順

  1. スプレッドシートのデータ読み込み: タスク管理シートから、担当者、タスク名、期限、ステータスなどの情報を読み込みます。

  2. 条件によるフィルタリング: 期限が本日または明日までで、かつステータスが「未完了」のタスクを抽出します。

  3. メールの送信: 抽出されたタスクごとに、担当者のメールアドレス宛に件名と本文を生成し、メールを送信します。

  4. トリガーによる定期実行: このスクリプトを毎日決まった時間に自動で実行するように設定します。

サンプルコード(メール送信部分)

function sendTaskReminders() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName("タスク管理"); // タスク管理シート名を指定
  if (!sheet) {
    Logger.log("「タスク管理」シートが見つかりません。");
    return;
  }

  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues(); // シートの全データを取得

  // ヘッダー行をスキップするため、1から開始
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    const taskName = row[0];   // 例: A列にタスク名
    const assignee = row[1];   // 例: B列に担当者名
    const dueDate = new Date(row[2]); // 例: C列に期限(日付形式)
    const status = row[3];     // 例: D列にステータス

    // 今日の日付を取得 (時刻は00:00:00に設定)
    const today = new Date();
    today.setHours(0, 0, 0, 0);

    // 期限日の時刻も00:00:00に設定して比較
    dueDate.setHours(0, 0, 0, 0);

    // 期限が今日または過去で、かつステータスが「未完了」の場合
    if (dueDate <= today && status === "未完了") {
      const recipientEmail = "testuser@" + Session.getActiveUser().getEmail().split('@')[1]; // 担当者のメールアドレスを仮定
      // 通常はスプレッドシートにメールアドレスの列を追加し、そこから取得します。
      // 例: const recipientEmail = row[4]; // E列にメールアドレス

      const subject = `【リマインダー】タスク「${taskName}」の期限が迫っています`;
      const body = `
担当者様

以下のタスクの期限が${Utilities.formatDate(dueDate, SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "yyyy/MM/dd")}に迫っています、または過ぎています。
ご確認の上、対応をお願いいたします。

タスク名: ${taskName}
ステータス: ${status}

よろしくお願いいたします。
`;

      try {
        GmailApp.sendEmail(recipientEmail, subject, body);
        Logger.log(`メールを${recipientEmail}に送信しました: ${taskName}`);
      } catch (e) {
        Logger.log(`メール送信失敗: ${recipientEmail}, エラー: ${e.message}`);
      }
    }
  }
}

解説

定期実行のためのトリガー設定

この sendTaskReminders 関数を毎日自動的に実行するためには、「トリガー」を設定します。

  1. スクリプトエディタの左側メニューから「トリガー」(時計のアイコン)をクリックします。
  2. 画面右下の「トリガーを追加」ボタンをクリックします。
  3. 以下の設定を行います。
    • 実行する関数を選択: sendTaskReminders
    • イベントのソースを選択: 「時間主導型」
    • 時間ベースのトリガーの種類を選択: 「日付ベースのタイマー」や「時間ベースのタイマー」(例: 毎日午前9時〜10時)
    • 時間の間隔を選択: (例: 1日おき)
  4. 「保存」をクリックします。

これで、指定した時間にスクリプトが自動的に実行され、リマインダーメールが送信されるようになります。

GASを活用する上での注意点とポイント

GASを効果的に、かつ安全に運用するためには、以下の点に留意することが重要です。

まとめ:小さな自動化から業務効率化の大きな一歩へ

Google Apps Scriptは、中小企業のシステム担当者様にとって、日々のルーティンワークを劇的に効率化できる強力なツールです。本記事でご紹介したスプレッドシートのデータ処理やメール送信の自動化は、GASで実現できることのごく一部に過ぎません。

まずは、ご自身の業務の中で「これは繰り返し作業で時間がかかっている」「手作業だとミスが多い」と感じる小さなタスクから、GASでの自動化を試してみてはいかがでしょうか。小さな成功体験が、より大きな業務改善へのモチベーションとなり、社内全体の生産性向上にも貢献するはずです。

より高度な連携や複雑な処理に挑戦する際は、Googleの公式ドキュメントや、世界中の開発者コミュニティで共有されている豊富な情報が役立つことでしょう。もし、具体的な困りごとや実現したい自動化のアイデアがございましたら、ぜひ「みんなの知恵袋+」コミュニティでご相談ください。似たような経験を持つ方々からの実践的な知見やアドバイスが得られるかもしれません。