複数のGoogleアカウントを使い分けていると、あるアカウントにあるドキュメントを別のアカウントに移行したい場面が出てきます。手動でダウンロードしてアップロードするのは時間がかかり、大量のファイルがあると現実的ではありません。そこで役立つのが、Apps ScriptとDrive APIを組み合わせた自動移行の方法です。この記事では、スクリプトを使って複数アカウント間でドキュメントを効率よく移行する手順を詳しく解説します。
【要点】Apps ScriptとDrive APIでアカウント間ドキュメント移行を自動化する方法
- Drive APIの有効化と認証設定: Google Cloud ConsoleでDrive APIを有効にし、OAuth2.0認証を設定することで、スクリプトから他アカウントのファイルにアクセスできるようになります。
- ファイル一覧の取得とコピー処理:
DriveAppクラスとDrive.Files.copyメソッドを組み合わせ、特定フォルダ内のファイルを一括で別アカウントのフォルダにコピーします。 - 権限とクォータの注意点: 移行先アカウントの編集権限やGoogle Driveの1日あたりのAPI呼び出し制限を事前に確認し、エラーを回避します。
ADVERTISEMENT
目次
Apps Scriptで複数アカウント間移行が可能な理由
Google Apps ScriptはGoogleのサービスを自動化できるスクリプト言語です。通常のDriveAppでは同一アカウント内のファイル操作に限定されますが、Drive APIを利用することで別のGoogleアカウントが所有するファイルにもアクセスできるようになります。具体的には、移行元アカウントでスクリプトを作成し、そのスクリプトに移行先アカウントのOAuth2.0トークンを発行させることで、両方のファイルシステムを操作できます。この機能により、数百のドキュメントを数回のクリックで移行できるようになります。事前に必要なのは、両方のアカウントのメールアドレスと、移行先フォルダのIDだけです。
事前準備: Drive APIの有効化とOAuth同意画面の設定
最初に、移行元のGoogleアカウントでGoogle Cloud Consoleにアクセスし、Drive APIを有効にします。続いてOAuth同意画面を設定し、スコープとしてhttps://www.googleapis.com/auth/driveを追加します。このスコープにより、スクリプトが他アカウントのファイルを読み書きできるようになります。最後に認証情報(クライアントIDとクライアントシークレット)を作成し、Apps Scriptのプロジェクトに設定します。手順は以下の通りです。
- Google Cloud Consoleで新しいプロジェクトを作成する
ブラウザでconsole.cloud.google.comを開き、プロジェクトを選択または新規作成します。プロジェクト名は任意の名前で構いません。 - Drive APIを有効にする
「APIとサービス」→「ライブラリ」から「Google Drive API」を検索し、有効にします。 - OAuth同意画面を設定する
「APIとサービス」→「OAuth同意画面」でUser Typeを「外部」に設定し、必要な情報(アプリ名、サポートメールなど)を入力します。スコープの追加で.../auth/driveを選択します。 - 認証情報を作成する
「認証情報」→「認証情報を作成」→「OAuthクライアントID」を選択します。アプリケーションの種類は「デスクトップアプリ」にし、クライアントIDとクライアントシークレットをメモします。 - Apps Scriptプロジェクトで認証情報を設定する
Apps Scriptエディタの「リソース」→「Googleの拡張サービス」→「Drive API」をオンにします。次に「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にクライアントIDとシークレットを保存します。
移行スクリプトの作成と実行手順
準備が整ったら、実際にファイルを移行するスクリプトを作成します。以下のコードは、移行元の特定フォルダ内にあるすべてのGoogleドキュメントを、移行先アカウントの指定フォルダにコピーする例です。
- スクリプトエディタを開く
Googleドライブで対象のフォルダを開き、「その他」→「Apps Script」を選択します。新しいプロジェクトが作成されます。 - コード.gsに移行関数を記述する
以下のサンプルコードを貼り付けます。変数sourceFolderIdとdestFolderIdは実際のフォルダIDに置き換えてください。 - OAuth2.0の認証コードを追加する
他アカウントへのアクセスにはOAuth2.0認証が必要です。Apps ScriptにはOAuth2ライブラリが標準で用意されています。「リソース」→「ライブラリ」で1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFを追加します。以下の認証関数を追加します。 - 認証を実行する
スクリプトエディタで関数getServiceを選択し、実行します。初回は認証URLがログに表示されるので、それをブラウザで開いて移行先アカウントでログインし、許可を与えます。するとトークンが保存されます。 - 移行関数を実行する
関数migrateDocumentsを実行します。処理中は進捗がログに出力されます(必要に応じてconsole.logを追加)。完了後、移行先アカウントの該当フォルダにファイルがコピーされていることを確認します。
function migrateDocuments() {
var sourceFolderId = '移行元フォルダID';
var destFolderId = '移行先フォルダID';
var files = DriveApp.getFolderById(sourceFolderId).getFiles();
while (files.hasNext()) {
var file = files.next();
var name = file.getName();
var blob = file.getBlob(); // バイナリデータを取得
// Drive APIで別アカウントのフォルダにアップロード
var metadata = {
'title': name,
'parents': [{'id': destFolderId}]
};
Drive.Files.insert(metadata, blob);
}
}
function getService() {
return OAuth2.createService('drive')
.setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
.setTokenUrl('https://oauth2.googleapis.com/token')
.setClientId(PropertiesService.getScriptProperties().getProperty('CLIENT_ID'))
.setClientSecret(PropertiesService.getScriptProperties().getProperty('CLIENT_SECRET'))
.setCallbackFunction('authCallback')
.setPropertyStore(PropertiesService.getUserProperties())
.setScope('https://www.googleapis.com/auth/drive')
.setParam('access_type', 'offline')
.setParam('prompt', 'consent');
}
function authCallback(request) {
var service = getService();
var authorized = service.handleCallback(request);
if (authorized) {
return HtmlService.createHtmlOutput('Success!');
} else {
return HtmlService.createHtmlOutput('Denied.');
}
}
ADVERTISEMENT
移行時の注意点とよくあるトラブル
ファイル権限が引き継がれない
コピーしたファイルの共有設定は初期状態(非公開)になります。元のアカウントでの共有範囲を維持したい場合は、Drive.Files.copyメソッドでwritersCanShareやviewersCanCopyなどのプロパティを個別に設定する必要があります。または、移行後に手動で権限を再設定してください。
1日あたりのAPI呼び出し制限に達する
Google Drive APIには1日あたりのクエリ数制限(デフォルトで10億クエリ/日)がありますが、実際はプロジェクトの使用量によって異なります。大量のファイルを移行する際は、Utilities.sleep()を挿入してレート制限を回避するか、複数日に分けて実行してください。
複製できないファイル形式がある
Googleドキュメント、スプレッドシート、スライドなどのネイティブ形式はDrive.Files.insertで変換せずにコピーされます。ただし、.gsheetや.gdoc以外のファイル(画像やPDFなど)はバイナリとして扱われるため問題ありません。Googleフォームは対応外のため、別途エクスポートが必要です。
手動移行とApps Script移行の比較
| 項目 | 手動移行 | Apps Script移行 |
|---|---|---|
| 所要時間 | 1ファイルあたり数分 | 一度の実行で数百ファイルを数秒 |
| 作業の手間 | ダウンロード→アップロードの繰り返し | スクリプト作成後はボタン1回 |
| ファイル形式の保持 | 変換される場合あり | ネイティブ形式を完全保持 |
| 共有設定の維持 | 手動で再設定 | コードでカスタマイズ可能 |
| エラーリカバリ | 途中で止まると再開が困難 | 例外処理を追加すれば自動リトライ可能 |
まとめ
Apps ScriptとDrive APIを連携させることで、複数アカウント間のドキュメント移行を完全自動化できることがわかりました。Google Cloud ConsoleでのAPI有効化とOAuth認証の設定が最初のハードルですが、一度仕組みを作れば繰り返し使えます。ファイルの権限設定やAPI制限に注意すれば、業務での大量移行にも対応できます。次のステップとして、このスクリプトをトリガーで定期実行するように拡張すると、常に最新のファイルを同期できるようになります。ぜひ実際にスクリプトを作成して、アカウント移行の効率化を体感してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
SPONSORED
Googleドキュメントの人気記事ランキング
- 【Googleドキュメント】音声入力が認識されない時の対処!マイク権限の確認
- 【Googleドキュメント】上付き・下付き文字の入力方法!ショートカットと手動切替
- 【Googleドキュメント】ルビ(ふりがな)を振る方法!代替ツールとアドオンの活用
- 【Googleドキュメント】縦書き表示を実現する方法!代替ツールと回避策
- 【Googleドキュメント】表内の文字を縦中央揃えにする方法!セル内配置
- 【Googleドキュメント】文字間隔(字間)を調整する方法!カーニングの代替手段
- 【Googleドキュメント】インデントを正確に調整する方法!ルーラーとタブストップの使い方
- 【Googleドキュメント】PDFからDocsへ変換する方法!OCR取り込みと精度
- 【Googleドキュメント】Docs→Wordへエクスポート!docx出力での書式維持
- 【Googleドキュメント】図表番号の自動採番!Figure 1, Table 2 の連番
