MAGAZINE

ルーターマガジン

インフラ/運用

変更履歴が重くなったgoogleスプレッドシートから変更履歴を取り出す

2022.06.02
Pocket

googleスプレッドシートを長期運用で利用していると、変更履歴が蓄積され閲覧が困難になる事態が多々発生します。このページに辿り着いた皆さんは、確かにここに情報があるはずなのに…!と歯痒い思いをしたことでしょう。そんな皆さんを救うべくここでは、変更履歴が重くなったとしても実施可能な履歴の取り出し方についてご紹介いたします。

変更履歴の取り出し方

1. 履歴を閲覧したいスプレッドシートを開きURLを取得

スプレッドシートのURLは以下のような構造になっています。

例) https://docs.google.com/spreadsheets/d/BYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7/edit#gid=94993056

項目名箇所↑の例の中での値
スプレッドシートを示すID /d/の後ろの文字列BYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7
スプレッドシート内のシートを示すID#gidの値94993056

2. URLの「edit#」を「revisions/show?rev=1&」に置き換える

下記のようなURLをブラウザで開くと変更前の履歴のスプレッドシートを閲覧できます。

例) https://docs.google.com/spreadsheets/d/BYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7/revisions/show?rev=1&gid=94993056

3. URLの「rev=1」の数字の箇所を増やしたり減らしたりして見たい履歴を探す

履歴のURLでの「rev=1」が履歴番号となっており、これの数字を増やすほど最新のものに減らすほど初期状態のものになります。

ここまでのURLの文字列操作だけで、履歴番号を増やしたり減らしたりしながら探すことによって欲しい情報を得ることが出来ます。しかし重くなるほどの変更履歴はその数も膨大になるもの、必然的に変更日時や編集者の情報も一緒に欲しくなることでしょう。webブラウザやJSON、UNIX時間などに対する理解が必要となるため少しハードルが上がりますが、以下の手順でそれらのメタ情報の紐付けが可能となります。

履歴番号とメタ情報の紐付け方

1. トークンの取得

開発者ツールのコンソールで _docs_flag_initialData.info_params.token を実行、またはHTMLファイル内をtokenで検索するとscriptタグ内にヒットし「AC4w5VgdxgbrxfHpXYnHH*********R1t:1653894429706」のようなトークンが取得できます。

2. 履歴一覧のJSONを取得

元スプレッドシートのURLに対して以下2点を実施してJSON取得のURLを生成します。

  • 「edit」を「revisions/tiles」に置き換える。
  • URLクエリに以下の表の4つを用意する。

クエリ名説明値の例
idスプレッドシートを特定するIDBYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7
token↑の手順で取得したトークンAC4w5VgdxgbrxfHpXYnHH*********R1t:1653894429706
showDetailedRevisionsより細かい履歴を出力するtrue
start履歴番号の出力する開始位置1

これらの操作後のURLは以下のようなものになり、このURLをブラウザで開いて履歴一覧のJSONが取得できます。
https://docs.google.com/spreadsheets/d/BYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7/revisions/tiles?id=BYx17-5mRx1E6**********zsCJDUgz-zC7CZ6-AqNl7&start=1&showDetailedRevisions=true&token=AC4w5VgdxgbrxfHpXYnHH*********R1t:1653894429706

3. 履歴一覧のJSONを解析

履歴一覧のJSONには以下のような構造で履歴情報が入っており、各項目は下記表のようになっています。

{
  "start": 20,
  "end": 21,
  "endMillis": 1586920002608,
  "users": [
    "10012**********73751"
  ],
  "systemRevs": [],
  "expandable": false,
  "revisionMac": "lgGFARoDcjE7QA"
}

項目名概要
start 編集開始の履歴番号3
end編集終了の履歴番号13
endMillis編集終了時のUNIX時間1586919893345
users編集したユーザーのID["10012**********73751"]

編集したユーザーのIDは、同JSONの末尾に"userMap"が存在するのでこれと紐付けることで、編集者とユーザー名の紐付けができます。

"userMap": {
  "10012**********73751": {
    "name": "ルウ太郎",
    "photo": "//lh3.googleusercontent.com/a/AATXAJw9ty**********G1zU26k_SyLdPaJO1Swb2MHJ=s50-c-k-no",
    "defaultPhoto": false,
    "color": "#26A69A",
    "anonymous": false
  }
}

あとは、編集時刻や編集者で絞り込んで怪しそうな編集番号を割り出し、その前後の状態のスプレッドシートを確認しましょう。

終わりに

最後まで目を通していただきありがとうございます。本手順は弊社のWebクローリングスクレイピングの技術を用いて、googleスプレッドシートの履歴機能を解析し編み出したものとなります。いずれはGoogle社による改善が入ることを期待しますがそれまでは是非、本ページの手順をご活用ください。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから