【Googleドキュメント】Apps Scriptで複数アカウント間のドキュメント移行!Drive API連携

【Googleドキュメント】Apps Scriptで複数アカウント間のドキュメント移行!Drive API連携
🛡️ 超解決

複数の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のプロジェクトに設定します。手順は以下の通りです。

  1. Google Cloud Consoleで新しいプロジェクトを作成する
    ブラウザで console.cloud.google.com を開き、プロジェクトを選択または新規作成します。プロジェクト名は任意の名前で構いません。
  2. Drive APIを有効にする
    「APIとサービス」→「ライブラリ」から「Google Drive API」を検索し、有効にします。
  3. OAuth同意画面を設定する
    「APIとサービス」→「OAuth同意画面」でUser Typeを「外部」に設定し、必要な情報(アプリ名、サポートメールなど)を入力します。スコープの追加で .../auth/drive を選択します。
  4. 認証情報を作成する
    「認証情報」→「認証情報を作成」→「OAuthクライアントID」を選択します。アプリケーションの種類は「デスクトップアプリ」にし、クライアントIDとクライアントシークレットをメモします。
  5. Apps Scriptプロジェクトで認証情報を設定する
    Apps Scriptエディタの「リソース」→「Googleの拡張サービス」→「Drive API」をオンにします。次に「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にクライアントIDとシークレットを保存します。

移行スクリプトの作成と実行手順

準備が整ったら、実際にファイルを移行するスクリプトを作成します。以下のコードは、移行元の特定フォルダ内にあるすべてのGoogleドキュメントを、移行先アカウントの指定フォルダにコピーする例です。

  1. スクリプトエディタを開く
    Googleドライブで対象のフォルダを開き、「その他」→「Apps Script」を選択します。新しいプロジェクトが作成されます。
  2. コード.gsに移行関数を記述する
    以下のサンプルコードを貼り付けます。変数sourceFolderIddestFolderIdは実際のフォルダIDに置き換えてください。
  3. 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);
      }
    }
    
  4. OAuth2.0の認証コードを追加する
    他アカウントへのアクセスにはOAuth2.0認証が必要です。Apps ScriptにはOAuth2ライブラリが標準で用意されています。「リソース」→「ライブラリ」で 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF を追加します。以下の認証関数を追加します。
  5. 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.');
      }
    }
    
  6. 認証を実行する
    スクリプトエディタで関数getServiceを選択し、実行します。初回は認証URLがログに表示されるので、それをブラウザで開いて移行先アカウントでログインし、許可を与えます。するとトークンが保存されます。
  7. 移行関数を実行する
    関数migrateDocumentsを実行します。処理中は進捗がログに出力されます(必要に応じてconsole.logを追加)。完了後、移行先アカウントの該当フォルダにファイルがコピーされていることを確認します。

ADVERTISEMENT

移行時の注意点とよくあるトラブル

ファイル権限が引き継がれない

コピーしたファイルの共有設定は初期状態(非公開)になります。元のアカウントでの共有範囲を維持したい場合は、Drive.Files.copyメソッドでwritersCanShareviewersCanCopyなどのプロパティを個別に設定する必要があります。または、移行後に手動で権限を再設定してください。

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

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

SPONSORED