Google Apps Script には、ユーザーデータ、他の Google システム、外部システムとやり取りするための 30 以上の組み込みサービスが用意されています。これらのサービスは、JavaScript の標準的な Math オブジェクトと同様のグローバル オブジェクトとして提供されます。たとえば、Math が random() などのメソッドや PI などの定数を提供するのと同様に、Apps Script の Spreadsheet サービスは openById(id) などのメソッド、Range などのクラス(子オブジェクト)、DataValidationCriteria などの列挙型を提供します。
Google Workspace プロダクトを制御するサービスのリファレンス ドキュメントは、このサイトのサイドバーの [リファレンス] ヘッダーにある [Google Workspace サービス] セクションにまとめられています。ユーティリティ サービス(ユーザー インターフェースの作成、XML の解析、ログデータの書き込みなど)は、「スクリプト サービス」セクションにまとめられています。
最新の JavaScript の機能
Apps Script は、最新の V8 ランタイムと、Mozilla の Rhino JavaScript インタープリタを搭載した古いランタイムの 2 つの JavaScript ランタイムをサポートしています。
V8 ランタイムは、最新の ECMAScript の構文と機能をサポートしています。Rhino ランタイムは、古い JavaScript 1.6 標準と、1.7 および 1.8 のいくつかの機能に基づいています。スクリプトで使用するランタイムは自由に選択できますが、V8 ランタイムを強くおすすめします。
各ランタイムは、組み込みの 高度な Google サービスに加えて、スクリプトで使用できる JavaScript クラスとオブジェクトをサポートしています。スクリプトでは、Array、Date、RegExp などの一般的なオブジェクトや、Math グローバル オブジェクトと Object グローバル オブジェクトを使用できます。
予測入力の使用
スクリプト エディタには「コンテンツ アシスト」機能(一般に「オートコンプリート」と呼ばれる)が用意されています。この機能は、スクリプトの現在のコンテキストで有効なグローバル オブジェクト、メソッド、列挙型を表示します。Apps Script クラスを返すグローバル オブジェクト、列挙型、メソッド呼び出しの後にピリオドを入力すると、自動補完候補が自動的に表示されます。次に例を示します。
- グローバル オブジェクトのフルネームを入力するか、オートコンプリートから選択してから、
.(ピリオド)を入力すると、そのクラスのすべてのメソッドと列挙型が表示されます。 - 数文字を入力すると、その文字で始まる有効な候補がすべて表示されます。
グローバル オブジェクトについて
各サービスは少なくとも 1 つのグローバル(トップレベル)オブジェクトを提供します。たとえば、Gmail サービスは GmailApp オブジェクトからのみアクセスされます。サービスによっては、複数のグローバル オブジェクトが提供されます。たとえば、ベース サービスには、Browser、Logger、MimeType、Session の 4 つのグローバル オブジェクトが含まれています。
メソッドの呼び出し
ほぼすべての組み込みサービスまたは高度なサービスのグローバル オブジェクトには、データまたは Apps Script クラスを返すメソッドが含まれています。スクリプトは、次の形式でメソッド呼び出しを行います。
GlobalObjectName.methodName(argument1, argument2, ..., argumentN);
たとえば、スクリプトは次のように Gmail サービスの sendEmail(recipient, subject, body) メソッドを呼び出してメールを送信できます。
GmailApp.sendEmail('claire@example.com', 'Subject line', 'This is the body.');
メソッドが別の Apps Script クラスを返す場合は、メソッド呼び出しを 1 行で連結できます。(戻り値の型は、自動補完とメソッドの参照ドキュメントの両方に表示されます)。たとえば、メソッド DocumentApp.create() は Document を返します。したがって、次の 2 つのコード セクションは同等です。
var doc = DocumentApp.create('New document');
var body = doc.getTab('t.0').asDocumentTab().getBody();
body.appendParagraph('New paragraph.');
// Same result as above.
DocumentApp.create('New document').getTab('t.0').asDocumentTab().getBody()
.appendParagraph('New paragraph.');
子クラスへのアクセス
すべてのサービスには、グローバル オブジェクトのようにトップレベルからアクセスできない 1 つ以上の子クラスが含まれています。new キーワードを使用してこれらのクラスを構築することはできません(Date などの標準の JavaScript クラスの場合と同様)。子クラスにアクセスするには、子クラスを返すメソッドを呼び出す必要があります。特定のクラスにアクセスする方法がわからない場合は、サービスのリファレンス ドキュメントのルートページにアクセスし、目的のクラスを返すメソッドを探してください。
インターフェースの処理
一部のサービスには、リファレンス ドキュメントで「インターフェース」とラベル付けされた特別なクラスが含まれています。これらは、正確な型を事前に特定できないメソッドの戻り値の型として使用される汎用クラスです。たとえば、ドキュメント サービス メソッド Body.getChild(childIndex) は、汎用 Element オブジェクトを返します。Element は、別のクラス(Paragraph または Table など)を表すインターフェースです。インターフェース オブジェクトは単独で役に立つことはほとんどありません。通常は、Element.asParagraph() などのメソッドを呼び出して、オブジェクトを正確なクラスにキャストし直します。
列挙型の操作
ほとんどのサービスには、名前付きの値の列挙型がいくつか含まれています。たとえば、ドライブ サービスは、列挙型 Access と Permission を使用して、ファイルまたはフォルダにアクセスできるユーザーを特定します。ほとんどの場合、これらの列挙型にはグローバル オブジェクトからアクセスします。たとえば、Folder.setSharing(accessType, permissionType) メソッドの呼び出しは次のようになります。
// Creates a folder that anyone on the Internet can read from and write to. (Domain administrators can
// prohibit this setting for Google Workspace users.)
var folder = DriveApp.createFolder('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);