2013年8月13日火曜日

GoogleAppsScriptについて雑記1(ファイル・フォルダの管理)

もともとGoogleのサービスはそれなりに使っていたほうだが、今の客先でたまたま
GoogleAppsの検証を手伝う機会があり、そこで色々試しているうちに、Google Drive・Googleドキュメント、
そしてGoogleAppsScriptを深く知ることとなった。
まあその辺の細かい経緯はいずれ話すとして、今回はいきなりGoogleAppsScriptの中の機能の一つ、
ファイルやフォルダの管理するクラスについての雑記。




ファイルやフォルダを管理するクラスにDocsListDriveAppの2つがある。
DriveAppのほうが比較的新しくできたものでその機能は大体DocsListと同じ。
DocsListは元から存在するが、未だにExperimental。

リファレンス:DocsList - Google Developers
リファレンス:DriveApp - Google Developers


ただ違いはある。いくつか存在する中で、個人的にひっかかる違いが以下のもの。

ファイルを検索する手段

ファイルを検索する専用のメソッドが提供されている。なのでファイルの配列やイテレータをループで回して
いちいち条件判定・・・とせずともすぐにファイルをスクリプト上で検索できる。
DriveApp.searchFiles
高機能(検索条件を細かく指定できる。Drive SDKに準ずる。
DocsList.find
単機能(検索条件の仕様が未だに不明。ファイル名でヒットしていると思いきや、中身を見ていたりもする曖昧検索?)
ファイル検索に関してはDriveAppのほうが優秀。速度に若干の違いがあるが元々そんなに動作速度が速くないGoogleAppsScriptだ、
大して気にならないレベルの差である。ならばDriveApp.searchFilesを使ったほうが良いだろう。


フォルダを簡単に辿る方法

あくまで、簡単にフォルダをたどる方法である。普通にフォルダを取得したいなら
全てのフォルダを取得してからループで回してフォルダ名で判定すればよい。しかしそんなことはしたくないのは誰しも同じであろう。
DocsList.getFolder
フォルダパスを入れるだけで取得可能。 (例:Driveのルートを起点として、fooフォルダ内のサブフォルダbar内のサブフォルダabcを取得したい → getFolder("foo/bar/abc") とやればabcのFolderクラスがすぐに取得可能)
DriveApp
同等機能なし。DriveApp配下のFolderクラスが持っているのはgetFoldersとgetFolderByIdの2種類。 getFolderByIdなら一発で深い階層のフォルダも取得できるが、フォルダのIDを事前に覚えておかないとダメ。 (このメソッドはDocsListにもある) getFoldersはイテレータが返ってくるだけで、ループで回してやらなければならない。

今は深い階層のフォルダをすぐに操作したい時はDocsList.getFolderでパスを指定して取得する。
そのあとDriveAppでフォルダを扱いたければIDをDriveApp.getFolderByIdに渡してそちらで操作する。

もし、DocsListが廃止にでもなったらかなり不便になる。DocsListとDriveApp、機能が重複しているので
いずれどちらか一つに統一されるはず。(Drive SDKに準じているDriveAppが残る可能性が高いと思う)
できればDriveAppにgetFolderを実装して欲しいと思うところ。それまではどうかDocsListとDriveAppは共存してほしい。

まとめ

全体的な機能の豊富さでは間違いなくDriveAppが優勢。動作速度は0.0?~0.?秒のレベルでDocsListのほうが速い。
何回か検証済みだが、スピード命の処理なんてしない限りは気にならない。それと個人的にイテレータはあまり好きじゃないので、
FileやFolderの配列で返してくれるDocsListを使い続けたいと思うところ。
まあ、正直いってしまえば両方使えるうちは両方使えばいいってことか。
ただ気をつけたいのは、スクリプトをウェブアプリケーション的に公開した際には権限の許可を求める画面で
DocsListとDriveAppは別々の権限が求められる点に注意したい。片方で権限許可したからといって、
後からもう一方を使おうとすると次に実行する際にまた権限の許可を求める画面が表示されてしまう。
そのスクリプトを利用する第3者は一瞬?と思ってしまうので、開発する際には最初からどちらか(あるいは両方を)決めておきたい。

ちょい宣伝

GoogleAppsScriptを使っている方はまだまだ少ないかもしれないが、このスクリプト、超絶便利なのは確か。
クラウド型のグループウェアでユーザーにも簡単にカスタマイズや日常のちょっとしたツール作りをさせたいのであれば、
Office365よりもGoogleAppsのほうがはるかに簡単で便利、わかりやすい。
このスクリプトもVBA的なものと思ってもらえると、GoogleAppsとGoogleAppsScriptの関係性を理解しやすいと思う。
クラウドで(スクリプトでの)開発、起動~利用が全て済んでしまうのは魅力的。
このへんのちゃんとした紹介はいずれまた。

0 件のコメント:

コメントを投稿