![見出し画像](https://assets.st-note.com/production/uploads/images/132878390/rectangle_large_type_2_f9dfe2938f73129c7ce1bcbf286de8f7.png?width=1200)
【Google Apps Script】Googleフォーム回答をNotionデータベースで管理する
はじめに
現代のデジタル化された社会では、情報の収集と整理は日々の業務において欠かせない要素となっています。特に、アンケートやフィードバックの収集には、Googleフォームが広く利用されていますが、収集したデータを効率的に管理し、活用するにはさらなる工夫が必要です。ここでNotionの出番です。Notionは、柔軟なデータベース機能と豊富なカスタマイズオプションを提供することで知られており、個人やチームのプロジェクト管理に最適なツールです。
実は、Googleフォームの回答をNotionに自動で転送するための便利なGoogleの拡張機能も存在します。たとえば、「Google forms to Notion」という拡張機能がありますが、これは有料で、月額$6のコストがかかります。
そこで、今回は、Googleフォームから収集したデータをNotionデータベースに自動で転送し、管理する方法を紹介しますが、Google Apps Script(GAS)を使用して、コストをかけることなく、このプロセスを自動化する方法に焦点を当てます。
このガイドは、特に以下のような方々におすすめです:
Googleフォームを使ってアンケートや調査を行い、収集したデータを効率的に管理したい方
Notionを使用してプロジェクト管理やデータ整理をしているが、データの自動インポートを実現したい方
プログラミングに少し慣れており、カスタマイズ可能な自動化ツールを探している方
このガイドでは、初めての方でもスムーズに設定を進められるよう、NotionでのAPIアクセス設定から、Google Apps Scriptのコーディングまで、ステップバイステップで解説します。また、このプロセスを通じて、日々の作業効率を飛躍的に向上させることができるでしょう。
1)Googleフォームの具体例
![](https://assets.st-note.com/img/1709649336689-DLQHG5hXHF.png?width=1200)
スプレッドシートにはこのように出力されているはずです。
これをもとに、新しい回答が届くたびに自動でNotionへ出力します。
![](https://assets.st-note.com/img/1709649375051-HAQAlrrbKs.png?width=1200)
2)スプレッドシートへの出力例
3)Notionへの出力例
![](https://assets.st-note.com/img/1709649435011-QSGgbh1XZn.png?width=1200)
![](https://assets.st-note.com/img/1709649459345-8LZYTHDG9b.png?width=1200)
それでは、早速設定方法をご紹介します!
ステップ 1: Notionの準備
まずは、NotionでのAPIアクセス設定と、データを収集するためのデータベースの準備をします。
1.1 Notion APIアクセスの設定
1)下記のURLから、私のインテグレーション(My Integrations)画面を開きます。https://www.notion.so/my-integrations
2)「+新しいインテグレーション(New integration)」ボタンをクリックします。
![](https://assets.st-note.com/img/1709530428667-p8EdNUVYBq.png?width=1200)
3)基本情報(Basic information)画面で名前をつけて、「送信(Submit)」をクリックします。
![](https://assets.st-note.com/img/1709533651668-fOhRFIqkDF.png?width=1200)
4)内部インテグレーションシークレットというのがとても大切な情報です。コピーして、記録しておいてください。
![](https://assets.st-note.com/img/1709533515256-vPUX4CTviR.png?width=1200)
Integrationの作成はこれで完了です!
1.2 Notionデータベースの作成
Notionアプリを開きます:Notionにログインして、新しいページを作成します。
データベースの作成:ページ内で「/」を入力し、「データベース」のオプションを選択してから、「テーブル」として新しいデータベースを作成します。フルページのデータベースまたはインラインのデータベースのいずれかを選択できます。
1.3 アクセス許可の付与
「…」をクリックし、コネクトの追加で、さきほど作成したIntegrationを選択します。続行するかどうかを確認するダイアログボックスが表示されますので、「はい」をクリックします。
![](https://assets.st-note.com/img/1709556903426-Q2I3I68hwe.png?width=1200)
これで、データベースに作成したIntegrationをコネクトすることができました!
1.4 Notionデータベースの設定
「…」をクリックし、ビューのリンクをコピーします。
![](https://assets.st-note.com/img/1709556939328-wicC4rf28D.png?width=1200)
ビューのリンクとはこんな感じです。
https://www.notion.so/abcdefghijklmnopqrstuvwxyz123456?v=************************
https://www.notion.so/のすぐうしろから、?v=の前の32文字がデータベースIDです。これもとても大切なので、記録しておいてください。
1.5 プロパティの設定
Notionデータベースで、Googleフォームの質問項目に合わせてプロパティを設定します。質問のタイプに応じて、以下のようにプロパティを設定します:
![](https://assets.st-note.com/img/1709649500216-Cc2DYbHqu7.png?width=1200)
1.5.1「記述式」や「段落」の質問(テキストプロパティ)
設定方法:Notionデータベースで新しいプロパティを追加し、「テキスト」タイプを選択します。プロパティ名は、質問内容に合わせて自由に設定します。
1.5.2 「ラジオボタン」・「プルダウン」(セレクトプロパティ)
設定方法:新しいプロパティを追加し、「セレクト」タイプを選択します。プロパティ名は質問内容に合わせて設定し、選択肢はGoogleフォームで指定したものと同じものを入力します。
![](https://assets.st-note.com/img/1709534532077-rEKaWMWPJL.png?width=1200)
1.5.3 「日付」(日付プロパティ)
・設定方法:新しいプロパティを追加し、「日付」タイプを選択します。
![](https://assets.st-note.com/img/1709649607626-iedSFPs8QH.png?width=1200)
※「時刻」について
Notionには、時刻のみを専用のプロパティとしてもつ機能がないため、テキスト形式で保存するのが適切であると考えられます。
1.5.4 タイムスタンプ
![](https://assets.st-note.com/img/1709556503822-UPvSMkChMM.png?width=1200)
一意性の確保: タイムスタンプは、各フォーム回答が記録された正確な日時を示します。これをタイトルとして使用することで、Notionデータベース内の各エントリーが独自の識別子を持つことになり、データの一意性が保証されます。
重複の防止: データをNotionに出力する際に、同じデータが誤って複数回転載されることを防ぎます。タイムスタンプを使って各エントリーを一意に識別することで、以前に転載したデータと新たに転載しようとしているデータを簡単に比較し、重複を避けることができます。
1.5.5 作成日時や備考欄
スプレッドシートには存在しない追加情報、例えば「作成日時」や「備考欄」などのプロパティを作成することも可能です。これにより、データの理解と管理がさらに向上します。
![](https://assets.st-note.com/img/1709556804241-aD0AaUPJNr.png?width=1200)
ステップ 2: Google Apps Scriptの設定
ステップ 2では、Google Apps Script (GAS) を用いてGoogleスプレッドシートとNotionの間でデータを自動的に転送するための設定を行います。このプロセスを通じて、Googleフォームからの回答がスプレッドシートに保存された際に、そのデータをNotionデータベースに自動的に追加することができるようになります。
2.1 Googleスプレッドシートでのスクリプトエディタの開始
スプレッドシートの開設: Googleフォームの回答が保存されるGoogleスプレッドシートを開きます。
スクリプトエディタにアクセス: メニューバーから「拡張機能」>「Apps Script」を選択します。
![](https://assets.st-note.com/img/1709530816689-u1yzfpsBND.png?width=1200)
2.2 スクリプトの作成と設定
新しいスクリプトの追加:
スクリプトエディタが開いたら、新しいプロジェクトが自動的に作成されます。
プロジェクト名を「Google Forms to Notion」など、分かりやすい名前に変更します。
コードのコピー&ペースト:
以下で紹介するGASの全てのコードをスクリプトエディタにコピー&ペーストします。
必要に応じて、スクリプトの内容をカスタマイズします。
![](https://assets.st-note.com/img/1709530774140-sFBMiUFvx1.png?width=1200)
2.3 スクリプトプロパティの設定
スクリプトプロパティの追加:
スクリプトエディタの左の方、プロジェクトの設定をクリックします。
![](https://assets.st-note.com/img/1709530888674-hpelfVyINg.png?width=1200)
このような画面になるので、下の方にあるスクリプトプロパティの追加をクリック。
![](https://assets.st-note.com/img/1709530889044-H3dQNShHR6.png?width=1200)
プロパティ名:NOTION_TOKEN には、ご自身の内部インテグレーションシークレット (1.1 Notion APIアクセスの設定 で取得したものです)を、 プロパティ名:NOTION_DB_ID には、ご自身のデータベースID (1.4 Notionデータベースの設定 で確認したものです。)をはりつけます。
![](https://assets.st-note.com/img/1709530888874-xDs5TXWnkA.png?width=1200)
2.4 コードのカスタマイズ
スプレッドシートの設定を確認: スクリプトが正しく動作するように、getSheetByName('フォームの回答 1')の部分をご自身のスプレッドシートの名前に合わせて変更します。
列のマッピングを調整: スプレッドシートのデータ構造に基づいて、generateNotionPageObject関数内の列のマッピング(例: timestamp, q1, q2, ...)を調整します。
2.5 スクリプトの実行とテスト
テスト実行: スクリプトエディタの上部にある「実行」ボタンをクリックして、addDataToNotion関数を実行します。
権限の承認: スクリプトを初めて実行する際には、Googleアカウントによる承認が求められます。画面の指示に従い、アクセス許可を与えます。
![](https://assets.st-note.com/img/1709557203498-Rz3fmoIY9B.png?width=1200)
2.6 自動実行の設定
トリガーの設定: スクリプトエディタのメニューから「トリガー」を選択し、「トリガーを追加」をクリックします。
トリガーの条件を設定: addDataToNotion関数を選択し、イベントのタイプを「スプレッドシートのフォーム送信時」など、希望するトリガーに設定します。
![](https://assets.st-note.com/img/1709520569604-9BoLYtsW2h.png?width=1200)
これで、GoogleスプレッドシートとNotionの間でデータを自動的に同期するための設定が完了しました。この自動化により、手動でのデータ転送作業を省き、効率的に情報管理を行うことが可能になります。
ステップ 3: スクリプトのカスタマイズ
3.1 Googleフォームの項目が変更された場合に必要なスクリプトの変更
ステップ 3では、Google Apps Script (GAS) スクリプトをカスタマイズし、Googleフォームの項目が変更された場合に対応する方法について詳しく説明します。
フォームの質問が変更されると、それに合わせて
・スクリプトのデータマッピング
・Notionデータベースのプロパティ設定
を更新する必要があります。
3.2.1 フォームの質問項目が追加された場合:
スプレッドシートの列が増える: Googleフォームに新しい質問を追加すると、関連するスプレッドシートに新しい列が自動的に追加されます。
スクリプトのデータ抽出行を更新: スプレッドシートからのデータ抽出を行う行を更新して、新しい質問のデータを含める必要があります。
// 例: Q8が新しく追加された場合
const [timestamp, q1, q2, q3, q4, q5, q6, q7, q8] = row;
インデックスの調整
スプレッドシートの右端にNotion出力済を確認するための列指定をしていますが、質問数に合わせてここも変更する必要があります。
// J列のインデックスは10(A=1, B=2, ..., J=10)
const outputColumnIndex = 10; // I列のインデックス
3.2.2 フォームの質問項目が削除された場合:
スプレッドシートの列が減る: 質問をフォームから削除すると、スプレッドシートの対応する列も削除されます。
スクリプトのデータ抽出行を更新: 不要になった質問の変数をデータ抽出行から削除します。
// 例: Q8が削除された場合
const [timestamp, q1, q2, q3, q4, q5, q6, q7] = row;
// H列のインデックスは8(A=1, B=2, ..., H=8)
const outputColumnIndex = 8; // I列のインデックス
3.3 テキスト型プロパティ(記述式・段落)のマッピング
Googleフォームからのテキスト回答をNotionのテキスト型プロパティにマッピングする場合、以下のようにデータオブジェクトを構築します。
マッピング例:
"プロパティ名": {
"rich_text": [
{
"text": {
"content": "ここにテキスト回答を挿入"
}
}
]
}
実際のコード例:
// Q1がテキスト質問の場合
"Q1": {
"rich_text": [
{
"text": {
"content": q1 // q1はスプレッドシートから取得したテキスト回答
}
}
]
}
3.4 セレクト型プロパティ(ラジオボタン・プルダウン)のマッピング
Googleフォームからの選択式(セレクト)質問の回答をNotionのセレクト型プロパティにマッピングする場合、選択したオプションの名前をselectオブジェクトのnameプロパティとして設定します。
マッピング例:
"プロパティ名": {
"select": {
"name": "選択したオプションの名前"
}
}
実際のコード例:
// Q4がセレクト質問(選択肢: 「はい」「いいえ」)の場合
"Q4": {
"select": {
"name": q4 // q4はスプレッドシートから取得したセレクト回答
}
}
"プロパティ名"はNotionデータベース内で設定した対応する質問のプロパティ名に置き換えます。"ここにテキスト回答を挿入"や"選択したオプションの名前"は、実際のスプレッドシートから取得したデータに基づいて動的に置き換えられます。
3.5 日付型プロパティのマッピング
実際のコード例:
"Q4": {
"date": {
"start": q4,
"end": null
}
},
全スクリプトの公開
以下は、Google Apps Scriptを使用してGoogleスプレッドシートのデータをNotionのデータベースに自動的に追加する全スクリプトとそれの解説です。上で説明したように、ご自身のフォームの内容、項目数にあわせて調整をしてみてください。
ここから先は
¥ 300
この記事が気に入ったらサポートをしてみませんか?