まえがき
ATOM開発担当の渡部です。
つい先日、私の所属するチームにもNotionが導入されました。
以前使っていたツールに比べ、軽量で、かつ多機能なところがとても気に入っています。
まだ試行錯誤段階で、どのように運用するのか、どのようなページデザインにするのか、など考えるのが楽しいです。
そこでNotionについて色々調べていたのですが、
いちエンジニアとしてはやはり「NotionAPI」でなんやかんやしたいと思いまして(笑)
そこで今回はNotionのデータベースの仕組みやAPIの仕組みについてまとめつつ、
Notionデータベースにレコードを作成を実際にAPIを実行して確認していきたいと思います!
対象となる人
- Notionをなんとなく使えているが、具体的な仕組みがまだ良くわかっていない方
- Notionデータベースってなんぞや?という方
- Notionデータベースと一般的なデータベースとの違いを理解していない方
Notionデータベース
Notionで特徴的な機能といえばデータベースですよね。
このデータベース、一般的に言われているMySQLとは違い、レコードやカラムという概念がございません。
誤解を恐れずに言うと、レコードは「Notionページ」、カラムは「ページのプロパティ」になります。
ページとは
通常、Notionでページを作成すると以下のまっさらなページが作成されます。
一方、データベースから1行追加して詳細を開くと以下のプロパティ(画像でいうとStatus, Assign)つきのページが作成されます。
このプロパティは固定ではなく自由に追加したり削除したりできます。

どちらも同じページなのでD&Dでページをデータベースにいれることができます

プロパティとは
プロパティとはページの属性です。 例えば、タスク管理として使用したい場合はプロパティにステータスを追加してタスクの状況をもたせたりします。
ビューとは
ビューとはかんたんに言ってしまえば「データベースの見せ方」です。 これにより、テーブルで見せたり、Trelloのようなカンバン形式で見せたり、ガントチャートで見せたりすることができます。
データベース作成方法
データベースを作成する大まかな手順は「ビューを作成」し、「紐付けるデータベースを新規作成」します。
[ビューの作成] 新しいページを作成し、Database下の「Table」「Board」「List」「Timeline」「Calendar」「Gallery」いずれかをクリックします(ここではTableを選びます。)
[データベースを新規作成]
ビューにどのデータベースを紐付けるか選択するため、New databaseをクリック

これでデータベースが作成されました。
NotionAPIについて
前置きが長くなりました。 ここからAPIで実際にデータベースを操作していきます。
環境
今回はMacのターミナルでcurlコマンドでAPIを呼び出します。 Windows環境の場合はコマンドプロンプトやPowerShell、WSLでも可能です。
公式ドキュメント
やはり大事なのは公式ドキュメントです。
こちらを参考に各APIを実行していきます。
https://developers.notion.com/reference/intro
仕組み
NotionAPIを使用するためには、インテグレーションを追加してAPIキーを発行するか、OAuth認証を行うか2種類の方法が用意されています。
今回は1のインテグレーションを追加する方法で行います。
https://developers.notion.com/docs/authorization#integration-types
Integration types

認証後、APIが有効になりデータの送信や受信をJSON形式でやりとりすることができるようになります。
ハンズオン
APIキーの発行
インテグレーションを追加する
「https://www.notion.so/my-integrations」にアクセスします

インテグレーション名およびワークスペースを選択します。その他細かい権限を設定できますが、今回はそのまま。

トークンをコピーする(Showをクリック後、Copy)

テストで使用するDBを作成
1. ページの作成からテーブルを選択

2. New databaseをクリック

3. プロパティを追加する。今回は「ステータス」を追加する

4. データベースページのURLから「{{database_id}}」の部分をコピーする
https://www.notion.so/{{database_id}}?v=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5. shareをクリックして共有オプションを表示

6. 入力欄をクリックして共有設定追加画面を表示, 上記で追加したインテグレーション「DatabaseTest」を選択

7. inviteをクリックして共有を完了させる。これによりこのdatabaseを発行したトークンで操作できるようになります。
ためしにデータベースに1レコード(ページ)を追加してみる
参考ドキュメント: https://developers.notion.com/reference/post-page
データベースに1行追加する場合、ページ作成APIを使って作成する。
ページ作成と気づかず、データベースへのレコードInsert方法を30分ほど探し回っていました・・・
curlリクエスト
curl -X POST https://api.notion.com/v1/pages \
-H "Authorization: Bearer {{発行したトークン}}" \
-H "Content-Type: application/json" \
-H "Notion-Version: 2022-02-22" \
--data '{
"parent": { "database_id": "{{上記でコピーしたdatabase_id}}" },
"properties": {
"Name": {
"title": [
{
"text": {
"content": "テスト投稿してみる"
}
}
]
},
"ステータス": {
"rich_text": [ {
"text": {
"content": "未着手"
}
}
]
}
}
}'
結果
無事、追加されましたね!

まとめ
今回はcurlでのAPI実行方法を例に上げましたが、
curlで直接実行するのはわりと手間なので、プログラムを書いてAPIにアクセスするのが良いかなと思います!
Google App Scriptで各Googleツールと連携するもよし、
AWSのlambdaなどを使って定期実行するもよし、
APIを使えば、実質使い方無限大ですよね!
以上、NotionAPIでデータベースをいじる方法でした!