Open8
Google Apps Script 開発の知見がたまってきたのでスクラップを書く
claspを使う
- clasp は Google 製の Google Apps Script の開発ツール
- 以下のことができて幸せになれる
- ローカルでコードを書いてデプロイできる
- コードを Git 管理できる
- TypeScript でも書ける
- 導入方法は以下あたりを参照
開発環境と本番環境を分ける
- Google Apps Script というと Web エディタに直接書き込みなので本番環境を直接さわることになりがち
- clasp を使うとデプロイ先を分けることで開発環境と本番環境を分けることが可能
- ただ clasp をそのまま使うと、
clasp push
で.clasp.json
に書かれた環境にデプロイされるだけで環境を分けられない
環境を分けてデプロイする方法
npm スクリプトを使う
(Makefile が好きな人は Makefile でもよいかと)
- プロジェクトルートに以下のファイルを配置
-
.clasp.dev.json
: scriptId に開発環境のスクリプトIDが設定されたファイル -
.clasp.prod.json
: scriptId に本番環境のスクリプトIDが設定されたファイル
-
- package.json の scripts フィールドに以下を記述
"scripts": {
"link:dev": "ln -s .clasp.dev.json .clasp.json",
"link:prod": "ln -s .clasp.prod.json .clasp.json",
"push:dev": "npm run link:dev && clasp push",
"push:prod": "npm run link:prod && clasp push"
},
- 以下コマンドで開発環境・本番環境にデプロイできる
-
npm run push:dev
: 開発環境 -
npm run push:prod
: 本番環境
-
スクリプトプロパティの設定をコードで行う
背景:スクリプトプロパティの設定が不便になった
- Google Apps Script の新エディタではスクリプトプロパティの設定の動線がなくなった
- 旧エディタでもスクリプトプロパティの編集・追加ができなくなることがある
対応策:コードでスクリプトプロパティを設定する
- 以下をコード上に書いておき、必要に応じて利用するのがよい
- value に改行を含めたい場合は
\n
を入れてやる
PropertiesService.getScriptProperties().setProperty("<key>", "<value>");
Container-bound Scripts で作る。 Standalone Scripts は作らない
- Google Apps Script には以下2種類がある
- Container-bound Scripts : Google スプレッドシートなどに紐づくスクリプト
- Standalone Scripts : 独立したスクリプト
- Google スプレッドシートを使わないのであれば Standalone Scripts はアリに思える
- しかし、 Standalone Scripts 作成後に以下のような要望がでる可能性がある
- 実行結果を表で出力したい
- 非エンジニアが設定値を設定できるようにしたい
- 実行ログを残したい
- こういった場合に Standalone Scripts だと Container-bound Scripts への移植が必要になり後々面倒
- 当初は全く Google スプレッドシートを使用しない場合でも、最初から Google スプレッドシートの Container-bound Scripts で作っておいたほうがよい
TypeScript で書く
- TypeScript で書くと補完してくれるので幸せになれる
-
@types/google-apps-script
をインストールする。Google Apps Script のクラスも補完してくれるようになる -
clasp push
時に clasp が TypeScript コードを Google Apps Script に変換してくれる-
tsc
でトランスパイルする必要はない
-
- 導入方法は以下あたりを参照
Tamotsu を使う
- Tamotsu は GoogleスプレッドシートのORマッパー
- 厳密に言うと Object-Spreadsheet Mapper
-
where
で条件に合う行を取得したり、列名をkey
にして値を読み書きしたりなど便利- Google Apps Script 標準の
getRange()
とgetValues()
,setValues()
を使ったセルの読み書きにツラミを感じる人にはイチオシ
- Google Apps Script 標準の
- 導入方法・使い方は以下あたりを参照
Utilities Class を活用する
- Class Utilities | Apps Script | Google Developers
- Google Apps Script が標準提供しているクラス
- 便利なメソッドが多いので活用すべし
おすすめメソッド
sleep(milliseconds)
- 指定ミリ秒 sleep するメソッド
-
setTimeout
,while
,for
などを駆使して sleep 処理を書く必要がなくなる
Utilities.sleep(10000); // 10秒 sleep
formatDate(date, timeZone, format)
- Dateオブジェクトを指定した日時フォーマットの文字列に変換するメソッド
const date : Date = new Date(2022, 1, 8, 0, 0, 0);
const strDate : string = Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
console.log(strDate); // 2022/02/08 00:00:00
getUuid()
- UUID を採番してくれるメソッド
console.log(Utilities.getUuid()); // 2e8e6ecc-cfd0-4e9d-9e6c-aff8c9091194
Google Apps Script × Slack API クックブック
Slack APIを使った様々なユースケースのコードを以下のZennの本にまとめてます。