この記事は Wano Group Advent Calendar 2023 の5日目の記事となります。
ネタバレ
- Wanoのエンジニア合宿に行ってきたよ
- 題材は「Notionに日本酒をそそごう」にしたよ
- 外部API(さけのわ.com)でJSONを取得して、それをNotionAPIを通してNotionDBに保存したよ
- たのしい合宿だったよ
はじめに
ごあいさつ
こんにちは!TuneCore Japanバックエンドエンジニアの @shibe_ です。
この度11月10-11日の間、Wanoのエンジニアチームで開発合宿に行ってまいりました!
そもそもどんなものが気になる方はこちらを御覧ください
大人の自由研究”で得られたもの。Wanoグループ開発合宿レポート!|Wano Group
業務についての情報収集を行う人から麻雀の得点計算を覚えるゲームを組む人まで様々な開発が行われておりましたが、自分は
- Web上のサービスでAPIを使って取得できるテーブルをNotionに手で転写するのが面倒だなあ〜
- 一泊二日の合宿でちょうどいいボリュームの開発がしたいなあ〜
- 忘年会シーズンの話題作り、なんかないかなあ〜
というモチベーションから
「Notionに日本酒を注ごう!」
と決意しました。
Notionとは?
Notionは無料で使用できるデータベース件メモ帳のようなアプリケーションで、
ページごとにテキストを入力できるほか、
- 画像や音声・動画ファイルをアップロード(容量制限あり)
- 表を作成する
- 表をデータベースにして集計したり一覧表示したりする
などなど機能を有しており、その用途は - 家計簿
- カレンダー
- ガントチャート
- ワールドトリガーのキャラクター一覧
と枚挙にいとまがありません。
今回はその中で「データベース」を用いた機能についてお話します。
APIとは?
あまりご存知でないかたはおられないと思いますが一応……
APIとは「Application Programming Interface」の略称で、
- 任意のアプリケーションを動かすために、別のアプリケーションから実施できる命令
- その返答
のやりとりの決め事だと思ってください。
代表的なものにshibe.onlineが提供している柴犬 APIなるものがあります(はじめて知りました)。
↓の記事とかわかりやすかったです。
https://www.sbbit.jp/article/cont1/62752
今回は
- NotionAPI
- さけのわデータ の.銘柄一覧
の二つを用いてNotionに大量の日本酒を注いでいます。
試運転をしよう
まずは、NotionAPIを使ってデータベースに行を保存するしくみを知る必要があります。
下調べした結果、以下が必要だとわかりました。
- インテグレーションの作成
- 編集できるようにしたいDBにインテグレーションの許可
- API送信情報を作成
- API発射!
下準備
インテグレーションを登録しよう
Notionインテグレーションとはなんですか?
Notionインテグレーションのページによると
Notionインテグレーションは、Jira、Googleドライブ、SlackなどのツールをNotionに接続して、ワークフローを強化します。インテグレーションは、NotionのAPIを使用して構築されます。
とのことです。
外部のプログラムを用いてNotionを動かす場合、この Notionインテグレーション
くんを通して動かすと思って良さそうです。
まずはNotionを立ち上げて設定ダイアログを開き、
ワークスペース
-> コネクト
タブ を選択すると、
インテグレーションを作成または管理する
というリンクが登場します。
ここから画面上の指示にしたがってNotionインテグレーション
を登録しましょう。
今回は、 shibe_external_api
という名前にしてみました。※
このインテグレーションのKeyが表示されますので保存しておきましょう。後ほどデータベースを操作するのに必要です。
※2023.12.04に削除しましたので、ご自身のインテグレーションを用いてお楽しみください
DBとインテグレーションを接続する
Notionの任意のページを開いたら以下の手順でデータベースと Notionインテグレーション
を接続します。
- データベースを作成
- 作成したデータベースのページを開く
- 右上のメニューを開き、
コネクトの追加
を選択 - さきほど作成した
Notionインテグレーション
を選択する
- 名前
- うさぎの割合
を列に持つ、テスト用DB_うさぎひよこキメラ
というDBを作成してそこに設定してみました。
これで、外部から shibe_external_api
の情報を用いて テスト用DB_うさぎひよこキメラ
データベースを操作することができます!
API送信情報を作成
続いてはAPIで送る情報を整えます。
NotionAPIはHTTPプロトコル
を用いて送信することができますので、みなさまのお気に入りのAPI送信ツール(自分はTalend API Testerを好んで使っています)に必要な情報を設定していきます。
認証情報はヘッダーに、実際に操作する内容はボディに設定するようです。
今回は以下のような形になります。
エンドポイント
https://api.notion.com/v1/pages
Header
Authorization: Bearer [NotionインテグレーションのKey]
Notion-Version: 2022-06-28
Content-Type: application/json
Request Body
{
"parent": {
"type": "database_id",
"database_id": "更新したいデータベースID"
},
"properties": {
"名前": {
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "ブロリー"
}
}
]
},
"うさぎの割合": {
"type": "number",
"number": 0.5
}
}
}
API発射!
準備ができたら、API送信ボタンをクリックしてみましょう。
データベースが更新されたら成功です
デモ1
プログラムを動かそう
さて、基本的なしくみはわかりました。
あとは公開されているAPIから情報を取得して、NotionAPIの形式にして送信するだけです。
今回用いたAPIはさけのわ様が公開しているさけのわデータ より、
銘柄一覧 (GET /brands)
APIを用いています。
シーケンス
シーケンスは以下のようになります。
- さけのわ.com からデータ取得
- 取得したデータを整形
- Notionデータベースに送信!
という手順ですね。
ソースコード
ソースコードはこちらで公開しています。
気になったかたはぜひ動かしてみてください。
(main関数内の変数auth
をお手持ちのNotionインテグレーションキー に書き換えてご利用ください)
デモ2
実行すると以下のようになります。
ドキドキ……
!
ウ,ウゴイタァ!!!(途中増えるペースが落ちるのはご愛嬌ということで……)
注意点
- 上記ソースコード上の
Notionインテグレーション
は削除済のため、ご自身のNotionインテグレーションでお楽しみください。 - この合宿内には「そしたらクレカの明細CSVファイルとか読み込んでNotionに吐いたらすぐインポートできるやん^^」とか思ってたんですがCSVファイルは直接インポートできるようです。南無。
- 他にも、Zapierなる機能があればアプリケーション間での連携もできるそうなのでもしかしたらコーディングなしで連携できるやもですね
おわりに
というように、開発合宿では楽しくコーディングをさせてもらいました。
この世界には様々なAPIが存在するので、いろいろ叩いてみるとなにか発見があるかもしれません!(RPGチュートリアル終了後並感)
この記事で、より多くの魂が救われることをここで祈り続けています。
現在、Wanoグループ / TuneCore Japan では人材募集をしています。興味のある方は下記を参照してください。
Wano | Wano Group JOBS
TuneCore Japan | TuneCore Japan JOBS