Google Apps Script には、ユーザーデータ、その他の Google システム、外部システムとやり取りするための 30 を超える組み込みサービスが用意されています。これらのサービスは、JavaScript の標準 Math
オブジェクトと同様のグローバル オブジェクトとして提供されます。たとえば、Math
が random()
などのメソッドや PI
などの定数を提供するように、Apps Script のスプレッドシート サービスは、openById(id)
などのメソッド、Range
などのクラス(子オブジェクト)、DataValidationCriteria
などの列挙型を提供します。
Google Workspace プロダクトを制御するサービスのリファレンス ドキュメントは、このサイトのサイドバーにある「リファレンス」ヘッダーの「Google Workspace サービス」セクションにまとめられています。ユーティリティ サービス(ユーザー インターフェースの作成、XML の解析、ログデータの書き込みなど)は「スクリプト サービス」セクションにまとめられます。
最新の JavaScript の機能
Apps Script は 2 つの JavaScript ランタイムをサポートしています。1 つは最新の V8 ランタイムで、もう 1 つは Mozilla の Rhino 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.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
は、他のクラスを表すインターフェースです(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);