【GAS】G-Driveにあるファイルのコピー・移動などを操作するスクリプト関連まとめ

エンジニア

Google app script(GAS)のマクロを作ろうと思ったら、G-Driveにあるファイルの操作は欠かせないと思います。(たぶん)

というわけで、本記事では、G-Driveにあるファイルをコピーしたり、移動したりするGASスクリプトの基本操作について、ソースコードを交えて紹介したいと思います。

ファイルのコピーにはmakecopyを使う

ファイルコピーで手っ取り早いのは、makecopyです。

G-Driveにあるファイルを指定したディレクトリにコピーすることができます。

ソースコードはこんな感じ。

事前に取得しておく必要があるのは、

・コピー元のファイルID
・コピー先のディレクトリID

の二点。

IDは、ブラウザのURL部分に表示される文字列なので、それをコピペしてくればOKです。

IDについて、詳しくは下記の記事にまとめています。

【GAS】G-DriveのファイルやディレクトリのIDはどこ? 答えはURLから目視で取得可能!

ファイルの移動にはaddFile・removeFileを使う

ある場所のファイルを別のディレクトリに移動させたい場合は、addFile・removeFileのメソッドを使いましょう。

ソースコードはこんな感じ。

上記では、移動前のディレクトリ、移動前のファイル名からファイルを移動させるようにしてますが、移動させたいファイルIDを直接指定してあげても、もちろんOKです。

操作したいファイルにアクセスする方法は色々とありますが、こちらの記事がわかりやすく、たいへん参考になりますので紹介します。

【参考】

▼Google Apps Scriptでファイル名、フォルダ名からファイルへアクセスしたい
https://qiita.com/tanaike/items/94c263d3906ee23ad522

また、ファイルオブジェクトでは、.nextをつけておくと、「未処理のファイル」を返してくれる意味があります。(逆に、.nextをつけないと操作できないので、一種のお約束と思って、つけておくようにしましょう。)

【重要】addFileだけ使うと・・・なんとショートカットコピーとなる

じつはaddFileだけ使ってファイルをコピーすると、コピー前のファイルとコピー後のファイルのIDは同じになります。つまり、ショートカットをコピーしたことになっており、これら二つのファイルは同じモノとなるのです。

・コピー前のファイル「A」
・コピー後のファイル「B」
⇒Bのファイルを編集した時、同じ内容の編集がAにも反映。(同期・共有した状態)
⇒G-drive上において、Bを削除するとAも削除されるので要注意。

そのため、以下のように覚えておくと良いです。

ショートカット(同期・共有)コピー:addFile
コピー:makecopy
移動:addFile + removefile

※addFileで同じファイルを複製して、removeFileで元のやつを削除。こうすることで移動と同義にさせています。(たぶんですが、GASでは、移動専用のメソッドっていうのは用意されていないみたいです。つまり、G-Driveでも移動をした際の内部処理はaddFileとremoveFileなのかもしれません。)

※G-Driveにて、あるファイルをctrl+shiftを押しながら別フォルダへドラッグアンドドロップすると、addFileの操作となります。(ショートカット作成)

ファイルを一括取得する方法もあり

先ほどの例では、ファイルを個別に取得して操作しましたが、特定ディレクトリにあるファイルをgetfilesでガバっと取得して、forやwhileなどの繰り返し関数で、順々にファイルの情報をゲットしていくという方法もあります。

getfilesを使うと、上記のように特定ディレクトリの中にあるファイルをガバっと取得することができます。ただし、イテレーターのままではファイル操作することができないので、forやwhileで順々に取り出していく必要があるわけです。

.hasNext()の意味は、「取得したファイル一覧のうち、まだ処理していないファイルがまだあるかどうかを判別」という感じです。なので、for文は、hasnext()が上限に達するまで、という動きをします。(たぶんwhile文を使った方が適正だと思います。)

なお注意点として、getfilesのメソッドでガバっと取得した場合、その取得したファイルの順番を指定できないという問題点があります。おそらく最終更新日順に取得してしまうようなので、もしもファイル名の順番でないとイヤだ!などの希望がある人は、別途、順番をソートするようにソースコードを準備してあげる必要があります。

【参考】

▼Google Apps Scrpt(GAS)で.getFiles()で取得したデータを並び替える
https://teratail.com/questions/117492

まとめ

GASでファイルのコピーや移動をする際は、makecopy、addFile、removeFileを抑えておけば、ひとまずOKかと思います。

マクロであれこれ自動操作して、GASライフを満喫してください!

最後に一言

VBAとは違うのですね。

この記事をSNSでシェアする?

【GAS】G-Driveにあるファイルのコピー・移動などを操作するスクリプト関連まとめ


  • 1
    このエントリーをはてなブックマークに追加
  • Pocket

PROFILE

yoshi

KIYOTATSU(キヨタツ)を運営しているウェブ制作者のYoshiです。過去、エンジニアの頃は、MATLAB/simulink/VBA/C/C++など扱っていました。生産管理、MECE、オブジェクト指向など、当時に得た知識はweb業界に入っても、かなり役立っています。