【Googleドキュメント】Apps Scriptでドキュメントの差分比較!2つのリビジョン比較

【Googleドキュメント】Apps Scriptでドキュメントの差分比較!2つのリビジョン比較
🛡️ 超解決

Googleドキュメントのリビジョン履歴を見るとき、2つのバージョンを比較するのは手間がかかります。特に長文のドキュメントでは、どの部分が変更されたのかを目視で見つけるのは大変です。そこで便利なのが、Apps Scriptを使って自動的に差分を取得する方法です。この記事では、Drive APIを利用して2つのリビジョンの内容を比較するスクリプトを紹介します。スクリプトの書き方と実行手順を詳しく解説します。

【要点】Apps Scriptでリビジョン比較を自動化する3つのステップ

  • Drive APIを有効化する: スクリプトからリビジョン情報を取得するために、事前にAPIを有効にします。
  • リビジョン一覧を取得するスクリプト: 特定のドキュメントの全リビジョンを取得し、Revision IDを抽出します。
  • 本文を比較して差分を出力する: 2つのリビジョンの本文を取得し、テキストの差分を新しいドキュメントに書き出します。

ADVERTISEMENT

リビジョン比較にApps Scriptを使う仕組み

Googleドキュメントには「変更履歴」機能があり、手動でリビジョン間の差分を確認できます。しかし、大量のリビジョンがある場合や、特定のリビジョン間の差分だけをプログラムで取得したい場合は、Apps ScriptとDrive APIの組み合わせが便利です。Drive APIのRevisionsリソースを使うと、任意のドキュメントのリビジョン一覧や各リビジョンの内容を取得できます。この仕組みを利用して、2つのリビジョンのテキストを比較し、追加・削除された部分を自動で抽出します。

Apps Scriptでリビジョン比較を実行する手順

ここでは、2つのリビジョンを比較するスクリプトの作成から実行までを解説します。事前にGoogleドライブ上に比較したいドキュメントを用意してください。

  1. Google Apps Scriptプロジェクトを作成する
    比較したいドキュメントを開き、「拡張機能」メニューから「Apps Script」をクリックします。新しいスクリプトエディタが開きます。
  2. Drive APIを有効化する
    スクリプトエディタの左側にある「サービス」の「+」ボタンをクリックし、一覧から「Drive API」を選択して追加します。バージョンはv2またはv3を選びます。
  3. リビジョン一覧を取得する関数を書く
    listRevisionsという関数を作成します。この関数は、documentIdを引数に受け取り、Drive.Revisions.listメソッドを呼び出してリビジョン一覧を取得します。取得したデータはログに出力します。documentIdは対象のドキュメントIDです。URLの「/d/」と「/edit」の間にある文字列を指定します。
  4. リビジョンIDを確認する
    上記の関数を実行すると、ログにリビジョン一覧が出力されます。各リビジョンにはidというプロパティがあり、これがRevision IDです。比較したい2つのリビジョンのIDをメモします。
  5. 2つのリビジョンの本文を取得する関数を書く
    getRevisionContentという関数を作成します。この関数は、documentIdとrevisionIdを引数に取り、Drive APIのrevisions.getメソッドでリビジョンのエクスポートリンクを取得し、そのリンクからテキストデータをダウンロードします。リンクの取得には、revisions.getメソッドの引数にdocumentIdとrevisionIdを指定します。
  6. 差分比較を行う関数を書く
    compareTwoRevisionsという関数を作成します。この関数は、documentId、古いリビジョンID、新しいリビジョンIDを引数に取ります。内部でgetRevisionContentを2回呼び出し、取得したテキストを行ごとに分割して比較します。差分は追加行と削除行を分けて配列に格納し、結果を新しいドキュメントに書き出します。新しいドキュメントはDocumentApp.createメソッドで作成します。
  7. 関数を実行して結果を確認する
    すべての関数を保存し、compareTwoRevisions関数を選択して実行ボタンを押します。初回実行時は権限の承認が必要です。承認後、新しいドキュメントに差分が出力されます。

リビジョン比較スクリプト使用時の注意点

Drive APIの有効化を忘れてエラーが発生する

スクリプトエディタでDrive APIを追加しないと、「Drive is not defined」というエラーが出ます。手順2のサービス追加を必ず行ってください。

リビジョンIDの指定を間違える

listRevisions関数を実行してログに出力されるIDは、文字列です。コピー&ペーストする際に余分なスペースが入らないように注意します。

大量のリビジョンがある場合の処理時間

リビジョン数が多いドキュメントでは、一覧を取得するのに時間がかかることがあります。スクリプトの実行時間制限に引っかからないよう、必要なリビジョンのみを処理する工夫が必要です。

権限の承認が必要

初回実行時、スクリプトがドキュメントやドライブへのアクセスを要求します。内容を確認して承認してください。承認しないと実行できません。

ADVERTISEMENT

手動のリビジョン比較とApps Scriptの自動比較の違い

項目 手動比較(変更履歴) Apps Script自動比較
操作の手間 リビジョンを1つずつ開いて目視で確認 スクリプトを1回実行するだけ
比較できるリビジョン数 2つのみ(履歴上で選択) 任意の2つを指定可能
差分の可視化 Google標準の比較ビュー(色付き) 自作のスクリプト次第でカスタマイズ可能
自動化との連携 手動操作が必要 定期的な実行やトリガーと連携可能

まとめ

この記事では、Apps ScriptとDrive APIを使ってGoogleドキュメントの2つのリビジョン間の差分を自動比較する方法を解説しました。スクリプトを書けば、手動で目視確認する手間が省けます。特にバージョン管理が必要なドキュメントで重宝します。応用例として、特定の日時以降のリビジョンのみを抽出したり、差分をメールで送信する機能も追加できます。自分自身のプロジェクトに合わせてカスタマイズしてみてください。


ADVERTISEMENT

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

超解決 第一編集部

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

SPONSORED