組み込みの Google サービス

Google Apps Script には、ユーザーデータ、他の Google システム、外部システムとやり取りするための 30 を超える組み込みサービスが用意されています。これらのサービスは、JavaScript の標準 Math オブジェクトに似たグローバル オブジェクトとして提供されます。たとえば、Mathrandom() などのメソッドや PI などの定数を提供するように、Apps Script のスプレッドシート サービスopenById(id) などのメソッド、Range などのクラス(子オブジェクト)、DataValidationCriteria などの列挙型を提供します。

プロダクトを制御するサービスのリファレンス ドキュメントは、このサイトのサイドバーの [リファレンス] ヘッダーの [ サービス] セクションにまとめられています。ユーティリティ サービス(ユーザー インターフェースの作成、XML の解析、ログデータの書き込みなど)は、[スクリプト サービス] セクションに収集されます。

最新の JavaScript の機能

Apps Script は、最新の V8 ランタイムと、Mozilla の Rhino JavaScript インタープリタを搭載した古いランタイムの 2 つの JavaScript ランタイムをサポートしています。

V8 ランタイムは、最新の ECMAScript 構文と機能をサポートしています。Rhino ランタイムは、古い JavaScript 1.6 標準と、1.71.8 のいくつかの機能をベースにしています。スクリプトで使用するランタイムは自由に選択できますが、V8 ランタイムを使用することを強くおすすめします。

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

予測入力を使用する

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

  • グローバル オブジェクトのフルネームを入力するか、自動補完から選択して .(ピリオド)を入力すると、そのクラスのすべてのメソッドと列挙型が表示されます。
  • 数文字を入力すると、その文字で始まる有効な候補がすべて表示されます。

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

各サービスは、少なくとも 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.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 つ以上の子クラスが含まれています。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  users.)
var folder = DriveApp.createFolder('Shared Folder');
folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);