JavaScript
GoogleAppsScript

初めてGAS開発をする方のための最低限のJS講座

はじめに

JavaとJavaScriptはインドとインドネシア並に違います。
それぞれプログラミング言語という意味では同じですが、使いどころや書き方が大きく異なります。

この記事では、Google Apps Script(以下GAS)を使って
初めてプログラミングを学ぶ方1でもわかりやすいように、
ざっくりとですがJavaScript(以下JS)のコードの読み方を説明します。

プログラミング経験者の方は、当記事よりも以下サイトを見てもらえれば事足りると思います。
JSについて→JavaScript - JavaScript | MDN
GASについて→Reference Overview

JSとGASの関係

GASとJSは厳密には違うものですが、GASはJSベースに作られているプログラミング言語です。
そのため、GASの開発で何か困った事があれば、JSの記事を調べると解決できる事があります。

ただし2018/08現在、JSはES6(=2015年版)と呼ばれるバージョンで使える機能が増えていますが、
GASではJSのES5(=2011年版)相当の機能しかありません。

時々、ネットで調べた内容が使えない!なんてことがあるかもしれませんが
最新の機能がなくても十分にプログラムは書けますので、あまり気にせずに進めていきましょう。

コードの種類

コードには、おおよそ6つの種類があります。

  • 変数
  • コメント
  • 命令
  • 関数
  • プロパティ、メソッド

もちろん、他にも色々あるのですが、最初はこれだけわかれば十分かと思います。
順番に見ていきましょう。

変数

プログラムにはいろいろな作り方や考え方がありますが
JSでは、変数にデータを設定(以下、代入)して、あとから使えるようにします。
数学の方程式でいうところの、「y = 2x;」の「y」とか「x」のところですね。

var x = 3;

変数には、数字だけではなく、文字列2でもなんでも代入する事ができます!

var myBike = '750RS';

↓↓↓
読み方は以下の通り

var(変数) myBike(マイバイク) = (代入する) '750RS'(文字列) =>変数myBikeに文字列750RSを代入する

一度変数に代入したものは、あとから内容を変更したり、使うこともできます。

Logger.log(myBike); //=> 750RSと表示される

myBike = 'ZX-10RR';

Logger.log(myBike); //=> ZX-10RRと表示される

※Logger.log()は、変数の中身を確認するときに使う関数(後で説明)です。
 alert()やconsole.log()など、色々な方法もあるのですが、GASではこれを使うと覚えてください。

文字を設定するときは、周りをシングルクオート'で囲う必要があります。
なぜなら、変数に他の変数の内容を代入する事ができるからです!

var x = 3;
var y = x; //=> yに3が設定される
var y = 'x'; //=> yにxという文字が設定される

シングルクオートの有無で、文字の代入なのか変数を代入するのかを判断するわけですね。

数学でいうところの式、そのものです。
「y = ax」みたいなものですね。
Excelでいうと「=A1+A2+A3...」が式に該当します。

数値同士の計算はもちろん、変数を混ぜたり、変数同士で足し算とか割り算とかできます。
足し算用の+、引き算用の-、掛け算用の*、割り算用の/などなど、これらの記号を演算子といいます。

何があるかは知りたい人はこちら→式と演算子の一覧 - JavaScript | MDN

var a = 3;
var sum = a + 5; //=> sumには8が代入される

ちなみに、これはどういう意味でしょうか?

x++;

↓↓↓
こういう意味になります。

x = x + 1;

プログラムを書く量を減らし、見やすくするために省略して書けるようにもなっています。

でも、文字と数値の計算はできないので気を付けてください!

'ABC' * 3 //=> エラー! 文字列に数字を掛け算しようとしても、ABCABCABCにはならない!

コメント

コードに、説明をつけたいときに使います。
何を書いても、プログラムの動きには影響がありません。

複雑な処理だと、コードを読むのに時間がかかると思います。
そんな時、コメントがつけられていると読むのが少し楽になります!
全部つければいいというわけでもないですが、
将来の自分がコードを読み直すときに備えて、積極的にコメントをつけていきましょう!

1:スラッシュが2個続く形式

スラッシュ以降の1行分だけコメントとして扱われます。

var bikeCount = 3; // 今持っているバイクの台数

2:スラッシュとアスタリスクの組み合わせの形式

コメントが複数行になる場合に使うとよいでしょう。

/**
 * 当日の天文イベントを返却
 * イベントがない場合はnullを返却する
 *
 * @return {string} 当日の天体情報
 */
function getTodayAstronomEvent() {

命令

色々ありますが、まずはよく使うifとforを覚えましょう。

1:if(条件分岐)の使い方

「もし~の場合(if)~をする、違う場合(else)は~をする」といった分岐をしたいときに使います。

var x = 3;
if(x === 3){
    // xが3の時だけ実行される
    x = 5;
} else {
    // xが3じゃない場合に実行される
    x = 4;
}

「~の場合...」が並ぶ場合は、else ifが使えます。

var x = 2;
if(x === 3){
    // xが3の時だけ実行される
    x = 5;
} else if(x < 3){
    // xが3未満の時だけ実行される
    x = 0;
} else {
    // xが4以上の場合に実行される
    x = 4;
}

↓↓↓
読み方は以下の通り ※if文で()を使うので、読み方を[]で囲みます。

if [もし] (x [変数xが]  === [同じ]  3 [数字の3と]) {[場合] =>もし、変数xが数字の3と同じ場合
  x = 5; [変数xに5を代入する]
}

else ifやelseは、要らなかったら書かなくても大丈夫です。
詳しくは→if...else - JavaScript | MDN

2:for(繰り返し)の使い方

「~回まで~の処理を繰り返す(for)」時に使います。
タイマーみたいなイメージですね。

// iが5になるまで繰り返す
for (var i = 1; i < 6; i++){
    Logger.log(i + '回目');
}
// => 1回目 2回目 3回目 4回目 5回目と表示されます。

↓↓↓
読み方は以下の通り ※for文で()を使うので、読み方を[]で囲みます。

for[繰返]  (var i = 1; [変数iに1を代入して繰り返しを始める]
 i < 6; [変数iが6未満なら繰り返し続ける]
 i++ [一回実行するたびに変数iを+1する])
{ [{}までの処理を繰り返す]
    Logger.log(i + '回目'); [変数iの数を表示する]
}

これだけ見てもいまいち価値がわからないかもしれませんが
実際に使ってみると、便利なところがわかると思います。

詳しくは→for - JavaScript | MDN

関数

関数を使うと、プログラムの処理のかたまりを作って、他のところで呼び出す事ができます!
これを、関数の定義といいます。

Excelのsum()とか、vlookup()などと同じイメージです。
関数を呼び出す時、数値や文字列、変数を設定する(渡すと表現することも)事ができます。
これを、引数といいます。

/** 
* x,y,z3つの数字を合計する。
* Excelはもっと多くの引数を扱えるように作られている
*/
function sum(x, y, z) {
    // returnを書くことで、関数を呼び出したところに結果を戻す(教える)事ができます。
    // これを、戻り値といいます。
    return x + y + z;
}

var goukei = sum(1,2,3); // => goukeiに6が代入される

↓↓↓
読み方は以下の通り ※()を使うので、読み方を[]で囲みます。

function[関数] sum[変数名] ([()の中に引数を定義] x, y, z [変数x,y,zの3つ]) { [{}の間に書かれた処理をします]
    return x + y + z; [x+y+zの合計を、呼び出し元に戻す]
}

コードを書いていて、あれ?同じようなものさっき書いてなかった?とか思ったら
そのコードを関数として取り出す事で、同じプログラムを書く手間を減らす事ができます!

最初は気にせずに書いてしまって、後から見直したときに気づくこともあるかもしれません。
その時は、勉強のチャンス!
関数として取り出して、コードを書き直してみましょう!

詳しくは→関数宣言 - JavaScript | MDN

プロパティ・メソッド

時々、プログラムにx.aaa.bbbみたいな記述が出てくるかと思います。
これをプロパティやメソッドなどと呼んだりします。

厳密に説明しようとすると、オブジェクトとか、さらに新しい用語が出てくるのですがここでは置いておくとして…
実は、文字列や数値には最初から変数(プロパティ)や関数(メソッド)が定義されているのです!
これらをうまく活用していく事が、GASプログラミングでのポイントです!

例はこちら
↓↓↓

// ContentServiceはMimeType変数を持っている、そこからさらにMimeTypeが持っているJSON変数を取り出す
ContentService.MimeType.JSON

// 文字列の変数sが持つ、indexOf関数を呼び出す
var s = 'ABCDEFG';
var index = s.indexOf('F');

.がついている場合、.より左側の変数(関数の場合はその戻り値)が、右側の変数(関数)を持っていると考えてみましょう。

Arrayのプロパティと関数→Array - JavaScript | MDN
String(文字列)のプロパティと関数→String - JavaScript | MDN

おわりに

以上で、ざっくりな説明となります。

あとは、コードを見たり、書いたりしながら学んでいきましょう。

例えば、代入については、実はルールがあって、注意するべきポイントがあります。
今の段階では気にする必要はないと思いますが、困ったときは以下の記事を参考にしてみてください。
【Javascript】値渡しと参照渡しについてあらためてまとめてみる

他にも、JavaScriptでハマりやすいポイントについて書かれた、以下のような記事があります。
酒飲みがJavaScriptで個人的に気をつけている所 ※ES6ベースなので、GASにそのまま適用できないものもあり

などなど。

Google先生に聞いたり、わかる人に聞きながら実際に手を動かして、トライしてみましょう!


  1. LineBot開発を始めた友達や、昼夜問わず開発依頼してくる方が、僕がいなくても自力で開発できるようになってほしいとの願いを込めて作成 

  2. プログラミング言語では「文字」というと一文字だけ、二文字以上の文や単語を「文字列」として区別することが多いです。JSでは、「文字列」と表現しています。