[ノンプロ研]GAS中級講座5期Day5 ScriptServices2

GAS

どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は6回目のDay5です。

前回のおさらい

前回は、「Script Services1」をお届けしました。

[ノンプロ研]GAS中級講座5期 Day4ScriptServices1
どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は5回目のDay4です。前回のおさらい前回は、「組み込みオブジェクト」 ...

今回は、 「Script Services2」 をお届けします。

今日のアジェンダ

  1. セッションとユーザー
  2. Blobクラス
  3. 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(ブロブソース) と呼びます。

クラス説明
BlobBlobオブジェクト
Documentドキュメント
Fileドライブのファイル
GmailAttachmentGmailの添付ファイル
HTTPResponseHTTPレスポンス
InlineImage埋め込み画像
Spreadsheetスプレッドシート

そして、BlobSourceは BlobSourceインターフェース を提供しています。インターフェースとは、「継承を目的とした元クラスの機能を引き継ぐクラス」のような感じですが、クラスの継承は上級になりますので、説明は控えさせていただきます。

大切なのは、BlobSourceインターフェースは クラス で、メンバーが2種類あるということです。

BlobSourceオブジェクト.getBlob()
BlobSourceオブジェクト.getAs(contentType)

Enum

getAs()メソッドに渡す引数はcontentTypeです。contenntTypeの正式名称は Enum MineType です。

よく聞くEnumですが、簡単な解説をブログにしたことがあるので、こちらをご参照ください。

[GAS]Enumってなに?(初級編)
どうも。つじけ(tsujikenzo)です。このシリーズではEnum(イーナム)について初級・中級の2回に渡ってお送りします。今日は1回目で「Enum初級編」についてお届けします。はじめましてEnumさん「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」 をお届けします。

このシリーズの目次

  1. [ノンプロ研]GAS中級講座5期 事前課題
  2. [ノンプロ研]GAS中級講座5期Day1 スコープと関数
  3. [ノンプロ研]GAS中級講座5期Day2 クラス・ライブラリ
  4. [ノンプロ研]GAS中級講座5期Day3 組み込みオブジェクト
  5. [ノンプロ研]GAS中級講座5期Day4 ScriptServices1
  6. [ノンプロ研]GAS中級講座5期Day5 ScriptServices2
  7. [ノンプロ研]GAS中級講座5期Day6 HTTP通信・API
  8. [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによるGAS開発モデルとは
  9. [ノンプロ研]GAS中級講座5期卒業LT プロの開発を知ろう
  10. [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによる開発
タイトルとURLをコピーしました