組み込みの Google サービス

Google Apps Script には、ユーザーデータ、他の Google システム、外部システムとやり取りするための 30 以上の組み込みサービスが用意されています。これらのサービスは、JavaScript の標準 Math オブジェクトと同様のグローバル オブジェクトとして提供されます。たとえば、Mathrandom() などのメソッドと 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.71.8 の機能もベースになっています。スクリプトで使用するランタイムは自由に選択できますが、V8 ランタイムを使用することを強くおすすめします。

各ランタイムは、組み込みの高度な Google サービスに加えて、スクリプトで使用できる JavaScript クラスとオブジェクトをサポートしています。スクリプトでは、Math および Object グローバル オブジェクトだけでなく、ArrayDateRegExpなどの一般的なオブジェクトも使用できます。

オートコンプリートを使用する

スクリプト エディタには、一般的に「オートコンプリート」と呼ばれる「コンテンツ アシスト」機能が用意されています。この機能は、スクリプトの現在のコンテキストで有効なメソッドと列挙型のほか、グローバル オブジェクトを表示します。Apps Script クラスを返すグローバル オブジェクト、列挙型、メソッド呼び出しの後にピリオドを入力すると、オートコンプリートの候補が自動的に表示されます。例:

  • グローバル オブジェクトの完全な名前を入力するか、オートコンプリートからいずれか 1 つを選択して「.」(ピリオド)と入力すると、そのクラスのすべてのメソッドと列挙型が表示されます。
  • 数文字を入力すると、その文字で始まる有効な候補がすべて表示されます。

グローバル オブジェクトについて

各サービスは、少なくとも 1 つのグローバル(トップレベル)オブジェクトを提供します。たとえば、Gmail サービスには GmailApp オブジェクトからのみアクセスします。一部のサービスでは複数のグローバル オブジェクトが提供されます。たとえば、基本サービスには、BrowserLoggerMimeTypeSession の 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.getBody();
body.appendParagraph('New paragraph.');

// Same result as above.
DocumentApp.create('New document').getBody().appendParagraph('New paragraph.');

子クラスへのアクセス

どのサービスにも、グローバル オブジェクトのように上位レベルからアクセスできない子クラスが 1 つ以上含まれます。Date などの標準の JavaScript クラスとは異なり、new キーワードを使用してこれらのクラスを作成することはできません。子クラスにアクセスするには、子クラスを返すメソッドを呼び出す必要があります。特定のクラスへのアクセス方法がわからない場合は、サービスのリファレンス ドキュメントのルートページにアクセスし、必要なクラスを返すメソッドを探してください。

インターフェースの操作

一部のサービスには、リファレンス ドキュメントで「インターフェース」というラベルが付けられた特別なクラスが含まれています。これらは、事前に正確な型を判定できないメソッドの戻り値の型として使用される汎用クラスです。たとえば、ドキュメント サービスのメソッド Body.getChild(childIndex) は汎用 Element オブジェクトを返します。Element は、他のクラス(ParagraphTable など)を表すインターフェースです。インターフェース オブジェクト自体が役に立つことはほとんどありません。代わりに、通常は Element.asParagraph() などのメソッドを呼び出して、オブジェクトを正確なクラスにキャストします。

列挙型の操作

ほとんどのサービスには、名前付き値の列挙型(列挙型)がいくつか含まれています。たとえば、ドライブ サービスは、列挙型の AccessPermission を使用して、ファイルやフォルダにアクセスできるユーザーを判断します。ほとんどの場合、グローバル オブジェクトからこれらの列挙型にアクセスします。たとえば、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);