こんにちは。システムデザイン部の秦(はた)です。

Google社のGoogleAppsは法人・個人を問わず普及しているクラウドサービスですが、
今回はGoogleAppsのアプリケーションにプラグインするGoogleAppsScriptについてご紹介します。

1. ゴール

最終的には実務で使えるプログラムを書けることをゴールとしますが、
今回はGoogleAppsScriptの言語仕様について理解するところまでをゴールとします。

2. GoogleAppsScriptについて

それでは早速、GoogleAppsScriptについてご説明します。
詳しい説明はGoogle社の公式サイトをご覧頂ければと思いますが、
ここではポイントを掻い摘んでご説明します。

GoogleAppsとは?

まず、GoogleAppsについてですが、Google社の紹介ページがとてもわかりやすいので、
下記のリンクに目を通しておいてください。

Google Apps for Work | Google, Inc

GoogleAppsScriptとは?

次に、本題のGoogleAppsScriptについてですが、Gmail、Drive、Spreadsheet、Document、Calendar、Mapsなど、
様々なGoogleAppsのアプリケーションに独自の機能を追加するためのスクリプト言語です。

言語仕様はJavaScriptをベースにしており、JavaScript + GoogleAPIというイメージです。

各APIについては、GoogleAppsScript公式に網羅されています。 ※全て英語です

Apps Script | Google Developers

3. スクリプトエディタの開き方

GoogleAppsScriptは単独で存在するものと、
SpreadsheetやDocumentなどに組み込まれるものとがあります。

それぞれについてスクリプトエディタの開き方をご説明します。

① 単独のスクリプトファイルの作成

Googleドライブ上で「新規作成」>「その他」

gas1_001

「Google Apps Script」を選択します。

gas1_002

② 組み込みスクリプトファイルの作成

Spreadsheetを例にご説明します。

まず組み込みたいSpreadsheetを開きます。
メニューから「ツール」>「スクリプトエディタ」を選択します。

gas1_003

①②共通

新規作成ダイアログが開きます。
通常は「空のプロジェクト」を選択してください。

gas1_004

すると、スクリプトエディタ上に、空のプロジェクトが作成されます。

gas1_005

実行

実行したい関数を選択して「実行」を押下すると関数を実行します。

gas1_006

ログ

Logger.log()にて出力したログを見るにはメニューから「表示」>「ログ」を選択します。

gas1_007

拡張子

GoogleAppsScriptのスクリプトファイルの拡張子は「.gs」です。
スクリプトエディタ上でファイルを新規に作成すると、自動的に.gsファイルが作成されます。

4. 言語仕様

GoogleAppsScriptの言語仕様について説明して行きますが、
ベースがJavaScriptですので、基本的なところは全てJavaScriptと同じです。
従って、細かい言語仕様についてはJavaScriptのリファレンスなどを参照ください。

ここでは初歩的な部分のみご紹介します。

コメント

行コメント

一行だけコメントアウトします。
「//」(スラッシュ2つ)を付けた以降の文字列が全てコメントになります。

// コメントです。

ブロックコメント

複数行をまとめてコメントアウトします。
「/*」と「*/」で囲んだ部分が全てコメントになります。

/*
* 1行目のコメント
* 2行目のコメント
*/

Tips: JSDoc

GoogleAppsScriptでも「JSDoc」が定義できます。
例えば、「@param」「@return」などが該当します。メニューから「ファイル」>「版を管理」で版を保存した際に
JSDocが作成されます。参考)
Use JSDoc

変数

変数宣言

「var 変数名」で変数を宣言します。
var句は特に付けなくても良いですが、変数のスコープ(範囲)を明確にするためにも
全ての変数宣言で付けた方が良いでしょう。

var hoge;

代入

「変数名 = 値」で代入します。
変数宣言とは別に代入もできますし、変数宣言と同時に代入もできます。

  • 変数宣言とは別
var red;
red = '赤';
  • 変数宣言と同時
var colorIndex = 1;

演算子

四則演算子

a = 2 + 1;  // 足し算
a = 2 - 1;  // 引き算
a = 2 * 1;  // 掛け算
a = 2 / 1;  // 割り算

四則演算子の応用

a = a++;  // a = a + 1; と同じ(接尾辞インクリメント)
a = ++a;  // a = a - 1; と同じ(接頭辞インリメント)
a = a--;  // a = a - 1; と同じ(接尾辞デクリメント)
a = --a;  // a = a - 1; と同じ(接尾辞デクリメント)
a += 10;  // a = a + 10; と同じ
a -= 10;  // a = a - 10; と同じ

Tips: 接頭辞インクリメントと接尾辞インクリメントの違い

接尾辞インクリメント「a++」と接頭辞インクリメント「++a」には明確な違いがあります。

どちらも「1を加算する」という処理は一緒なのですが、代入した時の値に違いがあります。

接尾辞インクリメント

var a = 0;
var result = a++;
Logger.log(result); // 0

接頭辞インクリメント

var a = 0;
var result = ++a;
Logger.log(result); // 1

つまり、

  • 接尾辞インクリメント「a++」は加算する前に代入する
  • 接頭辞インクリメント「++a」は加算した後に代入する

という点が異なります。

比較演算子

2 > 1   // より大きい
2 < 1   // より小さい(未満)
2 >= 1  // 以上
2 <= 1  // 以下
2 == 1  // 等価(同等)
2 != 1  // 等価でない
2 === 1 // 厳密等価(同値)
2 !== 1 // 厳密等価でない

Tips: 「==」と「===」の違い

等価演算子「==」と厳密等価演算子「===」では判定結果が異なります。
具体的には以下の様な結果になります。
意図しない判定結果はバグに繋がりますので、特別な理由がない限りは
厳密等価演算子「===」を使うことをオススメします。

ちなみに、CoffeeScriptではJavaScriptに変換した際に
全て厳密等価演算子に変換されます。

////////////
// true
////////////
// 等価
1 == true   // true
1 == "1"    // true
// 厳密等価
1 === true  // false
1 === "1"   // false

////////////
// false
////////////
// 等価
0 == false   // true
"" == false  // true
// 厳密等価
0 === false  // false
"" === false // false

////////////
// 数値
////////////
var a = 1;
var b = new Number(1);
a == b;    // true
a === b;   // false

////////////
// 文字列
////////////
var a = "abc";
var b = new String("abc");
a == b  // true
a === b // false

他にも色々ありますので、こちらを参考にしてください。
式と演算子 | MSDN

ブロック制御

分岐

分岐は「if ~ else if ~ else」にて行います。

if (a === 1) {
  Logger.log('if');

} else if (a === 2) {
  Logger.log('else if');

} else {
  Logger.log('else');
}
// 実行結果は試してみてくださいね。

繰り返し(ループ)

繰り返しは「for」「while」「do ~ while」にて行います。

for文

for (var i=0; i<10; i++) {
  Logger.log(i);
}

拡張for文

var ary = [1, 2, 3, 4, 5];
for (var idx in ary) {
  Logger.log(ary[idx]);
}

while文

var cnt = 0;
while (cnt <= 10) {
  Logger.log(cnt);
  cnt = cnt++;
}

do while文

var cnt = 0;
do {
  Logger.log(cnt);
  cnt = cnt++;
} while (cnt <= 10)

次のループへ

for (;;) {
  continue;
}

ループを抜ける

for (;;) {
  break;
}

5. 終わりに

今回はファーストステップとして、GoogleAppsScriptの初歩的な部分をご説明しました。
JavaScriptを書ければGoogleAppsSriptを書けるも同然ですので、
ぜひJavaScriptを書けるようになってくださいね。

次回はSpreadsheetのスクリプトについてご説明したいと思います。

それでは、また。