GAS(Google App Script)、どんなことができるの?使って勉強したことまとめ。

GAS(Google App Script)、どんなことができるの?使って勉強したことまとめ。

サーバーレスでスクリプトを実行することが可能な、
Googleのサービスの一つであるGAS(Google App Script)。
仕事でGASとSpread Sheetsを使って色々遊んだので、そのナレッジを記事にしていく。

GAS(Google App Script)とは?

Google App Script(以下GAS)とは、公式ドキュメントによると、

JavaScriptをベースにしたスクリプト言語で、ドキュメント、スプレッドシート、スライド、フォームなどのG Suite製品で新しくてクールなことを出来る。(意訳)

ものである。
一番大きな特徴は、Googleのサーバー上でスクリプトを実行可能という点で、
エンジニアにとって大変なことのうちの一つである、
「サーバー構築・保守」を全くやる必要がなくなるのである。
簡単なAPI作成や、定時処理のバッチ、Webサービス等はGoogleに任せてしまえるということである。
(もちろん、セキュアな情報を扱うであるとか、自社の膨大なデータを扱うであるとか、
WebサービスをBtoC、BtoBで提供するであるとか、使うことができない・適さない場面もあるので気を付けよう。)

早速使ってみる(準備編)

利用は非常に単純。
まずは、Googleのアカウントを取得して、ドライブに遷移しよう。
そこで、以下の画像のように
右クリック⇒「その他」⇒「+アプリを追加」をクリックする。
gas1

すると、「ドライブにアプリを追加」という画面が出てくるので、
検索窓に「google app script」と入力してEnterを押して検索する。
一番上に、以下の画像のように「Google App Script」が出てくるので、「+接続」を押せば準備完了だ。

gas2
GマークのついているものがGoogle公式のものになる。

接続したら画面を閉じて、ドライブに戻ってくる。
そこで、再び「右クリック」⇒「その他」⇒「Google App Script」を選択することで、アプリケーションを作成できる。
gas3

早速使ってみる(実行編):スプレッドシートと連携してみる。

gas4
初期画面

それでは早速使ってみる。
まずは、恐らくGASを使う際にDB代わりによく連携していくことになるであろう、
スプレッドシートの連携から。

まずは、スプレッドシートをどこでもいいので、ドライブ上に作成する。
内容は適当でいいのだが、とりあえずこんな感じ。
gas5

ここで、URLをコピペしておき、
GAS上には以下のコードを挿入する。

function myFunction() {
  var ss = SpreadsheetApp.openByUrl('【上記で作成したスプレッドシートのURL】');
}

これで、スプレッドシートの取得は完了。
中身を見てみるために、コードを以下のように変更して結果を見てみる。

function myFunction() {
  var ss = SpreadsheetApp.openByUrl('【スプレッドシートのURL】');
  Logger.log(ss);
}
# Spreadsheet

結果には「Spreadsheet」と表示された。
Javaでいうオブジェクトの型名が表示されるようなものだととりあえず解釈して進める。

※スプレッドシートの取り方はこれ一つではないので注意!
Idを取得して、openById()を使ったり、スプレッドシートを直接GASで連携していればgetActiveSpreadsheet()を使うことも可能。

ここで期待しているのは、スプレッドシートの中身なので、実際に取り出していくために以下のようにコードを変更。

function myFunction() {
  var ss = SpreadsheetApp.openByUrl('【スプレッドシートのURL】');
  var sh = ss.getActiveSheet();
  var a1 = sh.getRange("A1").getValue();
  Logger.log(a1);
}
# index

これで、セルの中身を取得するところまでできた。
ただ、実際はセルの中身一つだけより、複数取得する場合や、検索して取得することが多くなるだろう。
複数取得する場合、以下のようにコードを変更する。

 

function myFunction() {
  var ss = SpreadsheetApp.openByUrl('【スプレッドシートのURL】');
  var sh = ss.getActiveSheet();
  var a1 = sh.getRange("A1:B2").getValues();
  Logger.log(a1);
}
#  [[index, title], [0.0, これはテストだよん。]]

これで、二重配列としてセルの中身を複数取得することができた。
ちょっと面倒だが、
Array[行(1, 2, 3…)][列(A, B, C…)]として入っていることには注意。
例えば、「A2」が欲しい場合、Array[0][1]を指定してあげる必要がある。
「B5」がほしければ[1][4]といった具合である。
A列が欲しい場合、[0][i]のように指定してfor文を回す必要が出てくるなど、
操作の際にやや頭を使うので気を付けよう。

GAS(Google App Script)まとめ

今回は簡単なDB作成から情報取得までを行った。
次回はDBを検索して情報を取得する方法や、
最終的にはSlack Botの作り方まで解説していきたい。