【GAS入門】Google Apps Scriptとは?スプレッドシートやGmail連携で業務を自動化する方法

Webサイト運営や日々の業務で、繰り返し行う作業に時間を取られていませんか?そんな悩みを解決できるのが「Google Apps Script」(通称:GAS)です。この記事では、Web制作者やサイト運営者の初心者向けに、GASの基本的な使い方と、スプレッドシートやGmailと連携させて業務を自動化する具体的な方法をご紹介します。

Google Apps Scriptとは?

Google Apps Script(GAS)とは、Googleが提供しているJavaScriptベースのプログラミング言語です。

ブラウザ上でプログラムを作成・実行でき、Googleの各種サービス(スプレッドシート、Gmail、カレンダーなど)や外部サービスと連携できる、無料で利用可能なサービスです。頭文字をとって「GAS(ガス)」と呼ばれています。

GASを使用するメリット

GASを活用する主なメリットは以下の通りです。

  1. 環境構築が不要: ブラウザとGoogleアカウントさえあれば、すぐに開発を始められます。
  2. 無料: ほとんどの機能は無料で利用できます(実行回数などに一部制限はあります)。
  3. Googleサービスとの強力な連携: スプレッドシートやGmailなど、日常的に使うツールと簡単に連携できます。
  4. 自動実行(トリガー)が可能: 「毎日午前9時に実行」「フォームが送信されたら実行」といった自動化が簡単に設定できます。

GASと連携可能なサービス

GASはGoogleのサービスだけでなく、APIが提供されていれば多くの外部サービスとも連携できます。

Googleのサービス 外部のサービス(一例)
  • スプレッドシート
  • ドキュメント
  • Gmail
  • Googleカレンダー
  • Googleドライブ
  • Google翻訳

など

  • Slack
  • LINE
  • Twitter (X)
  • Backlog
  • Chatwork

など

GASとスプレッドシートを連携させる

GASの活用例として最も多いのが、スプレッドシートとの連携です。まずはGASのファイルを作成し、シートの読み書きを行う基本操作を見ていきましょう。

GASとスプレッドシートの連携イメージ

GASファイルを作成する

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

スプレッドシートからApps Scriptを開く手順

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

GASのスクリプトエディタ画面

スプレッドシートを読み込む

以下のいずれかの方法でスプレッドシート自体を読み込みます。

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を特定のキーワードで検索し、その結果(日付、送信元、件名など)をスプレッドシートに一覧で書き出す自動化の例です。問い合わせ管理などに活用できます。

GASと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カレンダーに一括で追加する方法です。イベントのスケジュール管理などに便利です。

GASとカレンダーの連携イメージ

カレンダーを取得する

予定を追加したいカレンダーを指定します。

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エディタの実行ボタン

図形をクリックして実行

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

スプレッドシート上の図形
図形にスクリプトを割り当てるメニュー(1)
図形にスクリプトを割り当てるメニュー(2)

メニューに追加して実行

スプレッドシートのメニューバー(「ファイル」「編集」などが並んでいる場所)に、独自の実行メニューを追加できます。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!'); // ポップアップでメッセージを表示
}

カスタムメニューのコード実行結果(1)
カスタムメニューのコード実行結果(2)

時間で実行(トリガー)

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

GASエディタのトリガー(タイマーボタン)
トリガーの追加画面(1)
トリガーの追加画面(2)

その他のできること

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. まずはエディタに表示されるエラーメッセージをよく読みましょう。「〇〇行目でエラーが発生しました」といった具体的な場所と理由が示されます。多くの場合、変数名のタイプミスや、存在しないシート名を指定しているなどの単純なミスです。エラーメッセージをコピーして検索すると、公式ドキュメントや多くの解説ブログで解決策が見つかります。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら