🐡

[Notion] いま人気の Notion の API を試してみる

2022/02/08に公開

はじめに

いま人気のNotionを API から触ってみたので、簡単な備忘録としてまとめてみたいと思います。

TLDR

  • Notionとは
  • Notion API で何ができるの?
  • とりあえず Notion API を触れるようにしてみる

Notion とは?

みなさんは Notion を使っていますか?
私は副業や個人プランで利用しています。個人では普段の技術関連をメモ的に残していたりします。

Notionとは、2013年に設立されたドキュメント管理のSaaSです。

私が使っている理由はずばり「使いやすい」からです。
メモ帳のように使えるのはもちろん、簡単にテーブルやToDOリスト、さらにはGithubみたいなプロジェクトボードを一瞬で作れます。

簡単にドキュメントを作成できる使いやすさから、エンジニアのみならず、ビジネスドメインの方なども広く利用されている印象です。

なお、Notion は順調に成長しており、昨年には評価額100億ドル(1兆円)に到達しているようです。
https://newspicks.com/news/6261305/body/

Notion API で何ができるの?

そんな Notion は昨年にバブリックベータ API が公開されました。
これを利用することで更なる作業効率化を図ることができるかもしれないと思い、試してみました。

なお、現在公開されている Notio API はあくまでもバプリックベータ版であり、機能はかなり制限されている印象です。
2022/8/1現在では、APIは一般公開されております。

https://developers.notion.com/

上記のリファレンスの情報について、以下 Notion のコンポーネントごとにできることをまとめてみます。

Notion のコンポーネント

Notionには内部的なコンポーネントが存在します。具体的には「データベース」「テーブル」「ブロック」があり、それぞれの簡単な関係性は以下の通りです。

データベース

データベースは、Notion を構成するコンポーネントで最も大きい大項目です。
下でも出てきますが、page などをひとまとめにし管理します。テーブルやボードの形で管理することができます。
データベースの対応するAPIについては以下の通りです。CRUDでいうところの削除はないようです。

操作 説明
クエリ データベース内の情報をフィルタ条件に基づき検索します。そのデータベース配下にあるページ一覧が欲しい時などに追加います。
ID検索 IDがわかっているデータベースの情報を取得します。
作成 新規にデータベースを作成します。
更新 すでにあるデータベースの情報を更新します(名前変更など)。

ページ

ページは、Notionにおけるドキュメントとして中心的な存在です。このページの中でメモや記事を作成します。
ページの対応するAPIについては以下の通りです。ページのAPIにはデータベースのようなクエリがありません。

操作 説明
ID検索 IDがわかっているページの情報を取得します。
作成 新規にページを作成します。
更新 すでにあるページの情報を更新します(名前変更など)。
ページプロパティの取得 ページIDからプロパティ情報を取得します。

なお、リファレンスにはページ削除の項目がありますが、こちらはブロックのエンドポイントを使ってください、と記載されているのでここでは飛ばしています。
https://developers.notion.com/reference/archive-delete-a-page

ブロック

ブロックは、ページを構成する1つ1つの要素になります。例えば、ページの中でテーブルを作成すると、そのテーブルが1つのブロックとなります。
ページの対応するAPIについては以下の通りです。

操作 説明
ID検索 IDがわかっているブロックの情報を取得します。
子要素の取得 そのブロックに子要素が存在する場合、IDをもとに取得します。
作成 新規にブロックを作成します。
更新 すでにあるページの情報を更新します(名前変更など)。
削除 ブロックを削除します。

ここまでが、Notion のコンポーネントに関する API のご紹介でした。他に「User」や「 Search」のエンドポイントが用意されています。

ユーザ

ユーザの対応するAPIについては以下の通りです。

操作 説明
ID検索 IDがわかっているユーザの情報を取得します。
一覧取得 ワークスペース内のユーザ一覧を取得します。
bot取得 API トークンに紐づくbotユーザを取得します。

サーチ

操作 説明
クエリ APIからのアクセスを許可する全ページの中から情報を検索します。

https://developers.notion.com/

とりあえず Notion API を触れるようにしてみる

ここまで API でできることをまとめてみました。ここからは具体的にどうすれば API を使えるようになるのか説明させていただきます。

Notion の My integrations にアクセス

  1. https://www.notion.so/my-integrations にアクセスします。
    以下のような画像の画面が表示されるかと思います。

  2. 左の「+ New integration」を選択します。

  3. 以下の画像の通り入力しintegrationを作成します。

  4. 無事に作成が完了すると上にSecretが表示されるのでメモしておきます。

作成した integration からデータベースにアクセスできるように許可する

integrationを作成したので、これでAPIを叩きたい!...ところですが、そのまえにデータベースにAPIでアクセスできるように共有設定する必要があります。

  1. Notionを開き、共有するデータベースの share をクリックします
     

  2. 先ほど作成したintegrationを招待します。

API を試してみる

ここまで作成完了したら、いよいよ API を試してみたいと思います。今回は簡易的に curl にて確認してみようと思います。

ターミナルを起動します。起動したターミナルにて、以下のコマンドを実行してみましょう!
ちなみに、<API Secret> と記載した箇所は先ほどメモしたSecretに置き換えてください。

> curl 'https://api.notion.com/v1/databases' \                                            
  -H 'Authorization: Bearer '"secret_xxxxxxxxxxxxxxxxxx"'' \
  -H 'Notion-Version: 2021-08-16'

上手く取得できると以下のように結果が返ってくるかと思います。

{"object":"list","results":[{"object":"database","id":"xxxxxxxxxxxxxxxxxxx","cover":null,"icon":null,"created_time":"2022-01-26T22:41:00.000Z","last_edited_time":"2022-02-08T02:00:00.000Z","title":[{"type":"text","text":{"content":"ToDo","link":null},"annotations":{"bold":false,"italic":false,"strikethrough":false,"underline":false,"code":false,"color":"default"},"plain_text":"ToDo","href":null}],"properties":{"Status":{"id":"%3DrdM","name":"Status","type":"select","select":{"options":[{"id":"1","name":"Not started","color":"red"},{"id":"2","name":"In progress","color":"yellow"},{"id":"3","name":"Completed","color":"green"}]}},"Assign":{"id":"WbC%5D","name":"Assign","type":"people","people":{}},"Name":{"id":"title","name":"Name","type":"title","title":{}}},"parent":{"type":"workspace","workspace":true},"url":"https://www.notion.so/xxxxxxxxxxxxxxxxxx"}],"next_cursor":null,"has_more":false}

感想

今回 Notion が公開しているパブリックベータ API を触ってみました。
Notion は非常に面白いツールであり、これから確実に伸びるツール(というか既に普及している)だと思います。まだまだ Notion API は機能が制限されている印象ですが、情報はキャッチアップしていくよう注目していきたいと思います。

また、Notion API を触るにあたり Go でライブラリも作ってみています。
https://github.com/yuta519/notion_api

Goも初心者ながら現在進行で開発しているので、ここでの気づきなども含めて今後さらに記事を出していければなと思います。

Discussion