[自動化] GASでGoogle Drive上のデータをNotionに連携してみた

こんにちは。AMDlabの掛田です。

今回はGoogle Apps Script(以下GAS)を使って、

Google Driveのファイル一覧をNotion APIを用いてNotionのデータベースに登録することで、Google DriveにどういうファイルがあるかをNotion上で見られるようにしてみます。

今回の記事の使用ケースとしては、情報管理にNotionを使用していて、ファイル管理にGoogle Driveを使用している場合に、Notionに情報が集約されることで便利になる内容になっています!

GASでは書いたプログラム自体をバッチ処理のようなイメージで何時間おき、何分おきと実行間隔を設定できるので、

一定の間隔でプログラムを実行し、Google DriveとNotionにファイルデータの差分があれば自動でNotionに登録させる動きにします。

※今回はあくまでどういうファイルがあるかだけを登録するので、実際のファイルをみるときはNotionに登録するファイルのリンクからGoogle Driveを参照する必要があります。

GASとは?

Googleが提供しているプラットフォームで、JavaScriptベースで記述されたプログラムを手軽に実行できます。

また、GoogleドキュメントやGoogleスプレッドシート等のGoogleの各種サービスと連携するプログラムが作りやすいという特徴があります。

GAS上でプログラムを実行できるので、手元に開発環境を揃える必要はありません。

GASの事前準備

Google Driveにアクセスし、右上の「新規」ボタンを押すとメニューが出るので、

「その他 > Google Apps Script」を選択し、GASのプロジェクトを作成します。

必要な情報の事前準備

今回の記事のプログラムでは以下3種類の情報を事前に取得しておく必要があります。

  • Google DriveのフォルダID
  • Notion APIのシークレット
  • NotionのデータベースID

Google DriveのフォルダID

今回のプログラムの対象とするフォルダIDをGoogle Driveから取得したいので、

Google Driveで対象のフォルダを開きます。

URLをみてみると、URL後半のfolders/以降にランダムな文字列があり、これがフォルダIDです。

Notion APIのシークレット

添付の画像の手順でAPIのシークレットを作成し、取得します。

NotionのデータベースID

Notionで対象のデータベースをフルページで表示し、リンクを取得します。

リンクは以下のような形式で、手前のランダム文字列がデータベースIDです。

https://www.notion.so/{ランダム文字列}?v={ランダム文字列}&pvs=4

Notionの事前準備

先程フルページで表示していたデータベースのページで、ページ右上の三点リーダーからコネクトの設定をおこないます。

Notion APIを作成時に設定した名前が選択肢にあるはずなので、そちらを選択すると

Notion APIを用いてデータベースの情報を取得・登録がおこなえるようになります。

この設定を省いてしまうと、Notion APIをプログラムから使用してもエラーになってしまいます。

 

GASで書いたプログラムについて

Notion側のデータベースには以下のプロパティは2種類を用意しました。

  • ファイル名(プロパティ種別:タイトル)
  • URL(プロパティ種別:URL)

この2種類のプロパティを持つデータを1レコードとしてプログラムから登録できるようにします。

全体の流れ

  1. Google Drive上の特定のフォルダに入っているファイルを、子階層も含めて全て取得する(取得関数を再帰的に実行することで子階層も取得します)
  2. Notion上のデータベースに入っているファイルを全て取得する
  3. 1で取得したファイル一覧と2で取得したファイル一覧の中身を比較し、Notionのデータベースに未登録のファイルを抽出する
  4. 3で取得した未登録のファイル一覧をNotion APIでNotionのデータベースに登録する

実際のプログラム

関数は大きく分けて4つ作成しました。

  • myFunction()
  • getFilesRecursiveFromDrive(フォルダID)
  • getFilesFromNotion()
  • addFileToNotion(ファイル名, ファイルURL)です。

myFunction()をメイン処理とし、他の関数を呼ぶなど全体の流れを記述しました。

ほとんどはJavaScriptの構文ですが、GASではAPIのコールにはUrlFetchAppというクラスを使用するようでした。

Notion APIをコールする際にヘッダーに指定しているNotion-VersionはNotionのAPIバージョンの指定で、2022-06-28が現時点では最新のようです。

プログラムの実行タイミングを設定

GASの左のサイドバーからトリガー(実行タイミング)を設定できます。

今回は5分間隔でmyFunctionを実行するよう設定してみました!

 

 

……5分後

Notionにファイル情報が登録されていることが確認できました。

もっと欲をいうとNotionに登録する際にGoogle Driveのフォルダ構造を保ちつつ登録できたらベストなのですが、、、

締め

今回はGASでGoogle Driveのファイル一覧でNotionで見られるようにするプログラムを書いてみました。

GASでは他にもGoogleスプレッドシートやGoogleフォームなど連携できるサービスは多そうです。

アイデア次第でさまざまな使い方ができるので、Googleのサービスと連携しつつ自動で何かを実現したいときに選択肢の1つとして考えていただければと思います!

Tech
API
ARTICLES