読んでみた(詳解! Google Apps Script完全入門 [第3版])Part1(JavaScript基本機能)
- はじめに
- 第0章:前提
- 第1章:GASの注意点
- 第2章:プロジェクトとスクリプト
- 第3章:(JSの)基本構文
- 第4章:(JSの)制御構文
- 第5章:(JSの)関数
- 第6章:(JSの)クラスとオブジェクト
- 第7章:(JSの)組み込みオブジェクト
- その他
はじめに
こんにちは、fujiokaです。
ついに始まりましたね、10連休のゴールデンウィーク..!🏖
そんな中でもまだまだコロナ禍の影響もあるので、
ジョギングしたり🏃🏻♂️早く寝たりと健康的に過ごしたり、
家でまったり過ごそうと思っています
連休でまとまった時間が取れるので、
昨年に続いてプロジェクトで利用している(※過去ブログ)、
GoogleAppsScript(GAS)を腰を据えてGASを体系的に学習しました😆
これまでは、必要な機能をその都度Webサイトで調べながら作っていましたが、
開発が膨れてきて、
「GAS特有の機能を使ったら、実はもっと効率的に書けるんじゃね?🤔」
と思い、今更ながら、専門書を読んでみたので、まとめてみました。
(まずは各章のポイントをピックアップしていきます)
第0章:前提
普段プロジェクトで使っている略記を用いて、以降をまとめていきます。
-
- SS:SpreadSheet
- GD:GoogleDrive
第1章:GASの注意点
- GASは、ガスと読む。(ギャスではない)
- GASは、13のGoogle Appsと連携できる。
⇒Advanced Google Serviceを使うと、20以上のサービスと連携できる。 - ブラウザオブジェクトとDOMオブジェクトは利用できない。
- GASには、制限&クオータがある。(P23)
第2章:プロジェクトとスクリプト
第3章:(JSの)基本構文
- 基本構文
- 変数:let ⇒V8ランタイムをオンにしていればvarでなくてOK
- 定数:const
- 記法
- キャメル ⇒ メソッド、変数/定数
- スネイク ⇒ グローバル定数、プロパティのキー名
- 文字列
- console.log('this is ${val}') (Pythonで言うf文字列)
- 配列
- ...{list} (i for i in list と同じ)
第4章:(JSの)制御構文
- 論理演算子
- ”==”と”===”は異なる。
- ”==” :データ型は考慮せずに比較する
Ex) ”10”==10 ⇒ Trueである - ”===”:データ型を含んで比較する
- ”==” :データ型は考慮せずに比較する
- AND:&&、 OR:||、 NOT:!
- ”==”と”===”は異なる。
- 条件分岐(Switch)
- Switchは、break が無いと、全ケースを通過してしまう。
switch() {
case "case1" {
console.log("this is case1");
break
} case "case2" {
console.log("this is case2");
break
} default {
console.log("this is default")
}
}
- Switchは、break が無いと、全ケースを通過してしまう。
- ループ文
- while
- for (let i = 1; i < 5; i++) {}
- for (i of list) :配列に使用(値で回す)
- for (i in object) :オブジェクトに使用(キーで回す)
- ループにラベルを貼って、任意のループをbreakすることができる
第5章:(JSの)関数
- プライベート関数には、末尾にアンスコを1つ付ける(Pythonと逆)
∵コンソールでのプルダウン関数検索から除外するため - GoogleのJSスタイルガイドでは、privateもprotectedも、末尾アンスコらしい。
- (Pythonと同じではあるが、)
変数をイコールでコピーした場合には、それぞれ別メモリとして値が管理される。
(いわゆる値渡し)
一方で、配列/オブジェクトの場合には参照渡しが起きるので、
値渡しの場合には以下のようなコードが必要。
let arr2= arr1.concat();
- JSのドキュメンテーション(コメント)は、以下を参考にすること。
- アロー関数を利用することで、いちいちfunction 〜〜と書く手間を減らすことができ、コードの軽量化ができる。
ただメソッドレベルの作成は、リテラル関数かメソッド定義が望ましい。(P.155) - グローバルに定義しているものは、ファイル上に集めること。
∵
第6章:(JSの)クラスとオブジェクト
- JSにおける、プロトタイプ
- 各インスタンスで、プロパティは個別にあって良いが、メソッドは1つで十分
(それぞれに定義する必要はなく、どれか1個あればOK)
- 各インスタンスで、プロパティは個別にあって良いが、メソッドは1つで十分
- クラスは、以下の通り
class ClassName {
constructer(param1, param2) { ⇦
this.val1 = param1;
this.val1 = param2;
}
someMethod {
(something is occured);
}
}
第7章:(JSの)組み込みオブジェクト
- V8ランタイムに設定しないと利用できないStirngメソッドやArrayメソッドなどが多数ある
(Ex. StartWith、repeat) - Arrayメソッド
- アクセサメソッド
- push ⇄ shift:配列の後・前に値を追加
- slice、splice:インデックスを指定して配列を抽出・置換する
- アクセサメソッド
その他
- GASには以下がある。
- 改善案
- ボタン押下ではなく、定期投入に変える?
- Googleのコード規約に合わせて修正する。
- プライベートメソッドには、末尾にアンスコを付ける。
- クラスが利用されていないので、使用する
- AWSへの送信オブジェクトを、クラス化する
- 例)生産者の登録オブジェクト
class RequestObject {
constructor (tenant_id, tenant_name, detail) {
this.tenant_id = tenant_id;
this.tenant_name = tenant_name;
this.detail = detail;
}
}
- 例)生産者の登録オブジェクト
- AWSへの送信オブジェクトを、クラス化する
- ループの基本記法を決める