Google Apps Scriptを使ってみた

最近、GoogleスプレッドシートGoogle Apps Scriptという、MS-ExcelでのVisual Basic for Applications(VBA)に相当するスクリプト環境があることを知った。
以下のような特徴を持ち、その気になれば、かなり本格的なアプリケーションが作れる。

このGoogle Apps Scriptを使って色々やってみたので、以下、実際に動かしてみたコード断片を紹介。

豊富なライブラリ

http://code.google.com/intl/ja/googleapps/appsscript/allservices.html
このドキュメントを見れば分かるように、様々なサービスが利用できる。

スプレッドシートへのアクセス

SpreadsheetAppを使って、スプレッドシートの参照や更新ができる。VBAと似たような感じ。

ss = SpreadsheetApp.openById(SPREADSHEET_ID);
sheet = ss.getSheetByName(SHEET_NAME);
value = sheet.getRange("A2").getValue();
sheet.insertRowsAfter(1, 1)
range = sheet.getRange("A2:D3");
values = [["A2", "B2", "C2", "D2"], [1, 2, 3, 4]];
range.setValues(values);
外部サービス(HTTP)へのアクセス

UrlFetchAppを使って、任意のURLのコンテンツを取得できる。外部からJSON形式のデータを取得するコード例は下記になる。

var response = UrlFetchApp.fetch(JSON_URL);
if(response.getResponseCode() != 200) {
  throw "error: response code=" + response.getResponseCode();
}
json = response.getContentText();
objects = eval('(' + json + ')');

スクリプトを実行するタイミング

http://code.google.com/intl/ja/googleapps/appsscript/guide_events.html
このドキュメントにあるように、様々なタイミングでスクリプトを実行できる。

ユニークなのが、単体のサービスとして公開して、ブラウザからアクセスできること。
http://code.google.com/intl/ja/googleapps/appsscript/guide_user_interfaces.html#RunDecision
以下のようなdoGet()メソッドを用意して「サービスとして公開」すると、動的なWebページを作ることもできる。

function doGet(event){
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  panel.add(app.createLabel("Hello, World."));
  panel.add(app.createLabel("現在時刻: " + new Date()));
  app.add(panel);
  return app;
}

雑感

Google Apps Scriptは、今回初めて知ったのだが、かなり機能が豊富で、出来ることが多いのに驚いた。
多分VBAと比べると、関数の種類とかは少ないのだろうけど、Google Appsの各サービスや、メール、外部のWebサービスなど、様々なサービスと連携できる点は、かなり魅力的。
Google Apps Script以外に、Googleスプレッドシートを操作するプログラムを作る方法として、GoogleスプレッドシートAPIを使うという方法もある。でもGoogleスプレッドシートAPIだと、更新単位が行やセル単位で、単純な追加や変更、削除しかできなかったりする。その点、Google Apps Scriptだと、任意の位置での行やセルの挿入や変更、任意の範囲での値変更、カラムを指定しての行ソートなど、操作のバリエーションも多い。細かい操作をしたいなら、Google Apps Scriptの方が簡単そう。
Googleスプレッドシートにはフォームという機能があって、Webブラウザ上に表示したフォームから、データをスプレッドシートに追加することができる。このフォームとGoogle Apps Scriptを組み合わせれば、ちょっとしたWebアプリケーションを簡単に作れそうだ。このフォームを送信(データを入力)したタイミングでスクリプトを動かせば、データを加工してスプレッドシートに格納したり、外部のサービスにデータを送信することもできる。
Googleスプレッドシートを活用して様々なデータの管理や共有をしているなら、Google Apps Scriptは便利かもしれない。