Google Apps Script には、ユーザーデータ、他の Google システム、外部システムとやり取りするための 30 以上の組み込みサービスが用意されています。これらのサービスは、JavaScript の標準的な Math オブジェクトと同様のグローバル オブジェクトとして提供されます。たとえば、Math が random() などのメソッドや PI などの定数を提供するのと同様に、Apps Script の スプレッドシート サービスは、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 コードは Google のサーバーで実行されるため(HTML サービスのページを除く)、DOM 操作や Window API などのブラウザベースの JavaScript 機能は Apps Script では使用できません。
予測入力
スクリプト エディタには「コンテンツ アシスト」機能(一般に「オートコンプリート」と呼ばれます)が用意されています。この機能は、スクリプトの現在のコンテキストで有効なグローバル オブジェクト、メソッド、列挙型を表示します。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() などのメソッドを呼び出して、オブジェクトを特定のクラスにキャストし直します。
列挙型
ほとんどのサービスには、名前付きの値の列挙型(列挙型)が含まれています。たとえば、Google ドライブ サービスは、列挙型 Access と Permission を使用して、ファイルまたはフォルダにアクセスできるユーザーを特定します。通常、これらの列挙型には次の例に示すようにグローバル オブジェクトからアクセスします。
// 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);