2015年 AppsScriptの更新・流れまとめ

毎年恒例の埋まらないAdvent Calendar GAS Advent Calendarが始まりました。

今年も様々なGASのアップデートがあり、少しずつですが機能が追加されました。
ただ最近は公式サイトの[Release Notes](https://developers.google.com/apps-script/releases/)に更新情報が乗らず、ひっそりと機能が追加されていっているように思えます。

そこで今回は2015年であった更新をまとめて、個人的な考察ですが、GASの最近の流れをみてみたいと思います。


## まとめ

最初にまとめておくと2015年でGASは

* 機能やプラットフォームの提供がなくなり、自分で実装する部分が増えた
	* OAuth1認可機構の削除
	* ScriptDBの削除
	* UIAppの削除
* より開発者に扱いやすく、様々なサービス連携を行いやすくなった
	* HTMLService Iframeモード
	* Execution API
	* `Utilities.base64DecodeWebSafe`、`Utilities. computeRsaSha256Signature`追加による、他サービスとの連携性の強化
	* Advanced Google Servicesとしての連携Service追加
* Addon機能がより開発しやすくなり、提供しやすくなった
	* TESTモードの追加
	* Domain Wide installation


となりました。
私的な見解ですが流れとしては、プログラミング初心者やあまり開発経験のない人にはハードルが上がったように見えますが、開発を行ったことがある人にはより扱いやすい環境になっているように見えます。

以降は細かい更新を見ていきたいと思います。

## 2015/01

更新なし

## 2015/02

主にSpreadsheetのプロテクト系と、DocsListの廃止に伴う動きがありました。

* SpreadsheetAppにシートやRangeのプロテクト関連のメソッド群を追加 またそれに伴いもともとあった`PageProtection`メソッドが非推奨になった
	* `Range.canEdit()`や`Range.protect()`あたりが追加されました。
	* `Spreadsheet.getSheetProtection()`あたりが非推奨になりました。
* `DocsList`の廃止に伴い、`SpreadsheetApp.open(file)`で`DocsList.File`を渡すメソッドが非推奨になりました。
* `DocumentApp`の`Text.setFontFamily(fontFamilyName)`が`FontFamily` enumベースからString指定に変わりました。

## 2015/03

一番大きな更新は`OAuthConfig`が非推奨となり、廃止されることが決まりました。
結構大きい話だったのですが、古い記事などでは未だにOAuthConfigが使われており、結構混乱を招いたのを覚えています。

* `OAuthConfig`が非推奨に、廃止が決定
  * http://googleappsdeveloper.blogspot.jp/2015/03/changes-to-oauth-in-apps-script.html

* Addon周りでDomain Wide Installationが使えるようになりGoogle Apps for Workにてドメイン管理者が任意のAddOnを全員にインストールすることが可能に
	* https://developers.google.com/apps-script/add-ons/domain-wide
* Developer Console上のプロジェクトとのひも付けを変更することが可能に
	* https://developers.google.com/apps-script/guides/services/authorization#using_a_different_google_developers_console_project

## 2015/04

AddonがDeveloper Previewを卒業し、誰でも公開できるようになりました。
また密かにですが、非推奨となっていた`DocsList`が完全に廃止 利用不可能になりました。

またこの辺りからAdvanced Serviceの拡充が進んでいっています。

* AddOnがDeveloper Previewを卒業 誰でも公開可能に
	* http://googleappsdeveloper.blogspot.jp/2015/04/docs-sheets-and-forms-add-ons-now-open.html
* AddOnにテストモードが追加
	* https://developers.google.com/apps-script/add-ons/test
* `DocsList`が完全に廃止
* Advanced Serviceに幾つかのサービスが追加 主にApps系
	* Admin SDK Groups Migration service
	* Admin SDK Groups Settings service
	* Admin SDK License Manager service
	* Admin SDK Reseller service
	* Apps Activity service
	* DoubleClick Campaigns service
	* Google+ service

## 2015/05

見た目上の大きな更新はありませんが、Script Editor上でOAuthConfig周りが非推奨になったのはこのタイミングです。

ただGASを長くやっている方々向けには大きな更新があって、
`Utilities.base64DecodeWebSafe`が追加になり、今までBase64エンコード、デコードでめんどくさいことになっていた部分がかなり軽減されました。

* `OAuthConfig`などの`OAuth1`に関連するサービス軍が非推奨に
* `Utilities`クラスにWebSafeなBase64メソッドが追加
	* `Utilities.base64DecodeWebSafe`
	* `Utilities.base64EncodeWebSafe`
* `ScriptApp`にインストール元を判別するメソッド等が追加
	* `ScriptApp.getInstallationSource()`
	* `ScriptApp.getProjectKey()`
* `HtmlService`にUAを判定するメソッドが追加
	* `HtmlServicegetUserAgent()`

## 2015/06

これもあまり派手な更新ではありませんが、長くGASをやっている方々からすると、と言うか僕にとってはもっともと言っていい更新が来ました。
`Utilities`に`computeRsaSha256Signature`が追加され、RSA SHA-256による署名が可能になったのです。

例えばRSA SHA256の計算はGoogle APIの認証で利用されるService Accountではほぼ認証文字列を作成するには必ず必要で、結構連携する際には必要となる処理でした。

しかしもともとGASではRSAのSHA256の計算が公式には提供されておらず、
ブラウザや、NodeJS向けに作られた、外部ライブラリを利用する必要がありました。
ただそれらのライブラリは非常にGASで動かすには重く遅く全くと言っていいほど使い物にならなかったのです。

この更新によりRSA SHA256計算が高速に行えるようになり、
様々なシーンでRSA SHA256計算が可能になりました。
つまりはService Accountを経由した認証がGAS上で(利用可能なレベルで)可能になったのです。

このService Account認証については別日のAdvent Calendarで詳しく書きたいと思います。

* `Utilities`に`computeRsaSha256Signature`が追加

## 2015/07

多分更新なし

## 2015/08

GAS的には小さい更新のみ
でもGoogle DriveのWeb Hostingがストップして、
GAS API & Google Drive Hostingみたいな作りがダメな構成になったのが記憶的ですね

* `Service.enable()` が非推奨に
* Spreadsheetのプロテクションで警告ベースのプロテクションが可能に
	* `Protection.isWarningOnly()`、`Protection.setWarningOnly(warningOnly)`が追加
* Google Driveの Web Hostingが廃止決定
	* http://googleappsdeveloper.blogspot.jp/2015/08/deprecating-web-hosting-support-in.html



## 2015/09

以降Release Notesの更新が止まる。
Execution APIがリリースされ、外部アプリケーションからの連携が容易になりました。

* Execution APIリリース
	* http://googleappsdeveloper.blogspot.jp/2015/09/run-apps-script-code-from-anywhere.html


## 2015/10

HTMLServiceの`EMULATED`モードや`NATIVE`モードが廃止決定し、段階的に`IFRAME`モードに移行することになりました。

だんだん緩和する動きになって最終的にはフルオープンって感じですね。
Cajaの地獄がやっと終りとなりました。

* `HTMLService`の`EMULATED`、`NATIVE`モードが非推奨に
	* http://googleappsdeveloper.blogspot.jp/2015/10/google-apps-script-update-to-htmlservice.html

## 2015/11

目立った更新はなし。

## 時期不明

* ScriptEditorにてファイルの順番を見た目上変更可能に
* Gmail APIを利用したGmail Advanced Serviceが追加
	* https://developers.google.com/apps-script/advanced/gmail
* Classroom APIが扱えるClassroom Advanced Serviceが追加
	* https://developers.google.com/apps-script/advanced/classroom
* `HtmlService`に`setFaviconUrl`が追加Faviconが設定可能に
	* https://plus.google.com/u/0/+SteveWebster-gmail/posts/5ef3aFMRj3Z

* Script EditorでWeb公開する際にバージョンをその場で追加可能に

## あとがき

確実にGAS自体の更新はあり、また公式Blogに利用例のポストはあるなど、
終わる雰囲気は無いのですが、Release Notesの更新がなかったり、
ライブラリの追加などがメインでGASのそのものの更新が無いのが辛いところですねぇー

GASのユーザも非常に幅広くなってきた印象もあります。

日本においてはCharworksやSlack等の連携用や、BigQueryとの連携用などでの利用シーンをよく見るようになりました。

相変わらず日本語情報が少ない的なコメントも見ますが、
そもそも英語情報もそこまで多くないのです

というよりかGASが扱える幅が広すぎてやりたことにマッチした内容の記事が少ないってのもあるかもしれません。

来年もたくさんの更新があるといいですね