こんにちは。システムデザイン部の秦(はた)です。
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ドライブ上で「新規作成」>「その他」
「Google Apps Script」を選択します。
② 組み込みスクリプトファイルの作成
Spreadsheetを例にご説明します。
まず組み込みたいSpreadsheetを開きます。
メニューから「ツール」>「スクリプトエディタ」を選択します。
①②共通
新規作成ダイアログが開きます。
通常は「空のプロジェクト」を選択してください。
すると、スクリプトエディタ上に、空のプロジェクトが作成されます。
実行
実行したい関数を選択して「実行」を押下すると関数を実行します。
ログ
Logger.log()にて出力したログを見るにはメニューから「表示」>「ログ」を選択します。
拡張子
GoogleAppsScriptのスクリプトファイルの拡張子は「.gs」です。
スクリプトエディタ上でファイルを新規に作成すると、自動的に.gsファイルが作成されます。
4. 言語仕様
GoogleAppsScriptの言語仕様について説明して行きますが、
ベースがJavaScriptですので、基本的なところは全てJavaScriptと同じです。
従って、細かい言語仕様についてはJavaScriptのリファレンスなどを参照ください。
ここでは初歩的な部分のみご紹介します。
コメント
行コメント
一行だけコメントアウトします。
「//」(スラッシュ2つ)を付けた以降の文字列が全てコメントになります。
// コメントです。
ブロックコメント
複数行をまとめてコメントアウトします。
「/*」と「*/」で囲んだ部分が全てコメントになります。
/* * 1行目のコメント * 2行目のコメント */
Tips: 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のスクリプトについてご説明したいと思います。
それでは、また。