Google Apps Script(GAS)入門

GAS入門ガイド

Google Apps Script(GAS)入門【無料で始める業務自動化】

Google Apps Scriptを使えば、Googleサービスを自動化できます。無料で使え、Webブラウザだけで開発できるGASは、業務効率化の強力なツールです。

GASとは

概要

Google Apps Script(GAS) は、Googleが提供するJavaScriptベースのスクリプト言語です。

できること

  • Googleスプレッドシートの自動化
  • Gmail/カレンダーの操作
  • Googleフォームとの連携
  • 外部API連携
  • Webアプリケーション作成

メリット

メリット 内容
無料 Googleアカウントがあれば無料
環境構築不要 ブラウザだけで開発
Googleサービス連携 スプレッドシート、Gmail等と簡単連携
トリガー 時間指定で自動実行
共有が簡単 Googleドライブで共有

始め方

方法1: スプレッドシートから

  1. Googleスプレッドシートを開く
  2. 拡張機能 → Apps Script
  3. スクリプトエディタが開く

方法2: 単独プロジェクト

  1. script.google.com にアクセス
  2. 「新しいプロジェクト」をクリック
  3. スクリプトエディタが開く

エディタの画面

┌─────────────────────────────────────┐
│  プロジェクト名                      │
├──────────┬──────────────────────────┤
│ ファイル │                          │
│ 一覧    │     コードエディタ         │
│         │                          │
├──────────┤                          │
│ サービス │                          │
└──────────┴──────────────────────────┘

最初のスクリプト

JavaScript
function hello() {
  Logger.log("Hello, GAS!");
}

実行方法

  1. 関数を選択
  2. 実行ボタン(▶)をクリック
  3. 初回は権限の承認が必要

基本的な構文

変数と定数

JavaScript
// 変数
let name = "田中";
let age = 30;

// 定数
const TAX_RATE = 0.1;

条件分岐

JavaScript
function checkScore(score) {
  if (score >= 80) {
    return "合格";
  } else if (score >= 60) {
    return "追試";
  } else {
    return "不合格";
  }
}

繰り返し

JavaScript
// for文
for (let i = 0; i < 10; i++) {
  Logger.log(i);
}

// 配列のループ
const items = ["A", "B", "C"];
for (const item of items) {
  Logger.log(item);
}

// forEach
items.forEach(function(item) {
  Logger.log(item);
});

関数

JavaScript
// 関数定義
function greet(name) {
  return "こんにちは、" + name + "さん";
}

// アロー関数
const greet2 = (name) => "こんにちは、" + name + "さん";

配列操作

JavaScript
const numbers = [1, 2, 3, 4, 5];

// map:変換
const doubled = numbers.map(n => n * 2);

// filter:フィルタリング
const evens = numbers.filter(n => n % 2 === 0);

// reduce:集計
const sum = numbers.reduce((acc, n) => acc + n, 0);

スプレッドシート操作

基本的な操作

JavaScript
function basicOperations() {
  // アクティブなスプレッドシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // シートを取得
  const sheet = ss.getSheetByName("シート1");

  // セルの値を取得
  const value = sheet.getRange("A1").getValue();

  // セルに値を設定
  sheet.getRange("B1").setValue("Hello");

  // 複数セルの値を取得(2次元配列)
  const data = sheet.getRange("A1:C10").getValues();

  // 複数セルに値を設定
  sheet.getRange("A1:C3").setValues([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ]);
}

データの読み込み

JavaScript
function readData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 最終行を取得
  const lastRow = sheet.getLastRow();

  // データ範囲を取得
  const data = sheet.getRange(1, 1, lastRow, 3).getValues();

  // ヘッダーを除いてループ
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    Logger.log(`名前: ${row[0]}, 値: ${row[1]}`);
  }
}

データの書き込み

JavaScript
function writeData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 最終行の次に追加
  const lastRow = sheet.getLastRow();
  sheet.getRange(lastRow + 1, 1).setValue("新しいデータ");

  // 行を追加
  sheet.appendRow(["A", "B", "C"]);
}

書式設定

JavaScript
function formatCells() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getRange("A1:C1");

  // フォント
  range.setFontWeight("bold");
  range.setFontSize(14);

  // 背景色
  range.setBackground("#FFFF00");

  // 罫線
  range.setBorder(true, true, true, true, true, true);

  // 配置
  range.setHorizontalAlignment("center");
}

トリガー(自動実行)

トリガーの種類

種類 内容
時間主導型 指定時刻・間隔で実行
スプレッドシート 編集時、フォーム送信時
カレンダー イベント更新時

トリガーの設定

  1. スクリプトエディタ左メニュー「トリガー」
  2. 「トリガーを追加」
  3. 実行する関数を選択
  4. イベントソース・タイプを設定
  5. 保存

時間指定トリガーの例

・毎日午前9時に実行
・1時間ごとに実行
・毎週月曜日に実行

コードでトリガー設定

JavaScript
function createTrigger() {
  // 毎日9時に実行するトリガー
  ScriptApp.newTrigger("dailyReport")
    .timeBased()
    .atHour(9)
    .everyDays(1)
    .create();
}

function deleteTriggers() {
  // すべてのトリガーを削除
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => {
    ScriptApp.deleteTrigger(trigger);
  });
}

実践例

例1: 日次レポートの自動生成

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

  // 今日の日付
  const today = new Date();
  const dateStr = Utilities.formatDate(today, "JST", "yyyy/MM/dd");

  // データを集計
  const data = dataSheet.getDataRange().getValues();
  let total = 0;
  for (let i = 1; i < data.length; i++) {
    total += data[i][1];
  }

  // レポートに追記
  reportSheet.appendRow([dateStr, total]);
}

例2: フォーム回答の自動通知

JavaScript
function onFormSubmit(e) {
  // フォームの回答を取得
  const responses = e.values;

  // メール送信
  const recipient = "admin@example.com";
  const subject = "新しいフォーム回答がありました";
  const body = `
    回答日時: ${responses[0]}
    名前: ${responses[1]}
    内容: ${responses[2]}
  `;

  GmailApp.sendEmail(recipient, subject, body);
}

例3: 定期的なバックアップ

JavaScript
function backupSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const today = Utilities.formatDate(new Date(), "JST", "yyyyMMdd");

  // コピーを作成
  const copy = ss.copy(ss.getName() + "_backup_" + today);

  // 特定フォルダに移動
  const backupFolder = DriveApp.getFolderById("フォルダID");
  DriveApp.getFileById(copy.getId()).moveTo(backupFolder);

  Logger.log("バックアップ完了: " + copy.getName());
}

注意点

実行時間の制限

  • スクリプトの実行時間:最大6分
  • トリガーの実行時間:最大30分
  • 1日の実行時間:90分まで(無料アカウント)

回避策

JavaScript
// 処理を分割して実行
function processLargeData() {
  const properties = PropertiesService.getScriptProperties();
  let startRow = parseInt(properties.getProperty("startRow")) || 1;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // 100行ずつ処理
  for (let i = startRow; i < Math.min(startRow + 100, data.length); i++) {
    // 処理
  }

  // 次回の開始位置を保存
  if (startRow + 100 < data.length) {
    properties.setProperty("startRow", startRow + 100);
    // 次のトリガーを設定
  } else {
    properties.deleteProperty("startRow");
  }
}

セキュリティ

  • スクリプトの権限を最小限に
  • センシティブなデータの取り扱いに注意
  • 共有範囲を適切に設定

まとめ

GASの基本

JavaScript
// スプレッドシート操作
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const value = sheet.getRange("A1").getValue();
sheet.getRange("A1").setValue("値");

// メール送信
GmailApp.sendEmail(to, subject, body);

// ログ出力
Logger.log("メッセージ");

活用のステップ

  1. 簡単なスクリプトから始める
  2. スプレッドシート操作を覚える
  3. トリガーで自動化
  4. 他のサービスと連携

関連記事

お問い合わせ

GAS・業務自動化についてのご相談は、お気軽にお問い合わせください。

  • GAS開発
  • 自動化設計
  • 技術サポート

お問い合わせはこちら

最終更新: 2025年1月