雑記‎ > ‎

Apps Scriptというもの

2012/04/04 2:31 に 福田正雄 が投稿   [ 2012/04/04 3:00 に更新しました ]
Apps Scriptというのは手っ取り早く説明するとGoogleドキュメントで使えるマクロである。(Microsoft Officeのマクロと同じ)
でも、Googleドキュメントだけでなく、別のAppsサービスにも使えるようにしようということで、Googleサイトでも使えるようになっている。
そしてApps Scriptは、なんとWebブラウザ上でデバッグすることができる!
この、「提供サービス間の垣根を取っ払おう」と「どんなサービスでもWebブラウザ上で提供しよう」という考え方はいかにもGoogleらしい。
普及するかどうかはともかくとして、Googleはこの姿勢を貫いてほしい。
 
閑話休題
今回、androidの野良アプリを公開するにあたって、Apps Scriptを使用した。というのは、apkファイルをandroid端末でダウンロードしただけでは不明なファイル扱いになり、拡張子がapkであってもインストールすることができない。(ファイルマネージャを使えば可能)
調べたところここに情報があり、要はHTTPヘッダのContent-Typeがapplication/vnd.android.package-archiveで送られてきた場合に有効なapkファイルとみなすということらしい。
そうなると、普通の考えだと「サーバ設定を変える」となるが、たまたま、GoogleサイトのApps ScriptにsetContentType()があったので利用できるのでは?となり、今回チャレンジしてみた。
結論をいうと「条件付きで成功」。条件というのはページにアップロードした添付ファイルならsetContentType()が有効。
こんな感じのApps Scriptを書いて実行すると、添付ファイルのバージョンが上がり、Content-Type: application/vnd.android.package-archive;で送信してくれる。
 var site = SitesApp.getSite("mysite");
 var pages = site.getChildren();
 var atts = pages[0].getAttachments();//[]内の数字を対象ページによって変える
 var att = atts[0].setContentType("application/vnd.android.package-archive");
だが、サイトにアップロードした添付ファイルにはsetContentType()を実行してもContent-Type: application/x-zip-compressed;のままである。
サイトにアップロードというのは、サイトを管理>添付ファイルからアップロードした場合を指す。つまり、以下のコードを実行しても無駄。
 var site = SitesApp.getSite("mysite");
 var atts = site.getAttachments();
 var att = atts[0].setContentType("application/vnd.android.package-archive");
これを実行すると、ファイルのバージョンが上がるので成功したように見えるが、この後にgetContentType()を実行するとapplication/x-zip-compressedのままなのが分かる。
自分は最初、こちらから始めたのでsetContentType()は未実装あるいは、ダウンロード時に動的に実行しないと使えない?と深読みしてしまい、多くの時間を浪費した。 サイトに添付ファイルをアップロードは、昔の名残で残っているだけで、今はページに添付ファイルをアップロードするのが標準だからこんな仕様になっているだろうと思うが、Developerマニュアルに書いてくれないとさすがにハマる。
最終的に良い結果になったからよかったものの、新しいものに首を突っ込むときは深読みせず、常識に囚われずにTRY&ERRORだなということを改めて実感する良い機会になった。(と無理やりポジってみる)
Comments