はじめに
今回は、kintoneとNotionをAPIで連携する方法を紹介します。
kintoneは柔軟性とカスタマイズ性が高く、他のサービスとの連携も容易です。
この記事では、kintoneのJavaScriptカスタマイズ機能を活用して、Notionからデータを取得する方法を解説します。
Notionの特徴と、連携のメリット
Notion
は、ノートテイキングやタスク管理、データベース管理など、多様な機能をもつワークスペースです。
ビジネスの現場で必要とされるさまざまなアプリケーションを簡単に作成、管理できるクラウドサービスのkintoneと、
Notionを連携することで、Notionに蓄積された情報をkintoneのアプリでも活用できます。
これにより、業務の効率化や情報共有のスムーズ化が期待できます。
kintoneとNotionの連携方法
kintoneのJavaScriptカスタマイズ機能を使うと、kintoneのアプリケーションに独自の機能を追加できます。
JavaScriptプログラミングによるkintoneのカスタマイズの概要
たとえば、特定の条件でフィールドの表示を変更したり、外部サービスとのデータ連携ができます。
また、Notionも、外部と連携するためのインターフェースとして、Notion APIを用意しています。
そこで、今回はJavaScriptカスタマイズを利用し、kintone側からNotion APIへリクエストすることによって、NotionのAPIと連携してみます。
今回のカスタマイズ例では、次の流れで行ってみましょう。
- Notionにデータベースを用意する。
- Notionに新しいインテグレーションを作成する。
- 作成したインテグレーションからデータベースへアクセスができるようにする。
- kintoneにアプリを作成する。
- kintoneにJavaScriptカスタマイズを適用する。
今回は例として商品管理アプリを作成し、Notion側にある商品リストをkintone側へ連携するようにしてみます。
1. Notionにデータベースを用意する
Notion側にデータベースを作成しましょう。
データベースの概要、作り方についてはNotionのヘルプページ
データベースの基本
を確認してください。
テーブルのプロパティは次のように設定してください。
| プロパティ名 | プロパティの種類 | 備考 |
|---|---|---|
商品名 |
タイトル | |
販売ステータス |
セレクト | 販売中 販売一時停止 販売終了を項目に設定 |
金額 |
数値 | 数値の形式に円を指定 |
詳細 |
テキスト |
2. Notionに新しいインテグレーションを作成する
kintoneからNotionのデータにアクセスするため、Notion APIを利用します。
そのための設定が必要ですので、
インテグレーション設定画面
を開き、新しいインテグレーションを作成してください。
基本情報を設定し、コンテンツの読み取り権限を付与してください。
最後にJavaScriptカスタマイズへ利用するため内部インテグレーションシークレットをコピーして控えておいてください。
インテグレーションの詳細については、ヘルプページ
Notion APIを使用したインテグレーションの作成
を参照ください。
3. 作成したインテグレーションからデータベースへアクセスができるようにする
インテグレーションは作成しても、最初はワークスペース内のどのコンテンツにもアクセスできません。
そのため、今回利用するデータベースで設定する必要があります。
1. Notionにデータベースを用意する で作成したデータベースのページ上で下記を行ってください。
- 右上の三点リーダをクリック
- 「接続先」をクリック
- 作成したインテグレーションをクリック
- ダイアログが表示されるので「はい」をクリック
これで作成したインテグレーションからデータベースにアクセスできます。
4. kintoneにアプリを作成する
今回は下記フィールドをもつアプリを用意します。
わかりやすくするためにここではフィールド名とフィールドコードは同一とします。
| フィールド名/フィールドコード | フィールドタイプ | 備考 |
|---|---|---|
商品名 |
文字列一行 | |
販売ステータス |
ドロップダウン | Notion側に合わせて販売中 販売一時停止 販売終了を項目に設定 |
金額 |
数値 | 桁区切りや単位記号の設定は任意 |
詳細 |
複数行文字列 | |
notion_id |
文字列一行 | Notion側との紐づけのために利用する。値の重複を禁止するをチェック |
5. kintoneにJavaScriptカスタマイズを適用する
JavaScriptカスタマイズのやり方の詳細についてはヘルプページ
JavaScriptやCSSでアプリをカスタマイズする
を参照してください。
https://unpkg.com/kintone-ui-component@1.16.0/umd/kuc.min.js- 今回はボタンの表示にkintone UI Componentを利用しますので、そのためのURLを追加します。
- Notion APIの下記コードを保存し、JavaScriptカスタマイズとして適用してください。
下記はご自身のNotionに合わせて書き換えてください。[YOUR_DATABASE_ID]: 今回作成したNotionのデータベースID。- たとえばブラウザーでデータベースにアクセスした時のURLが
https://www.notion.so/your_domain/f2d589bf26604ebe8cdccc3c6c9d0d6d?v=180a664ab56c41f4bf9049cc5c438284なら、f2d589bf26604ebe8cdccc3c6c9d0d6dがデータベースIDにあたります。
- たとえばブラウザーでデータベースにアクセスした時のURLが
[YOUR_INTEGRATION_SECRET]: 先ほど取得した内部インテグレーションシークレットです。
警告
内部インテグレーション等の秘密情報は、絶対に公開しないでください。
秘密情報が漏洩するとAPIを自由に実行できてしまうため、kintoneのJavaScriptの開発においても慎重に扱ってください。
cybozu develper networkでは、認証情報の秘匿にプラグインを利用する方法を推奨しています。詳しくは以下の記事を確認してください。
|
|
6. 動作確認
画像のように同期ボタンが表示されます。
クリックすることで、Notionとkintoneのデータ同期が開始されます。
コードの解説
上記コードにおけるポイントをいくつか解説します。
kintone UI Componentの利用
今回のサンプルでは同期ボタンにkintone UI Componentを利用しています。
|
|
|
|
kintone UI Componentの詳細については、
kintone UI Component v1
を確認してください。
この記事では説明を割愛します。
Notion APIとの通信
Notion APIはkintone外部のAPIなので、通信するためにkintone.proxy()を利用しています。
kintone.proxyの使い方や詳細については
外部のAPIを実行する
を参照してください。
|
|
また、Notion APIからは、どのようなレスポンスが返ってくるかなどはNotion APIのリファレンス
Query a database
を参照してください。
Notion側との同期
syncNotionToKintone()という関数を用意し、その中でUPSERT処理を行うようにしています。
UPSERTとは、レコードに値がなかったら登録、あったら更新するというような挙動をさします。
それを実現するために、レコード操作を一括処理できるBulkRequestを行っています。
Notion APIからは、データベースの各レコードにIDが付与されてきます。
それをキーとして、kintone側にもあるなら更新、なければ登録、というような処理にしています。
|
|
BulkRequestについては 複数アプリのレコード操作を一括処理する を参照してください。
kintoneイベントハンドラーの定義
今回はレコード一覧画面に同期ボタンを表示していますので、 レコード一覧画面を表示した後のイベント を利用します。
|
|
注意事項
- 提示しているコードはあくまで連携のサンプルなためNotion側、kintone側ともに100件までのレコード数を想定しており、それ以上のレコード数は想定しておりません。
- 今回利用しているNotion APIも一度に取得できるのは執筆時点で100件までとなっています。
まとめ
kintoneとNotionの連携は、ビジネスの効率化に大きく貢献します。
kintoneのJavaScriptカスタマイズ機能を活用することで、さまざまな外部サービスとの連携が可能になり、業務の幅が広がります。
この記事を参考に、ぜひkintoneとNotionの連携に挑戦してみてください!
このTipsは、2024年2月版kintoneで動作を確認しています。
