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: スプレッドシートから
- Googleスプレッドシートを開く
- 拡張機能 → Apps Script
- スクリプトエディタが開く
方法2: 単独プロジェクト
- script.google.com にアクセス
- 「新しいプロジェクト」をクリック
- スクリプトエディタが開く
エディタの画面
┌─────────────────────────────────────┐ │ プロジェクト名 │ ├──────────┬──────────────────────────┤ │ ファイル │ │ │ 一覧 │ コードエディタ │ │ │ │ ├──────────┤ │ │ サービス │ │ └──────────┴──────────────────────────┘
最初のスクリプト
JavaScript
function hello() {
Logger.log("Hello, GAS!");
}
実行方法
- 関数を選択
- 実行ボタン(▶)をクリック
- 初回は権限の承認が必要
基本的な構文
変数と定数
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");
}
トリガー(自動実行)
トリガーの種類
| 種類 | 内容 |
|---|---|
| 時間主導型 | 指定時刻・間隔で実行 |
| スプレッドシート | 編集時、フォーム送信時 |
| カレンダー | イベント更新時 |
トリガーの設定
- スクリプトエディタ左メニュー「トリガー」
- 「トリガーを追加」
- 実行する関数を選択
- イベントソース・タイプを設定
- 保存
時間指定トリガーの例
・毎日午前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("メッセージ");
活用のステップ
- 簡単なスクリプトから始める
- スプレッドシート操作を覚える
- トリガーで自動化
- 他のサービスと連携
関連記事
