どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は6回目のDay5です。
前回のおさらい
前回は、「Script Services1」をお届けしました。
今回は、 「Script Services2」 をお届けします。
今日のアジェンダ
- セッションとユーザー
- Blobクラス
- Utilitiesサービス
Script Services
補講にはいる前に、おさらいしましょう。Script Services とは、Google Apps Scriptで提供されている3つのサービシーズの内の1つです。
Script Servicesには、以下のようなサービスが提供されています。
前回は、「Script Services1」と題しまして、Propertiesサービスや、Scriptサービスを学びました。
今回のメインは、Baseサービスです。「Script Services2」としてお届けします。
セッションクラスとユーザークラス
Sessionクラスは、ユーザーのメールアドレス(状況によっては)や言語設定などのセッション情報へのアクセスを提供します。
HTTPセッションとUserオブジェクト
ここでいう「セッション」とは、HTTPセッションのことです。
HTTPセッションとは、サーバーとやり取りしている、HTTPリクエストとHTTPレスポンスの処理 のことです。HTTPリクエストとHTTPレスポンスについては、次回詳しくお届けします。
Sessionクラスで提供されている getActiveUser()メソッドの戻り値がUserオブジェクト であるという関係性になっています。
//アクティブなUserオブジェクトを変数に格納する
const userObject = Session.getActiveUser();
Userクラスには getEmail()メソッド しかありません。メンバーが1つしかないクラスは、他にないのではないでしょうか・・・。
ちなみに、getActiveUser()メソッドやgetEffectiveUser()メソッドで返るUserオブジェクトは、スクリプトを実行しているユーザー です。トリガーを設置したアカウントではありませんので、ぜひ覚えておいてください。
Blobクラス
BlobとはBinary Large Objectの略です。「バイナリ」とは、0と1で表現されているデータのことで、「バイナリデータ」の略でもあります。
もともと「2進数の」という意味の英語です。バイナリがラージということは、画像やZIPファイルなどのデータをオブジェクトとして操作しようということですね。
Blobオブジェクトリテラル
公式リファレンスでは、Blobとは、
A data interchange object for Apps Script services.
訳:AppsScriptサービスのデータ交換オブジェクト
と定義されています。
残念ながらGASには、Blobオブジェクトリテラルが用意されていません。
その代わり、UtilitiesクラスにBlobオブジェクトを生成する newBlob()メソッド が用意されています。
Utilities.newBlob(data)
Utilitiesクラスについては、後ほどお伝えします。
ちなみにJavaScriptには、Blobオブジェクトを生成するコンストラクタが用意されています。
const obj = {hello: 'world'};
const blob = new Blob([JSON.stringify(obj, null, 2)], {type : 'application/json'});
console.log(blob); //{size: 22, type: "application/json"}
Windowオブジェクト同様、いつかGASでもネイティブに操作できるといいですね。
AppsScriptサービスのデータ
AppsScriptサービスのデータとは、スプレッドシート、ドキュメント、スライド、ファイル、など、GWSで提供されているサービスのオブジェクトを指します。
画像やPDFやZipなどは、全て ファイルオブジェクト として取得してからBlobオブジェクトとして操作します。この辺、混同しないようにしましょう。
BlobSourceとは
これまでお伝えしてきた通り、AppsScriptサービスのデータは、Blobオブジェクトとして操作できます。
その、Blobオブジェクトとして操作できるオブジェクト群のことをBlobSource(ブロブソース) と呼びます。
クラス | 説明 |
---|---|
Blob | Blobオブジェクト |
Document | ドキュメント |
File | ドライブのファイル |
GmailAttachment | Gmailの添付ファイル |
HTTPResponse | HTTPレスポンス |
InlineImage | 埋め込み画像 |
Spreadsheet | スプレッドシート |
そして、BlobSourceは BlobSourceインターフェース を提供しています。インターフェースとは、「継承を目的とした元クラスの機能を引き継ぐクラス」のような感じですが、クラスの継承は上級になりますので、説明は控えさせていただきます。
大切なのは、BlobSourceインターフェースは クラス で、メンバーが2種類あるということです。
BlobSourceオブジェクト.getBlob()
BlobSourceオブジェクト.getAs(contentType)
Enum
getAs()メソッドに渡す引数はcontentTypeです。contenntTypeの正式名称は Enum MineType です。
よく聞くEnumですが、簡単な解説をブログにしたことがあるので、こちらをご参照ください。
補講ブログ的には、MimeType.JPEGプロパティにはimage/jpeg、MimeType.PDFプロパティにはapplication/pdfが定義されているため、引数はどちらでも構わないという点が大事です。
BlobSourceオブジェクト.getAs(MimeType.JPEG)
BlobSourceオブジェクト.getAs('image/jpeg')
Utilitiesサービス
ここまできて、結構お腹いっぱいになったのではないでしょうか。最後のUtilitiesサービスは、講座で取り上げたメソッドの復習ということにしましょう。
Utilities.newBlob('名前,年齢nBob,25nTom,32', MimeType.CSV, 'name.csv')
Utilities.parseCsv(csvStrings)
Utilities.zip(blobs, 'cats.zip')
Utilities.unzip(zip)
Utilities.formatDate(d, 'JST', 'yyyy/MM/dd HH:mm:ss')
Utilities.sleep(50000)//千は秒。千は秒。
中級的GASの世界
中級講座後半に差しかかってくると「あれ?Utilitiesクラスだっけ?ScriptServicesって?Scriptサービスにトリガークラスがあるんだっけ?」と、訳がわからなくなってきます。その気持ちわかります。
総復習ですが、初級から含め、講座内でとりあげたサービシーズとサービス、各クラスはこのような体系となっております。
■ Google Workspace services
・ SpreadsheetAppやDriveAppなど
■ Advanced Google services
・ あまり使わない高度なGmailとかBQとかClassroomとか
■ Script Services
・ Baseサービス
– Browser
– MimeType
– Session
– Blob(Blobsource)
– Ui
– User
・ Propertiesサービス
– Properties
・ Scriptサービス
– Trigger
– TriggerBuilder
– ClockTriggerBuilder
・ Utilitiesサービス
– Utilities
公式リファレンスの左メニューを、視覚的に記憶にいれておくといいでしょう。
トップレベルオブジェクトの理解にもつながります。
まとめ
以上で、「Script Services2」 をお届けしました。
最後はお腹いっぱいになったと思いましたので、これまで登場したサービス群の整理をしてみました。
次回は、おまちかね、いよいよ講座最終日で 「HTTP通信・API」 をお届けします。
このシリーズの目次
- [ノンプロ研]GAS中級講座5期 事前課題
- [ノンプロ研]GAS中級講座5期Day1 スコープと関数
- [ノンプロ研]GAS中級講座5期Day2 クラス・ライブラリ
- [ノンプロ研]GAS中級講座5期Day3 組み込みオブジェクト
- [ノンプロ研]GAS中級講座5期Day4 ScriptServices1
- [ノンプロ研]GAS中級講座5期Day5 ScriptServices2
- [ノンプロ研]GAS中級講座5期Day6 HTTP通信・API
- [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによるGAS開発モデルとは
- [ノンプロ研]GAS中級講座5期卒業LT プロの開発を知ろう
- [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによる開発