GogleAppsScriptで出来ること

佐野

佐野 2013年3月6日

GoogleAppsスクリプトは、非常に優れたシステムです。
JavaScriptによって、GoogleAppsにある様々な要素、
メールやカレンダーなどを自動操作可能なものにしてくれます。

当然ながら、それを利用するには、多少のプログラムの知識が必要です。
変数、条件分岐、ループなどといった概念、そして数多くの関数。
それらを駆使して、プログラムは完成します。

たしかにプログラムは決して簡単ではありませんが、
幸いにも、GoogleAppsで使われるのは、JavaScript。
ウェブサイトのコンテンツで使われているのと同じものです。
ただ、ウェブサイト独自の関数が使えず、
かわりにGoogleApps向けの関数が追加されたという違いぐらいです。

この言語が選ばれたのは、わかりやすさも考えられますが、
スプレッドシートの場合だと、数字や文字列など、
何が入力されるのか、わからないものを取り出す事もあるため、
変数の型のないこの言語を選んだという事も考えられます。

難しければ、コードを丸覚えすればいいとも言われていますが、
私個人的には、それのほうが難しいです。
すでに完成されたコードを、そのまま覚えたところで、
プログラマー自身で使える機能は、固定され限定された状態です。
それよりも、コードの中で使われる関数の概念を、実際にその関数を使って、
何が出力されるのかを確かめていくほうが確実だと思うのです。

このスクリプトのエディタは、非常に優秀で、
文字の種類ごとの自動色分け、カッコの開始・終了の走査はもちろん、
コード保管機能まで備えています。

スプレッドシートを扱うのなら、「SpreadsheetApp」を呼び出して、
それに次いでピリオド(.)を入れた時点で、
それに対して使える関数の一覧が表示されます。

引数として何が必要なのか、何が戻り値として返されるのかなどの情報も表示され、
このリスト内から選択するだけで、コードが配置されます。
また、このリスト内の関数名を見るだけでも、
ある程度どのような機能なのかも想像できます。
これなら、大量のコードを暗記しなくても済みます。

このコード保管は、オブジェクトとして代入した変数
(「SpreadsheetApp」等を代入した変数)に対してピリオドを打っても、
それに応じた関数リストが表示されます。使える場所も幅広い機能です。

そして、コード保管に次いで大きな助けになるのが、デバッグ機能。
上部帯の虫マークをクリックすると、機能します。
その前に、ブレークポイントと呼ばれるものを設置する必要があり、
これは、プログラム進行を、その場所で一時停止させる場所を指定します。
左側行数をクリックすると、赤丸が表示されるので、それがブレークポイントです。

このように、ブレークポイントで停止すると同時に、
その時点で変数に代入されている中身を見る事ができます。
画像では「num1」という変数を、わざわざ作っていますが、
残念ながらブレークポイントは、何らかの変数やif文などの上でなければ、停止しません。
なので、「num1」という変数を仮に作っています。

スプレッドシートから取り出したデータは、二次配列で取得されている事がわかります。
そして、それらの変数の型も、それぞれで異なっています。
バラバラの変数の型を気にせず扱えるのは、JavaScriptならではでしょう。

そして、中には「Object(……)」というものもありますが、
これはスプレッドシート等、GoogleAppsのアイテムを読み取ったばかりの状態です。
実際に取得して編集されるデータは、このオブジェクトとなった変数から、
関数を用いて取り出しています。それがあの二次配列です。

このデバッグ機能も、単にブレークポイントで止めるだけでなく、
ブレークポイントを設置せずに、そのままデバッグモードで流しても、
エラーが起きる箇所で一時停止します。
これを利用すれば、どこでエラーが起きているのかが、簡単にわかります。

ただ、このデバッグモードは、やや重いです。
それも作ったばかりのスプレッドシートを二次配列で取得し、
その情報をデバッグモード内で展開(+マークを押す)すると、
それだけでもフリーズしたかのように時間がかかるのが難点です。
なので今回、スプレッドシートの大きさを縮めています。

自分にとって、プログラムは覚えるものではなく、
その動きを見抜くものだと思います。
そのためには、完成品のコードを丸覚えして、それらを組合わせていくのではなく、
関数1つずつの機能を確かめつつ、
その情報を整形していくことにあるのではないかと思います。

また、GoogleAppsスクリプトで操作が行える範囲にも、限りはあります。
スクリプトと言っても、あらゆる操作が可能になるわけではなく、
あくまでも1アカウントで人が操作するのと同じです。
それを自動化するのが、このスクリプトです。

例えばGmailもスクリプトで操作が可能ですが、
操作が出来るのは、自分のメールボックスだけです。
もしここで、他の人のメールボックスまで操作が出来るようになってしまえば、
上司にしか見られない機密情報も、スクリプトさえ書ければ、
部下が平気で上司の機密情報を見られるようになってしまいます。
カレンダーも同様、人にスケジュールを与える事しかできず、
その人が持つカレンダーを個別に指定し編集が行えるのは本人だけなのは、
通常の利用時も、スクリプトで操作出来る範囲としても同様です。

自動メール送信機能の際によく使われる「GmailApp」関数も、
返信者宛先がトリガー設定者になるのも、あくまでもそのアカウントのGmail機能を使って
メール送信を行っているからでしょう。
オプションの中に「replyTo」で返信者を指定できるものがあり、
ネット上の情報には、その事が記されていますが、実際には機能していません。
最初の頃は機能していたが廃止されたか、または将来的に導入予定だったまま放置されたか、
たぶんその名残でしょう。

こう言うと、出来る事が限られるように思われるかもしれませんが、
これらはセキュリティの問題上、仕方のない事ですし、
様々な作業を自動化できるというだけでも、充分にすごい事です。
そして、GoogleAppsスクリプトは、ウェブアプリケーションとして、
一般のウェブサイトとの連携も可能になります。
多少コツは必要ですが、この機能を活かせば、ウェブサイトに何かを埋め込むだけで、
Googleドライブに情報を入力するといった事も可能になります。
これを利用できれば、GoogleAppsの幅も広がると思いますし、
現在それに着手しているところです。