はじめに
JavaとJavaScriptはインドとインドネシア並に違います。
それぞれプログラミング言語という意味では同じですが、使いどころや書き方が大きく異なります。
この記事では、Google Apps Script(以下GAS)を使って
初めてプログラミングを学ぶ方1でもわかりやすいように、
ざっくりとですがJavaScript(以下JS)のコードの読み方を説明します。
プログラミング経験者の方は、当記事よりも以下サイトを見てもらえれば事足りると思います。
JSについて→JavaScript - JavaScript | MDN
GASについて→Reference Overview
Reference Overviewの左メニューから「G Suite Service」を押すと
おそらくGASで操作したいと思われるGoogleサービス名が見えると思います。
Spreadsheet、Gmail、Drive、Calendar
開発者が本当に欲しいのってこのページへの直リンなんですが
なんかこんなん作ってみましたってページしか検索結果に出てこないよね。
「GAS カレンダー」とかの検索条件で上記ページが当たるようにしてくださいGoogle先生
JSとGASの関係
GASとJSは厳密には違うものですが、GASはJSベースに作られているプログラミング言語です。
そのため、GASの開発で何か困った事があれば、JSの記事を調べると解決できる事があります。
ただし2018/08現在、JSはES6(=2015年版)と呼ばれるバージョンで使える機能が増えていますが、
GASではJSのES5(=2011年版)相当の機能しかありません。
時々、ネットで調べた内容が使えない!なんてことがあるかもしれません。
しかし最新の機能がなくても十分にプログラムは書けますので、あまり気にせずに進めていきましょう。
Google Chromeで使われているV8エンジン相当の機能が使えるようになりました!素晴らしい!
コードの種類
コードには、おおよそ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;
プログラムを書く量を減らし、見やすくするために省略して書けるようにもなっています。
でも、JSでは文字と数値の計算はできないので気を付けてください!
'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の数を表示する]
}
これだけ見てもいまいち価値がわからないかもしれませんが
実際に使ってみると、便利なところがわかると思います。
関数
関数を使うと、プログラムの処理のかたまりを作って、他のところで呼び出す事ができます!
これを、関数の定義といいます。
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の合計を、呼び出し元に戻す]
}
コードを書いていて、あれ?同じようなものさっき書いてなかった?とか思ったら
そのコードを関数として取り出す事で、同じプログラムを書く手間を減らす事ができます!
最初は気にせずに書いてしまって、後から見直したときに気づくこともあるかもしれません。
その時は、勉強のチャンス!
関数として取り出して、コードを書き直してみましょう!
プロパティ・メソッド
時々、プログラムに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先生に聞いたり、わかる人に聞きながら実際に手を動かして、トライしてみましょう!