森田 嶺

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみるサムネイル画像

弊社は Google Workspace を全社的に導入しており、社内外に関わる全ての業務の中心にこの Google のコラボレーションツールが存在すると言っても過言ではありません。業務を行う場合、 Google Workspace のツールを触らない日は存在せず、私たちにとっては絶対になくてはならないツールです。

おそらく、 Google Workspace を導入する多くの企業が同様の評価をしているのではないでしょうか。「企業がどれだけ Google Workspace を活用しているのか」を定量的に評価したい場合は、 Google Workspace のレポートログの活用がお勧めです。 Google Workspace には標準で BigQuery にログデータをエクスポートする機能が備わっているため、簡易にログデータの分析を行うことができます。

ところで、ログデータ以外の Google Workspace データを分析したい場合はどうしたら良いでしょうか。例えば、 Google ドライブのアイテムが保持するメタ情報等です。その場合は、エクスポート可能なサードパーティのサービスと契約する、もしくはインテグレーションが必要となります。

しかし、データ量がそこまで多くないことが保証されている場合は、とても簡易にデータをエクスポートする方法が存在します。それは Google Apps Script (以下 GAS )を活用する方法です。 GAS は Google が提供するローコードツールで、Webブラウザがあれば、誰でも簡単に JavaScript のコードを実行することができます。

今回は GAS を利用して、 共有ドライブの情報を BigQuery にエクスポート、データを分析する方法について解説します。

BigQuery とは何か

BigQuery は、Google Cloud Platform(GCP)上で提供されているフルマネージドのデータウェアハウスサービスです。数TBから数PBに及ぶ大量のデータを高速かつ簡単に分析することができます。基本的なSQLを用いてデータのクエリが可能であるため敷居も低く、インフラのセットアップやサーバーの管理が不要であることも大きなメリットです。

BigQuery の特徴

コストパフォーマンスに優れたフルマネージドサービス

前述した通り、 BigQuery はフルマネージドサービスであるため、企業は物理的なインフラストラクチャやサーバーの管理を気にする必要がありません。BigQuery は、使用した分だけ課金される従量課金制であるため、必要なリソースを必要な分だけ利用することができ、コストパフォーマンスに優れています。

大規模データの高速処理と豊富な分析機能

BigQuery は、数TBから数PBに及ぶ大量のデータを高速に処理することができます。BigQuery は、データを分散して複数のサーバで処理する分散処理方式を採用しています。これにより、大量のデータを一度に処理することができる仕組みを実現しています。また、Python、Java、JavaScript、Go 等のプログラミング言語向けに用意されているクライアントライブラリを使用して、 BigQuery  上のデータを操作することも可能です。

共有ドライブ とは?

共有ドライブ は、 Google Workspace 版 Google ドライブ の機能の一つで、グループでアイテムを共有するための機能です。共有ドライブ を活用することで、企業は部署やプロジェクト単位でファイルを管理することができるようになります。共有ドライブ はAPIも公開されているため、共有ドライブ の名称やID、その他メタ情報をAPI経由で取得することが可能です。

共有ドライブ の情報を BigQuery にエクスポートする手順

共有ドライブ のメタ情報を BigQuery にエクスポートする手順について解説します。前述した通り、 BigQuery へのデータのエクスポートには Google Apps Script を利用します。

① GCP プロジェクトを作成する

まずは GCP プロジェクトの作成をおこないます。既に GCP プロジェクトが準備できている方はこの章をスキップしてください。 GCP プロジェクトを新規で作成するためには以下の準備が必要となります。

  • Google アカウント( Google Workspace アカウント含む)
  • クレジットカード情報

準備ができたら、 Google Cloud Platform の公式ページにアクセスし、「無料で使ってみる」から、 GCP プロジェクト開通の手続きを進めてください。初めて利用する方には$300のクレジットがついてきますので、無償で GCP を試すことができます。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

② BigQuery でデータセットを作成する

開通が完了したら、 GCP の管理コンソールにアクセスし、左メニューの「 BigQuery 」をクリックします。クリックすると、「SQLワークスペース」画面がデフォルト表示され、 BigQuery のリソースが一覧表示されます。今回作成したGCPプロジェクトの右側にあるアイコンをクリックし、「データセットを作成」を選択してください。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

データセットの作成画面が表示されるので、各情報を入力し「データセットを作成」をクリックします。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

以下のようにデータセット配下に作成したデータセットがツリー上に表示されれば、作成は完了です。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

③ Google Bard を利用してベースとなる GAS コードを生成する

次に「 共有ドライブ のメタ情報を BigQuery にエクスポートする GAS プログラム」を実装します。と、その前に・・・皆さんは Google Bard をご存知でしょうか? Google Bard は Google が提供する大規模言語モデル「 PaLM2 」が搭載されたチャットベースのアプリケーションです。このツールを利用すれば、 GAS プログラムの大枠を自動生成することができます。例えば、以下のような指示を与えて、GAS プログラムのベースを作成します。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

Google Bard を駆使すれば、実装工数を削減することができますが、一つ注意が必要です。それは、 Google Bard に限らず、大規模言語モデルのアウトプットは必ずしも、確実性のある情報ではないというところです。ですので、あくまで Google Bard が実施してくれるのは「ベース部分の生成」であり、最終的なブラッシュアップは人間の手で行うことを前提で考える必要があります。だとしても、工数を大幅に削減できるので、それだけでも価値があると思います。

前置きが長くなりましたが、その上で作成したプログラムが以下となります。

const PROJECT_ID = 'xxxxxxx'; // GCPプロジェクトIDを設定
const DATASET_ID = 'gas_test'; // 先程作成したデータセットID
const TABLE_ID = 'shared_drive'; // データセット配下に作成するテーブルの名称

/**
* 共有ドライブ のメタ情報をBigQueryにエクスポートする
*/
function exportSharedDriveToBigQuery() {
    try {
       // データセット内にテーブルを作成する
       createTableInDataset();
     } catch (e) {
        throw new Error(e.message);
    }
    try {
       // テーブルに共有ドライブ のメタ情報をインサートする
      BigQuery.Tabledata.insertAll({'rows': getShareDrives()}, PROJECT_ID, DATASET_ID, TABLE_ID);
    } catch (e) {
        throw new Error(e.message);
    }
}

/**
* 共有ドライブ のメタ情報を取得する
*/
function getShareDrives() {
    // 共有ドライブ の情報を取得
    const drives = Drive.Drives.list({
         pageSize: 100,
         pageToken: null,
         fields: 'items(id,name,capabilities)'
     }).items;
    const shareDrives = [];
    for (const drive of drives) {
         shareDrives.push({
              json: {
              id: drive.id, 
              name: drive.name,               
              canChangeDomainUsersOnlyRestriction: drive.capabilities.canChangeDomainUsersOnlyRestriction,                            
              canChangeDriveMembersOnlyRestriction: drive.capabilities.canChangeDriveMembersOnlyRestriction,
              }
         });
     }
     return shareDrives;
}



/**

* データセット配下にテーブルを生成する
*/
function createTableInDataset() {
     const table = {
          tableReference: {
          projectId: PROJECT_ID,
          datasetId: DATASET_ID,
          tableId: TABLE_ID
          },
          schema: {
               fields: [
                   {name: 'id', type: 'STRING'},
                   {name: 'name', type: 'STRING'},
                   {name: 'canChangeDomainUsersOnlyRestriction', type: 'BOOLEAN'},
                   {name: 'canChangeDriveMembersOnlyRestriction', type: 'BOOLEAN'},
               ]
           }
     };

     // テーブルを作成
     BigQuery.Tables.insert(table, PROJECT_ID, DATASET_ID);
}

どのようなプログラムかと言うと、 BigQuery 上で作成したデータセット「gas_test」配下に「shared_drive」テーブルを作成し、そのテーブルに対して 共有ドライブ 情報をインポートしています。インポートする 共有ドライブ 情報は以下の通りです。

パラメータ
説明

id

共有ドライブ ID

name

共有ドライブ 名

canChangeDomainUsersOnlyRestriction

組織外のユーザーのみファイルへのアクセスを許可する(true: 許可しない/false:許可する)

canChangeDriveMembersOnlyRestriction

共有ドライブ のメンバーのみファイルへのアクセスを許可する(true: 許可しない/false:許可する)

では、次のステップでは、このプログラムを利用して、 共有ドライブ のメタ情報を BigQuery にエクスポートしてみます。

④  GAS コードを実行し 共有ドライブ 情報をインポート

GAS の画面にアクセスし、画面左上にある「新しいプロジェクト」ボタンを押下します。Code.gsが立ち上がったら、先程のコードを貼り付けます。適宜、固定値を修正したら、「実行」ボタンを押下してください。OAuth認証の画面がポップアップ表示されるので、承認し、プログラムを実行します。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

⑤ BigQuery で 共有ドライブ 情報の確認

GAS プログラムが正常終了したら、 GCP 管理コンソールから、 BigQuery の画面を改めて確認します。②で作成したデータセットの配下に「shared_drive」というテーブルが作成されていることがわかります。このテーブルを選択し、右ペインの「プレビュー」を押下します。すると、GAS でインポートされた 共有ドライブ のメタ情報が一覧表示されます。これで BigQuery へのデータのエクスポートは完了です。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

⑥ クエリを実行する

次は実際にSQLを実行してデータを操作してみましょう。同じく右ペインで「クエリ」ボタンを押下します。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

SQL入力のためのボックスが表示されたら、簡単なSQLを書いてみます。どんな内容かというと「社外共有が許可されている 共有ドライブ を一覧で取得する」ためのSQLです。「実行」ボタンを押下すると、想定通り、社外共有が許可された 共有ドライブ の一覧が表示されます。

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

以上で今回の内容は終了となります。ここからさらにデータを活用していきたい場合は、 Looker を使って 共有ドライブ の設定状況を可視化することも可能です。

まとめ

今回の内容を通して、GAS を利用すれば、 Google が提供する複数のサービスを統合し、独自の要件を備えたアプリケーションを簡易に実装できることを実感できたのではないでしょうか。 Google Workspace のサービスに限らず、 Google Cloud Platform のサービスも統合できるのは、 GAS の大きな強みです。 Google Cloud Platform にもサーバーレスで簡易にアプリケーションを公開できるサービスがいくつもありますが、小規模なアプリケーションを作成したい場合は、 Google Apps Script が最適です。しかも、 Google Bard のような無料で利用可能なツールを駆使することで、さらに開発工数を削減することができます。アイディア次第で GAS は今回紹介した内容以外でもいろんな場面で活用することが可能です。 GAS をフックに Google Workspace と Google Cloud Platform をフル活用していきましょう!

森田 嶺
森田 嶺
吉積情報株式会社 取締役 副社長。 大学卒業後、サーバーサイドエンジニア等の経験を経て、YOSHIDUMIに入社。Google ドライブ拡張サービス「Cmosy」「共有ドライブマネージャー」等、自社サービスの開発に従事。現在、 Gemini に関する記事を定期発信中! [Twitter] twitter.com/woods_field_man
<span id=GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる" loading="lazy">

14:00-15:00 オンライン

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

詳細はこちら

<span id=GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる" loading="lazy">

14:00-15:00 オンライン

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

詳細はこちら

<span id=GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる" loading="lazy">

14:00-15:00 オンライン

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

詳細はこちら

<span id=GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる" loading="lazy">

14:00-15:00 オンライン

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

詳細はこちら

<span id=GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる" loading="lazy">

14:00-15:00 オンライン

GAS でエクスポートした 共有ドライブ のメタ情報を BigQuery で解析してみる

詳細はこちら

オンラインセミナー開催中

お申込みはこちらをCheck!