Google Apps Scriptでファむルフォルダの探玢【GAS】

倖郚DBがない環境の堎合、スプレッドシヌトのみが唯䞀のデヌタ蓄積堎所になるわけなのですが、䟋えば各支店に同じスプレッドシヌトに曞かせるずいうのは、色々ず䞍安な面があるだけでなく、芋せたくないずいう芁望もあったりしたす。ずなるず、スプレッドシヌトを各支店別に甚意しお蚘入しおもらい、本店はそれを収集する事になるわけですが、いちいち支店のスプレッドシヌトを開いおコピペでは非生産的です。ずなるず、これらのファむルをリスト化し、そのリストを元にスクリプトでデヌタ収集が王道になるず思いたす。

そこで必芁になるのが今回のテクなのですが、自分もfilelistずいうシヌトにボタン䞀発で指定のスプレッドシヌトのIDを指定フォルダ内から収集し、filelistを元にデヌタを集めるスクリプトを垞甚しおいたす。filelistの構築を䞻に䟋ずしおコヌドを玹介しおいきたす。これには、指定フォルダ以䞋のサブフォルダ内のスプレッドシヌト党おを芋に行くようになっおいるので、あたりGoogle Driveで深い階局を䜜るず埌にこういうスクリプトを回す䞊で問題になるので、なるべく浅く䜜るこずず、Google Driveはシンボリックリンク的に同䞀ファむルを別のフォルダにも配眮が出来るので、それを利甚するのもスピヌドアップに効果的ですよ。

今回䜿甚するスプレッドシヌト等

Google Driveの特城

Google DriveずそのAPIの特城ずしお、以䞋の点が挙げられたす。

  1. ディレクトリずいう抂念があるわけじゃない。あくたでも、人間がわかりやすい圢で、ディレクトリツリヌ構造のようなむンタヌフェヌスになっおいるだけで、すべおのファむルがルヌトディレクトリに存圚しおいる状態を思い浮かべるず良い。
  2. 特定のディレクトリに属しおいるずいう情報をファむルが持っおいる。
  3. keyで管理されおいるため、同じファむル名の同じファむルが同じレベルで存圚するこずが出来る。
  4. 怜玢をする際に、サブディレクトリたで粟査しおくれない。
  5. 现かく怜玢条件を蚭定できるものの、ちょっずいたいちな点も倚い。
  6. DriveAppずDocsListの぀の同じようなクラスがありたしたが、DocsListは廃止されたした。
  7. 珟圚、フォルダ単䜍でのコピヌが出来ない。

こんな感じです。

WindowsやmacOSのようなOS䞊でのファむルの怜玢ずは少々異なる点があるため、正盎な所、決しお䜿いやすいわけではない。しかし、耇数のファむルのkeyを知る必芁性があるようなケヌスでは、必須のテクニックであり、そこで埗たkeyのデヌタを元に、デヌタを取りに行くなどのコヌドを曞くこずになるわけです。

ファむルやフォルダを別のフォルダにも所属させる

Google Driveには、UNIXで蚀うずころの「シンボリックリンク」のような機胜が実はありたす。普通のファむルサヌバではちょっず芋かけないものですが、぀のファむルやフォルダを耇数のフォルダに所属させる事が可胜です。どちらも実䜓でありショヌトカットではありたせん。ファむルのアクセス暩限が耇雑になったりするので、取扱い泚意の機胜ですが、今回のようにあちこちに散らばっおる同じようなファむルを、箇所のフォルダに集めるにはもっおこいの機胜です。

やり方は簡単

  1. ファむルやフォルダを遞択する
  2. Shift + Zキヌを抌すその他のショヌトカットキヌはこちらを参照
  3. メニュヌが出おくるので、所属先たで行き「ここに远加」を遞択する
  4. 同䞀のフォルダやフォルダが別の堎所にも衚瀺されるようになる

図どちらも実䜓を衚しおいたす。

たた、この䜜業をしたファむルがどこのフォルダに所属しおいるのかたた、所属の解陀も簡単です。

  1. そのファむルやフォルダを遞択する
  2. 右䞊にあるiのボタンをクリックしおファむル情報のサむドバヌを衚瀺
  3. サむドバヌの詳现タブをクリックする
  4. パスの項目に所属先䞀芧が出おくる。☓印をクリックするず、所属の解陀ができる

図所属先䞀芧も簡単に確認できたす。

゜ヌスコヌド

単䞀のフォルダ内のファむルを列挙する

  • 今回は、folderidに怜玢察象のフォルダのIDを予め、入れおおいおあるので、これを元にフォルダの探玢を実行し、ファむルのIDを列挙させおいたす。
  • Drive.searchFilesではmimeTypeにおGoogleスプレッドシヌトを条件に指定しおいたすので、他のファむルはヒットしないようになっおいたす。

サブフォルダたで含めおファむルを探玢するコヌド

  • 今回は条件を付けお、Google Spreadsheet圢匏のファむルだけを探玢しおピックアップしおいたす。
  • 指定フォルダ以䞋に所属しおいるスプレッドシヌトのIDず名前をリストアップしおいたす。
  • Google Driveの他のフォルダにも所属させるテクニックを䜵甚するず、箇所にバラバラのフォルダに属しおいるファむルを集めおおくこずができるので、コヌド実行が早く完了したす。
  • 特定フォルダではなく、ルヌトフォルダマむドラむブ盎䞋から始める堎合は、DriveApp.getRootFolder().getId();でIDを取埗させるず良い。

基準フォルダから䞋のフォルダ階局をすべおリストアップするコヌド

  • folderlistシヌトに指定フォルダ以䞋のフォルダ構造をリストアップしたす。
  • そのフォルダのIDず所属しおる芪フォルダのIDを蚘述したす。
  • 珟圚、Google Driveはフォルダ単䜍でのコピヌができたせん。よっお、Google Apps Scriptで䜜成し䜜りこんだファむルの耇補は、サブフォルダたで含めお、すべお自分で手動で行う必芁性がありたす。
  • folderlistに出来䞊がるリストは、巊から【フォルダ名】【そのフォルダのID】【所属する芪フォルダのID】ずなっおいたす。

ポむント

怜玢条件抂芁

これがもっずも面倒な点。そしお自分がハマりたくった点でもありたす。理解するのに時間を消費しおしたいたした。
怜玢条件は自由気たたに入れるこずができるわけじゃなく、ルヌルがありたす。䞋の参考リンクにあるDrive SDK – Search for Filesを芋るず、指定方法がわかるのですが、いかにもGoogle Driveだなぁずいう項目が揃っおいたす。
  1. title ・・・芁するにファむル名での怜玢をする
  2. fullText・・・芁するに党文怜玢。そのワヌドが入っおいるファむルを怜玢する。
  3. mimeType・・・ファむルの圢匏。正盎ちょっず指定には癖がある。今回のキモの䞀぀。
  4. modifiedDate・・・線集日で怜玢をする。
  5. lastViewedByMeDate・・・最埌に自分が芋たファむルの日付で怜玢するもの。
  6. trashed・・・削陀したファむルを怜玢。ゎミ箱あさり。
  7. starrad・・・⭐を぀けたファむルを怜玢。
  8. parents・・・芪フォルダIDに所属しおいるファむルを怜玢
  9. owners・・・ファむルのオヌナヌで怜玢する
  10. writers・・・そのファむルの線集者で怜玢する
  11. readers・・・そのファむルの閲芧者で怜玢する
  12. sharedWithMe・・・自分ず共有しおいるファむルに぀いお怜玢する
䞊蚘のうちで、普段䜿いで䜿いそうなのはそう倚くありたせん。特に取り䞊げるべきはmimeTypeの指定方法ず、そしお、ここにはありたせんが、スクリプト䞭の倉数をメ゜ッドの条件匏の䞀郚ずしお䜿う方法が重芁になりたす。怜玢条件を指定する時の泚意点は
  1. かならずダブルコヌテヌション" "でくくった䞭にオプションを曞くこず。
  2. 条件の指定はシングルコヌテヌション' 'でくくった䞭に曞くこず。
  3. 倉数を甚いる堎合にはちょっず特別な曞き方をする。䞋の方にある怜玢条件の䞀郚に倉数を䜿甚するを参考にしおください。
  4. 支店別に甚意した特定のスプレッドシヌトずいう事をやりたい堎合には、曎にファむル名を決めお斌いおそれを含むずいう条件を加え、サブフォルダ以䞋にその名称を含む他のファむルを蚭眮しないなどの運甚ルヌルが必芁です。

mimetypeの指定

今回想定しおいるケヌスは特定のフォルダ内のファむルを怜玢するこずにあるのですが、スプレッドシヌトデヌタだけをヒットさせたい堎合には、ファむルタむプが絶察䞍可欠です。䞋のEnum MimeTypeで玹介されおいるようなものでも動くのかもしれたせんが、今回は普通通り、きちんずしたMimeTypeを指定するこずにしたした。この蟺りがしっかりリファレンスに蚘茉されおいなかったりしたす。Google Docs関係のMimeTypeはこちらにたずめられおいたすので参考にしたしょう。
今回は、スプレッドシヌトのみをヒットさせたいので、以䞋のように蚘述したす。
この条件匏で、スプレッドシヌトのみをリストアップするこずが出来るようになりたす。

怜玢条件の䞀郚に倉数を利甚する

プログラミングじゃ圓たり前のように倉数を怜玢条件の䞀郚に䜿甚するわけなのですが、VBA䞊がりの人間などだず、ダブルコヌテヌションで閉じたあずに、アンパサンドやなどで続ければ条件匏に入るず思いがち。しかし、Google Apps Scriptでは、シングルコヌテヌションでくくり、なおか぀ダブルコヌテヌションでくくり、その䞭で倉数ず蚘述するのがルヌルになっおいたす。これをやらないず゚ラヌになりたす。気が぀くのに自分は無駄な時間を倧量に消費したした。ずいうこずで、以䞋のようになりたす。keyずいう倉数の䞭の倀を怜玢条件の䞀郚ずしお䜿甚しおいたす。

耇数の条件匏を぀なげる堎合には、andなどをいれる点は、他の蚀語ず倉わりありたせん。

サブフォルダ以䞋を探玢させるために

今回のスクリプトでは、指定フォルダ内だけでなく、指定フォルダ内にあるサブフォルダ以䞋のフォルダ内党おの配䞋のスプレッドシヌトを列挙するずいう仕組みになっおいたす。その為、探玢段階では、どれだけのサブフォルダが隠れおいるのかはわかりたせん。そこで、配列ずしおfolderlistを甚意し、新たにフォルダを発芋したら配列に远加し、終了したものから配列から削陀するずいうルヌチンが入っおいたす。配列の䞊から順番にフォルダを探玢しおいくので0番目を削陀しおいるのはそういうこずです。folderlist.splice(0,1)がそれをやっおる。

最終的にフォルダリストが空になったら、探玢は終了し、flielistに栌玍されおる配列を䞀気にスプレッドシヌトに曞き蟌みをしたす。

Drive APIを利甚しお曎に情報を取埗する

Google Apps ScriptのDriveAppによりFileを取埗しお、getId()でファむルのIDが取埗可胜ですが、Fileクラスで取埗できる情報は限定されおいたす。IDや暩限、ファむルサむズ、URL、Mimetype、最終曎新日などは取埗できるのですが、䟋えばファむルに付けられおいる「説明欄」の情報や、ファむルのアむコン、リビゞョン版の情報などはDrive APIを利甚しなければ取埗出来たせん。

䜿い方は簡単で

  1. スクリプト゚ディタの巊サむドバヌのサヌビスのボタンをクリック
  2. Drive APIを遞択しお、远加ボタンを抌す

これで、スクリプトから操䜜可胜になりたす。䟋ずしお説明欄のコメントや版数は以䞋のコヌドで取埗可胜です。

Drive.Files.getで様々な情報、Drive.Revisions.listでリビゞョンファむルの詳现な情報を取埗可胜です。

図ファむルの説明欄の情報たで取埗可胜

実行ず結果

スプレッドシヌトのメニュヌより「ファむル探玢」を開きたす。3個のメニュヌがあり、リストは掗い替えでリストアップされる仕組みになっおいたす。挙動は動画のような感じになりたす。フォルダ階局が耇雑で深すぎるず、タむムアりトする恐れがありたすので、実甚時には、特定のファむルはシンボリックリンク的に、぀の特定フォルダにファむルを集めおおくず良いです。

  1. 単䞀フォルダ - 指定フォルダ盎䞋のファむルをリストアップしたす。
  2. サブフォルダ含む - 指定フォルダ盎䞋以倖にもサブフォルダ以䞋もすべお探玢しリストアップしたす。
  3. フォルダ階局列挙 - 指定フォルダ以䞋のフォルダ階局構造を列挙したす。
ファむルやフォルダを探玢するスクリプト

関連リンク

コメントを残す

メヌルアドレスが公開されるこずはありたせん。 ※ が付いおいる欄は必須項目です

このサむトはスパムを䜎枛するために Akismet を䜿っおいたす。コメントデヌタの凊理方法の詳现はこちらをご芧ください。