ADVERTISEMENT

【Googleドキュメント】Apps Scriptで変更履歴の取得!リビジョン情報の取り出し

【Googleドキュメント】Apps Scriptで変更履歴の取得!リビジョン情報の取り出し
🛡️ 超解決

Googleドキュメントで共同編集をしていると、誰がいつどのような変更を加えたのか知りたい場面があります。手動で履歴を確認することもできますが、頻繁に確認する必要がある場合は自動化したいものです。Google Apps Scriptを使えば、リビジョン情報をプログラムで取得することが可能です。この記事では、Apps Scriptを使用してGoogleドキュメントの変更履歴を取得する方法を詳しく解説します。

具体的には、リビジョンIDの取得、リビジョン一覧の取得、各リビジョンの詳細情報(日時、編集者など)の取り出し方を説明します。これらのテクニックを身につければ、ドキュメントのバージョン管理を自動化できるようになります。

【要点】Apps Scriptで変更履歴を取得する3つの基本操作

  • DocumentApp.getActiveDocument().getRevisionId(): 現在開いているドキュメントの最新リビジョンIDを取得します。簡易的な識別に使えます。
  • Drive.Revisions.list(fileId): 指定したファイルの全リビジョンの一覧を取得します。各リビジョンのIDやタイトルが含まれます。
  • Drive.Revisions.get(fileId, revisionId): 個別のリビジョンの詳細情報(作成日時、最終更新日時、編集者のメールアドレスなど)を取得します。

ADVERTISEMENT

Apps Scriptからリビジョン情報にアクセスする仕組み

Googleドキュメントは、変更が加えられるたびに自動的にリビジョン(版)を作成します。このリビジョンはDrive上で管理されており、Drive APIを通じてアクセスできます。Apps ScriptにはDrive APIを呼び出すための組み込みクラス(Drive)が用意されています。ただし、デフォルトではDrive APIは有効になっていないため、事前に設定を有効化する必要があります。また、アクセスするには適切なスコープ(権限)が必要です。スクリプトを実行する際に、https://www.googleapis.com/auth/drive.readonly などのスコープが自動的に要求されます。

リビジョンの取得には、主に次の3つのメソッドを使用します。

  • getRevisionId(): 現在のドキュメントの最新リビジョンIDを文字列で返します。ドキュメントオブジェクトから直接呼び出せます。
  • Drive.Revisions.list(): ファイルの全リビジョンをリストとして返します。ページネーションに対応しています。
  • Drive.Revisions.get(): 特定のリビジョンの詳細情報を取得します。戻り値は Revision オブジェクトです。

これらのメソッドを組み合わせることで、必要な変更履歴をプログラムで取り出せます。

変更履歴を取得する具体的な手順

ここからは、実際にGoogleドキュメント上でApps Scriptを実行し、リビジョン情報を取得する手順を解説します。

準備: Drive APIの有効化とスクリプトエディターの起動

  1. スクリプトエディターを開く
    Googleドキュメントを開き、メニューから「拡張機能」→「Apps Script」を選択します。新しいスクリプトエディターが表示されます。
  2. Drive APIを有効にする
    スクリプトエディターの左側にある「サービス」の「+」アイコンをクリックし、「Drive API」を選択して「追加」ボタンを押します。バージョンは「v3」を選びます。これで Drive クラスが使用可能になります。

コードの記述: リビジョン一覧を取得する関数

  1. 最新リビジョンIDを取得する関数を作成
    コードエディターに以下の関数を記述します。
    function getLatestRevisionId() {
    var doc = DocumentApp.getActiveDocument();
    var revisionId = doc.getRevisionId();
    Logger.log('最新リビジョンID: ' + revisionId);
    }

    この関数を実行すると、ログにリビジョンIDが出力されます。
  2. 全リビジョンのリストを取得する関数を作成
    以下の関数を記述します。
    function listRevisions() {
    var fileId = DocumentApp.getActiveDocument().getId();
    var revisions = Drive.Revisions.list(fileId);
    if (revisions.revisions && revisions.revisions.length > 0) {
    for (var i = 0; i < revisions.revisions.length; i++) {
    var rev = revisions.revisions[i];
    Logger.log('リビジョンID: ' + rev.id + ', 作成日時: ' + rev.createdTime);
    }
    } else {
    Logger.log('リビジョンがありません。');
    }
    }

    この関数を実行すると、すべてのリビジョンのIDと作成日時がログに表示されます。
  3. 特定のリビジョンの詳細情報を取得する関数を作成
    以下の関数を記述します。引数としてリビジョンIDを指定します。
    function getRevisionDetail(revisionId) {
    var fileId = DocumentApp.getActiveDocument().getId();
    var revision = Drive.Revisions.get(fileId, revisionId);
    Logger.log('リビジョンID: ' + revision.id);
    Logger.log('作成日時: ' + revision.createdTime);
    Logger.log('最終更新日時: ' + revision.modifiedTime);
    Logger.log('編集者: ' + revision.lastModifyingUser.emailAddress);
    Logger.log('サイズ: ' + revision.size);
    }

    この関数を実行する前に、リストから取得したリビジョンIDを引数として渡します。
  4. 関数を実行して結果を確認
    各関数を選択して実行ボタンを押します。初回実行時は権限の承認ダイアログが表示されます。承認後、ログに出力された情報を確認できます。

注意点とよくある問題

Drive APIが有効になっていないためエラーが発生する

「ReferenceError: Drive is not defined」というエラーが表示された場合、Drive APIが有効になっていません。先述の手順で、スクリプトエディターの「サービス」からDrive API(v3)を追加してください。

リビジョンが多すぎて一覧取得に時間がかかる

履歴の多いドキュメントでは、Drive.Revisions.list() の実行に時間がかかる場合があります。ページネーションに対応しており、デフォルトでは200件まで取得します。必要に応じて pageSize オプションを指定できます。また、終了条件を設定して必要な範囲だけ取得するよう工夫しましょう。

権限不足でリビジョン情報が取得できない

スクリプトを実行するアカウントにドキュメントの編集権限がない場合、リビジョンの取得に失敗します。ドキュメントの所有者または編集者であることを確認してください。また、スクリプトの承認時に要求されるスコープに https://www.googleapis.com/auth/drive.readonly が含まれていることを確認します。

ADVERTISEMENT

各メソッドで取得できる情報の比較

メソッド 取得できる主な情報
getRevisionId() 最新リビジョンID(文字列)のみ
Drive.Revisions.list() 全リビジョンのID、作成日時、タイトル、サイズなど(Revisionの配列)
Drive.Revisions.get() 特定リビジョンのID、作成日時、最終更新日時、最終更新者のメールアドレス、サイズ、エクスポートリンクなど

この表からわかるように、getRevisionId() は簡易的ですが、list()get() を組み合わせることで詳細な変更履歴を取得できます。

まとめ

この記事では、Google Apps Scriptを使用してGoogleドキュメントの変更履歴を取得する方法を解説しました。具体的には、現在のリビジョンIDの取得、全リビジョンのリスト化、個別リビジョンの詳細情報の取得方法を学びました。これらの関数を応用すれば、定期的に変更履歴を自動収集するスクリプトや、特定の編集者の変更のみを抽出する処理も実現できます。次は、トリガーを使って定期的に実行するスクリプトに発展させると、さらに便利になります。まずは上記の基本関数を試し、実際のドキュメントで動作を確認してみてください。


ADVERTISEMENT

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

超解決 第一編集部

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