Google Drive 上の文書をまとめて別アカウントへ移す方法
先日ちょっとした経緯から「アカウント A の Google Drive 上の Docs 文書・フォルダ群をまとめてアカウント B の環境へコピーするにはどうすればいいか?」というテーマに遭遇しました。次のみっつの条件つきです。
今回はこの話題について考えた内容と、道具として作成したコードを紹介します。
案1:ダウンロード&アップロード?
実現方法のひとつとしてまず考えられるのは、「アカウント A の文書を一旦まとめてダウンロードしあらためてアカウント B 環境へアップロードする」という手順です。しかし、アップロード後に共有設定やフォルダ構成を再現する手間を度外視したとしても、残念ながらこの方法は採用できません。なぜなら、現時点では Docs 文書をダウンロードする際には必ず所定の形式に「変換」する必要があり、この変換によって元の文書の書式が崩れたり情報の一部が欠落する可能性があるためです。この問題はブラウザインターフェイスのみならず Google の提供する API を利用しても同じです。
関連記事: Downloading a doc in native Google format - Google Groups
案2:リソースのコピーに共有を設定しそれを取り込めばいいかも?
そこで、冗長ではあるものの堅実と思われる次の手順を考えました。
1: アカウント A 側の操作
2: アカウント B 側の操作
一連の手順が終わった後でアカウント A の作った共有フォルダ F/ を削除すればコピー完了というわけです。これなら大丈夫でしょう。
手作業ではつらいので
ただ、今のところ Google Drive のブラウザインターフェイスにはフォルダをコピーする機能はありません。また、ブラウザ上の操作でコピーした文書に元の文書の共有設定は反映されません。そのため上述の「案2」を手作業でやるのは結構大変そうです。
それでもアカウント A とアカウント B のペアがひと組だけなら一度きりのことと割り切って我慢することもできなくはないでしょう。しかし、今回の話題にはこのペアが複数存在するという前提があります。そのためさすがに手作業での対応は大変なので、プログラムで自動化することにしました。
Windows アプリ版「GDMigrate」
まず作ってみたのは Google Drive & Google Docs 両サービスのクライアントとして動作する Windows 用のツールです。以前作成した「MyCloudFile」というアプリで Google Documents List API に触れていたため手早くこの API セットを使って実装し、ツールに「GDMigrate」と名前をつけました。GDMigrate の処理内容を図に示します。
この Windows 版 GDMigrate はひとまず期待通りに動作したのですが、次のふたつの点がひっかかっていました。
Google Apps Script 版「GDMigrate」
そこで、ウェブブラウザ上で開発・起動ができ、サーバサイドで動作する Google Apps Script (以下 GAS)に関心を持ちました。勉強をかねて試作した GAS 版の GDMigrate を公開します。使い方は以下の通りです。
※実行にはふたつの Google アカウントを使用します
※GAS の DocsList Services リファレンス を併読すればスクリプトの処理を追い易いでしょう
手順1:アカウント A での操作
アカウント A の Google Drive 上にある既存のリソース群の共有用コピーを作成する
手順1:アカウント B での操作
上記の「手順1」によってアカウント A から提供された共有リソース群をまとめてアカウント B の Google Drive 領域へ取り込む
以上でアカウント A からアカウント B へのリソース移管は終わりです。最後にアカウント A の Google Drive から「GDMIGRATE_SHARED_FOLDER」フォルダを削除すれば完了です。
以下に、アカウント A の一件の元文書での共有設定内容の例と、一連の操作を経てアカウント B 側で取り込みを終えた同文書の共有設定の状態を示します。オーナーがアカウント A からアカウント B に変わり、その他の共有設定は維持されています。
(tanabe)