【初心者向け】Google Apps Script(GAS)の「使用制限」や「上限」を意識して主要サービスにアクセスしてみよう!

Google Apps Script(GAS)は、Googleの豊富なサービスを活用できる強力なツールです
本記事では、「GASの制限回数」を意識しながら、Googleの主要サービスにアクセスする方法を紹介したいと思います!

GASでスクリプトを実行しようとした際に、謎のエラーメッセージが出て、苦しんだ経験がある方もいるのではないでしょうか?

エラーが出た際には、GASの「使用制限」が問題の原因である可能性を検討してみてください

GASは無料で提供されているため、使用には一定の制限が設定されています
この制限を超えると、スクリプトの実行が中断され、エラーが表示されることがあります

本記事の目的
  • GASの「使用制限」について学ぶ
  • GASの「使用制限」を意識しながら、コードを書いてみる

GASを利用する上で、「GASの制限回数」を意識することは欠かせない要素です

こーすけ先生

本記事では、「GASの制限回数」を意識しながら、Googleの主要サービスにアクセスする方法を紹介したいと思います!

この記事の執筆者について
  • GASの人
  • ITベンダSEとして12年勤務する中で民間、金融、官公庁の現場を一通り経験済
  • 現在は公務員をやりながら起業に向けて着々と準備中
GASなら任せろ!
こーすけ先生

当ブログでは実際に仕事でGASを扱っている私が、GASの魅力について徹底的に取り上げていきます!

目次

Google Apps Script(GAS)の制限について

代表的な制限について
  • 実行時間制限
    GASでは、1スクリプトの実行時間が6分間という制限がある
  • トリガー制限
    1スクリプトにつき、1ユーザー20トリガーまで
がすぴょん

どうして「制限」に気を付けないといけないの?

こーすけ先生

これらの制限を遵守しないと、スクリプトが正常に動作せず、エラーが発生することが多々あるんだ…

スクロールできます
機能制限
スクリプトの実行時間6 分 / (1実行あたり)
カスタム関数の実行時間30 秒 / (1実行あたり)
トリガー20 / ユーザー / スクリプト
トリガーの合計実行時間90分(1日あたり)
同時実行 30 / ユーザー
メールの添付ファイルの総サイズ25 MB / メッセージ
メール添付ファイル250 件 / 通
こーすけ先生

ちなみに上記表にまとめたGASの制限は、無料ユーザーと有料ユーザー(Google Workspace契約者)の両方に適用されるんだ

がすぴょん

有料ユーザーでも制限ってかかるんだね!
じゃあGASを使う人全員、気を付けないといけないね

こーすけ先生

その通り!
GASでプログラムを書くのにあたって、「制限」によるエラーが出ないように留意することが大事なんだ

実行時間制限

実行時間制限の留意点
  • スクリプトが1回の実行で6分を超えると、実行が強制的に中断されるので、長時間実行するタスクやループ処理に注意
  • 定期的に実行時間をチェックし、最適化や効率化を行うことが大切

メソッドを多用すると、使用制限がかかりやすくなってしまいます
そのため、同じ記述が続く場合は、変数を定義してあげて使いまわすことが大事です

こーすけ先生

スクリプト実行時間の6分は、意外とすぐに到達してしまいます…

トリガー制限

トリガー制限の留意点
  • スクリプトには、1ユーザーあたり最大20個のトリガーしか設定できないため、トリガーを効果的に管理する必要がある
  • トリガーを無駄に設定しない
こーすけ先生

以上の制限事項を考慮しながらスクリプトを設計し、効率的に実行できるように工夫することが大切だよ!

【本題】Googleの各種サービスにアクセスしてみよう

前回はGASからGoogleの代表的なサービスであるGoogleスプレッドシートGoogleドキュメントGoogleスライドGoogleフォームそれぞれにアクセスし、簡単な操作までやりました

今回はそれらに加えて、制約事項にも触れながらGoogleカレンダーGoogleドライブGmailにもアクセスしてみましょう

こーすけ先生

前回の記事をまだ読んでいない方は、こちらから読んで頂けると嬉しいです

事前準備

今回は、Googleドライブ上のファイル移動を行っていきたいと思います!
まずはGoogleドライブの「+新規」をクリックしましょう

試しに以下のように移動前フォルダ「test001」と移動後フォルダ「test002」を作ってください。

がすぴょん

準備ができました!

(復習)GASエディタを開く

こーすけ先生

分かる方は読み飛ばしてください!

STEP
Googleドライブにアクセスし、左上の [+ 新規] ボタンをクリックします。
STEP
[その他] の中にある [Google Apps Script] を選択します。
STEP
エディタが開きます
画像に alt 属性が指定されていません。ファイル名: dutsnd5-1-1024x378.png
がすぴょん

エディタを開くのは思いのほか簡単なんだね!
わっ…なんか「▷実行」を押したら承認?を求められちゃった…

こーすけ先生

プロジェクトを開始する時、必ず出てくる画面だね
「権限を確認」をクリックしよう!

がすぴょん

自分のアカウントを選択したら「このアプリはGoogleで確認されていません」って出てきちゃったよ?

こーすけ先生

「詳細」をクリックして、「無題のプロジェクト(安全ではないページ)に移動」をクリックしてみて!

こーすけ先生

これでGASを書く準備が整ったよ!
早速、試しに色々書いていこう!

Googleカレンダーを編集

function myCalendar() {
  // カレンダークラスを用いて、IDを指定してGoogleカレンダーにアクセスする
  let wCalendar = CalendarApp.getCalendarById('nao.takahashi317@gmail.com');

  // 試しに登録するイベントの日時を作成する
  let wStartDate = new Date(2023, 10, 20, 8, 30, 0); 
  // この場合は2023年11月20日の8時30分となる
  // Dateクラスは月だけは0始まりなので注意が必要となるため、文字列での指定でも可能
  // let wStartDate = new Date('2023/11/20 8:30:00');

  let wEndDate = new Date(2023, 10, 20, 18, 0, 0)

  // 上記の開始・終了日時を用いて、カレンダーに登録する
  wCalendar.createEvent('myCalendar_カレンダー登録テスト01', wStartDate, wEndDate);
  // 終日予定の場合は、開始日時(正確には開始日)のみで登録ができる
  wCalendar.createAllDayEvent('myCalendar_カレンダー登録テスト02',wStartDate);
}
がすぴょん

へぇ!11月を指定するのに「10」って入力するんだ

こーすけ先生

Date クラスの月は0から始まり、11までの数値で表されるんだよ

上記のプログラムを実行すると、指定したカレンダーにプログラム内で登録した予定が追加されているハズです

GoogleカレンダーのカレンダーIDの調べ方は以下を参考にしてください

ただし、自身のGoogleカレンダーにアクセスするだけならば、IDはアカウント名(Gmailアドレス)と同一なので、調べるまでもありません

STEP
Googleカレンダーへアクセスする

Googleカレンダーにアクセスする

STEP
左カラムの「マイカレンダー」から「カレンダーID」を確認したいカレンダーにマウスオーバーし、「︙」が表示されたらクリック
STEP
「設定と共有」をクリックすると選択したカレンダーの設定ページに遷移します
STEP
ページ下部にて「カレンダーID」を確認できます
がすぴょん

なるほど!
自分のカレンダーIDはGmailアドレスなんだね!
覚えやすい!

Googleドライブを編集する

こーすけ先生

私の場合、事前準備で作成した2つのフォルダに対するIDは、以下の通りです

  • test001:1CpGZj_aGoWFBb-lRbw0rjmwjN59PxTYU
  • test002:1ITFz8yhg4tBpFNRo-KidWRNtotb6oKRO

Googleドライブ上のフォルダには、一意なID(文字、数字、ハイフン、アンダースコアから成る一意の値)が割り振られています

この一意のIDはフォルダにアクセスした際のURLから確認できますので、それを取得(コピー) しておいてください


こーすけ先生

まずは「test001」に新規でスプレッドシートを作成してみましょう

といっても、フォルダ指定で新規作成するのではなく新規作成後にフォルダを指定して移動させるのが、GASの定石となります

function gaslog_DriveTest001() {
  // ドライブクラスを用いて、IDを指定してドライブにアクセスする(test001)
  let wDrive = DriveApp.getFolderById('自分のドライブのIDを貼り付け');

  // スプレッドシートを新規に作成する(マイドライブのルートフォルダに作成)
  let wSpread = SpreadsheetApp.create('gaslog新規作成') //任意の名前
  // スプレッドシートのIDからドライブクラスで扱えるようファイルオブジェクトを取得する
  let wSpreadFile = DriveApp.getFileById(wSpread.getId());

  // 作成したスプレッドシートをtest001フォルダに移動する
  wSpreadFile.moveTo(wDrive);
}
こーすけ先生

上記のプログラムを実行すると、「test001」フォルダ内にgaslog新規作成というスプレッドシートが作成されます

がすぴょん

できました!!

こーすけ先生

次にこのファイルを「test002」フォルダに移動させてみましょう!

すでに上記プログラムでフォルダ移動までは実施済みなので、フォルダ内のファイルを取得して、移動するというのをやってみましょう

function gaslog_DriveTest002() {
  // ドライブクラスを用いて、IDを指定してドライブにアクセスする(test001, 002)
  let wDrive001 = DriveApp.getFolderById('自分のドライブのIDを貼り付け');
  let wDrive002 = DriveApp.getFolderById('自分のドライブのIDを貼り付け');

  // test002フォルダ内の全ファイルを取得する
  let wFiles = wDrive001.getFiles();
  while (wFiles.hasNext()) {
    // ファイルリスト内のファイルを1件ずつ取得する
    let wFile = wFiles.next();
    // ファイル名が'gaslog新規作成'の場合はtest002フォルダに移動する
    if (wFile.getName()=='gaslog新規作成') {
      DriveApp.getFileById(wFile.getId()).moveTo(wDrive002)
    }
  }
}

上記のプログラムを実行すると、「test001」フォルダ内にあったgaslog新規作成というスプレッドシートが「test002」フォルダに移動します

こーすけ先生

ドライブの操作は今回ご紹介したDriveAppだけでなく、拡張ドライブサービス(Drive API)を用いることで、より高度なことが可能になります!拡張ドライブサービスについてはまた次回に!

Gmailを編集する

function gaslogGmail() {
  let address = '***********@gmail.com' //送信したいメールアドレス
      , subject = 'テスト'
      , body = `ここには本文を記述します`
      , options = {'bcc':'***********@gmail.com, ***********@gmail.com'};
  // GmailAppクラスを用いて、メールを送信する
  GmailApp.sendEmail(address, subject, body, options);

  // あえてMailAppクラスを用いて、メールを送信する
  MailApp.sendEmail(address, subject, body);
}

上記のプログラムを実行すると、addressに指定したメールアドレス宛にGASを実行しているアカウントからメールが送信されます

あえて、GmailAppとMailAppをどちらも記載して、2通のメールを送信しています
メールの送信に関して2つに違いはありません

こーすけ先生

ただし、許容される「権限範囲」が異なります

この例を実行すると…

といった画面が表示されます

こーすけ先生

このうち上側がGmailApp下側がMailAppに関するアクセス権限となります

ここで、「MailAppと「GmailApp」の違いを簡単に解説します

MailAppGmailAppの違い

Google Apps Scriptには、メール送信機能を持つオブジェクトが2種類あります
1つは「MailApp」オブジェクト、もう1つが「GmailApp」オブジェクトです

GmailApp
MailApp
  • Gmailに特化
    GmailAppは、メール送信だけでなく、スレッドの管理、ラベルの操作、添付ファイルの処理など、さまざまなGmail関連の操作ができる

    →Gmailアカウントに関するさまざまな操作を自動化できる!
  • お手軽
    MailAppは単純なメールの送信機能を提供するもので、基本的なメールの送信が必要な場合には便利


    →シンプルにメール送信だけならオススメ!
こーすけ先生

GmailAppは、GASを使用してGmailと連携する際に非常に強力なツールなので、是非とも「GmailApp」を使いこなせるようになって欲しいな!

つまり、GmailAppではGmailに関するあらゆることがGASから可能であり、MailAppでは単にメールを送信することだけが可能です

まとめ

本記事では「GASの制限回数を意識しながら」各種サービスにアクセスしてみるということに重きを置いて解説しました

新たにGoogleカレンダーGoogleドライブGmailへのアクセスを体験しながら、GASの制限回数をお伝えいたしました

まだまだ序盤の域をでることはできていないため、業務での活用をイメージできないかもしれません

こーすけ先生

今後もGASに関しての発信を続けていきますので、読んでくださると嬉しいです

Google スプレッドシートのクラス一覧

Googleドキュメントのクラス一覧

Googleスライドのクラス一覧

Googleフォームのクラス一覧

こーすけ先生

おかげさまで今年5月に起業しました!
GASやGoogleサービス、プログラミング全般のご相談承ります!

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

GASの人。ITベンダSEとして12年勤務し、民間、金融、官公庁の現場を一通り経験済。html、css、JavaScript、Java、PHPも分かります。最近は専らGASで小規模アプリケーションを頻繁に作成しています。GASのことなら何でもお任せあれ!現在は公務員として働きながら、起業に向けて着々と準備中です!

目次