Webサイト運営や日々の業務で、繰り返し行う作業に時間を取られていませんか?そんな悩みを解決できるのが「Google Apps Script」(通称:GAS)です。この記事では、Web制作者やサイト運営者の初心者向けに、GASの基本的な使い方と、スプレッドシートやGmailと連携させて業務を自動化する具体的な方法をご紹介します。
Google Apps Scriptとは?
Google Apps Script(GAS)とは、Googleが提供しているJavaScriptベースのプログラミング言語です。
ブラウザ上でプログラムを作成・実行でき、Googleの各種サービス(スプレッドシート、Gmail、カレンダーなど)や外部サービスと連携できる、無料で利用可能なサービスです。頭文字をとって「GAS(ガス)」と呼ばれています。
GASを使用するメリット
GASを活用する主なメリットは以下の通りです。
- 環境構築が不要: ブラウザとGoogleアカウントさえあれば、すぐに開発を始められます。
- 無料: ほとんどの機能は無料で利用できます(実行回数などに一部制限はあります)。
- Googleサービスとの強力な連携: スプレッドシートやGmailなど、日常的に使うツールと簡単に連携できます。
- 自動実行(トリガー)が可能: 「毎日午前9時に実行」「フォームが送信されたら実行」といった自動化が簡単に設定できます。
GASと連携可能なサービス
GASはGoogleのサービスだけでなく、APIが提供されていれば多くの外部サービスとも連携できます。
| Googleのサービス | 外部のサービス(一例) |
|---|---|
など |
など |
GASとスプレッドシートを連携させる
GASの活用例として最も多いのが、スプレッドシートとの連携です。まずはGASのファイルを作成し、シートの読み書きを行う基本操作を見ていきましょう。

GASファイルを作成する
GASファイルは、連携したいスプレッドシートの「拡張機能」メニューから「Apps Script」を選択して作成するのが簡単です(コンテナバインド スクリプト)。

Googleドライブから直接GASファイルを作成することもできますが、こちらは特定のシートに関連付かない「単体」(スタンドアロン スクリプト)という扱いになります。その場合、「getActiveSpreadsheet()」のような「現在開いているスプレッドシート」を指定する便利な関数が使えなくなる点に注意が必要です。

スプレッドシートを読み込む
以下のいずれかの方法でスプレッドシート自体を読み込みます。
var spreadsheet = SpreadsheetApp.openById('キー'); // スプレッドシートのIDで読み込み
var spreadsheet = SpreadsheetApp.openByUrl('URL'); // URLで読み込み
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // スプレッドシートから作成した場合(推奨)
シートを読み込む
次に、操作したいシートを指定します。
var sheet = spreadsheet.getSheetByName('シート名'); // シート名で指定
var sheet = spreadsheet.getSheets()[0]; // シートの順番(0から始まる)で指定
var sheet = spreadsheet.getActiveSheet(); // 現在アクティブなシートを指定
セルを読み込む
指定したシートから、値を取得したいセルの範囲を指定します。
var values = sheet.getRange(2, 3, 6, 4).getValues(); // (行, 列, 行数, 列数) で指定
var values = sheet.getRange('C2:G8').getValues(); // 'A1形式'の絶対参照で指定
セルに書き込む
取得した値や、新しい値を特定のセルに書き込みます。
sheet.getRange(2, 3, 6, 4).setValues(values); // (行, 列, 行数, 列数) で指定
sheet.getRange('C2:G8').setValues(values); // 'A1形式'の絶対参照で指定
【例】シート1の一部をシート2にコピーする 全体コード
ここまでの知識を使って、シート1の指定範囲をシート2の別の場所にコピーするスクリプトです。
function copyTable(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = spreadsheet.getSheets()[0]; // シート1(1枚目のシート)
var sheet2 = spreadsheet.getSheets()[1]; // シート2(2枚目のシート)
// sheet1の'B2:E7'の範囲の値を取得
var values = sheet1.getRange('B2:E7').getValues();
// sheet2の'H9:K14'に取得した値を書き込む
sheet2.getRange('H9:K14').setValues(values);
}
(サンプルスプレッドシート: こちら)
GASでGmail→スプレッドシート
次に、Gmailを特定のキーワードで検索し、その結果(日付、送信元、件名など)をスプレッドシートに一覧で書き出す自動化の例です。問い合わせ管理などに活用できます。

キーワードを検索して抽出する
Gmailの検索機能を使ってスレッドを取得し、そこからメールメッセージを取り出します。
// '検索ワード'に一致するスレッドを最大30件取得
var result = GmailApp.search('検索ワード', 0, 30);
// スレッドからメールメッセージの配列を取得
var mailData = GmailApp.getMessagesForThreads(result);
全体コード
function searchContactMail() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheets()[0];
/* Gmailから特定条件のスレッドを検索しメールを取り出す */
var word = 'テスト'; // 検索するキーワード
var result = GmailApp.search(word, 0, 30); //条件にマッチしたスレッドを取得(この場合 最大30件)
var mailData = GmailApp.getMessagesForThreads(result); //スレッドからメールの内容を取得する
var exportMailData = [];
/* 各メールから日時、送信元、件名、内容を取り出す(二次元配列で格納)*/
for(var i = 0; i < mailData.length; i++){
exportMailData[i] = [];
exportMailData[i][0] = mailData[i][0].getDate(); // 日時
exportMailData[i][1] = mailData[i][0].getFrom(); // 送信元
exportMailData[i][2] = mailData[i][0].getSubject(); // 件名
exportMailData[i][3] = mailData[i][0].getPlainBody(); // 本文(プレーンテキスト)
}
/* スプレッドシートに出力 */
if(mailData.length > 0){
// 2行目・1列目(A2セル)から、取得したメールの件数分(i行)・4列分の範囲に書き出す
sheet.getRange(2, 1, i, 4).setValues(exportMailData);
}
}
(サンプルスプレッドシート: こちら)
GASでスプレッドシート→カレンダー
今度は逆に、スプレッドシートに記入した予定リストを、Googleカレンダーに一括で追加する方法です。イベントのスケジュール管理などに便利です。

カレンダーを取得する
予定を追加したいカレンダーを指定します。
var calendar = CalendarApp.getDefaultCalendar(); // デフォルトのカレンダーを取得
var calendar = CalendarApp.getCalendarById('test@gmail.com'); // カレンダーID(Gmailアドレス)を指定
予定を追加する
createEvent メソッドで、タイトル、開始日時、終了日時を指定して予定を作成します。
calendar.createEvent('タイトル', 開始時刻, 終了時刻, その他設定);
全体コード
function setCalendarEvent(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheets()[0];
var calendar = CalendarApp.getDefaultCalendar(); // デフォルトカレンダーを使用
var startRows = 2; // データ開始行(2行目から)
// A列からF列まで、データがある最終行までの範囲を取得
var sheetData = sheet.getRange('A' + startRows + ':F' + sheet.getLastRow()).getValues();
sheetData.forEach(function(value, index) {
// A列(value[0])に「追加完了」などの文字が「ない」場合のみ実行
if (!value[0]) {
var title = value[1]; // B列: タイトル
var startTime = new Date(value[2]); // C列: 開始時刻
var endTime = new Date(value[3]); // D列: 終了時刻
var option = {
description: value[4], // E列: 説明
location: value[5] // F列: 場所
}
calendar.createEvent(title, startTime, endTime, option); // カレンダーに予定を追加
sheet.getRange(startRows + index, 1).setValue('追加完了'); // A列に追加完了の目印を書き込む
}
});
}
(サンプルスプレッドシート: こちら)
実行させる方法
作成したGASの関数を実行するには、いくつかの方法があります。
エディタから実行
最も基本的な方法です。GASのエディタ上部にある実行ボタン(▶)をクリックすると、選択中の関数を即時実行できます。開発中のテストに便利です。

図形をクリックして実行
スプレッドシート上に配置した図形(「挿入」→「図形描画」で作成)に、作成した関数(スクリプト)を割り当てる方法です。図形をクリックするだけで実行できるため、GASに詳しくない人でも簡単に操作できます。



メニューに追加して実行
スプレッドシートのメニューバー(「ファイル」「編集」などが並んでいる場所)に、独自の実行メニューを追加できます。onOpen という名前の特別な関数で設定します。
// スプレッドシートが開かれた時(onOpen)に実行される関数
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('カスタムメニュー'); // メニューバーに追加するボタン名
menu.addItem('Hello world! 実行', 'myFunction'); // メニュー内の項目名と、実行する関数名
menu.addToUi();
}
// 上記で指定した関数
function myFunction() {
Browser.msgBox('Hello world!'); // ポップアップでメッセージを表示
}


時間で実行(トリガー)
GASの真価である「自動実行」の設定です。エディタの左側にある時計アイコン(トリガー)から設定します。時間指定(例:毎日午前9時)での実行や、スプレッドシートが編集されたタイミングでの実行などを設定できます。



その他のできること
GASは非常に多機能で、他にも以下のようなことが可能です。
- Web APIとして使用する(外部からのアクセスでGASを実行する)
- Webサイトの情報を定期的に取得する(Webスクレイピング)
- 簡単なWebサイトやWebアプリケーションを作成する
参考サイト
よくある質問(FAQ)
Q. JavaScriptを全く知らなくてもGASは使えますか?
A. いいえ、GASはJavaScriptをベースにしているため、JavaScriptの基本的な文法(変数、関数、if文、for文など)の知識が必要です。ただし、Webサイト制作でJavaScriptに触れたことがある方なら、比較的スムーズに学習を始められます。まずは簡単なコードをコピー&ペーストして動かしてみることから始めるのがおすすめです。
Q. GASの実行時間に制限はありますか?
A. はい、あります。無料のGoogleアカウント(Gmailなど)の場合、1回のスクリプト実行時間は最大6分間です。Google Workspace(旧G Suite)のアカウントではこの制限が30分間に延長されます。大量のデータを処理する場合は、処理を分割するなど工夫が必要になることがあります。
Q. GASでエラーが出た場合、どうすればいいですか?
A. まずはエディタに表示されるエラーメッセージをよく読みましょう。「〇〇行目でエラーが発生しました」といった具体的な場所と理由が示されます。多くの場合、変数名のタイプミスや、存在しないシート名を指定しているなどの単純なミスです。エラーメッセージをコピーして検索すると、公式ドキュメントや多くの解説ブログで解決策が見つかります。