Notion の Database ボタンを使ってカウンター機能を実装してみる

# 🐣 はじめに
最近仕事でNotionのデータベースボタンを触る機会があり、このボタン使ってカウンター機能を作れないかなーと試行錯誤した結果それっぽいものができたのでご紹介させていただきます。

# 📝 Notion Database のボタン機能とは？

NotionではDatabaseのプロパティとしてボタンを指定できるようになりました。
ボタンプロパティを指定することで各フィールドにボタンを表示することができ、そのボタンを押下したときのアクションを指定することで様々な処理を行うことができます。


[Notion公式ページ](https://www.notion.so/help/guides/make-work-more-efficient-database-button-property)では「エスカレーションボタン」や「投票ボタン」など様々なアイディアが実装例とともに紹介されています。

**投票ボタンの例**
![upvoting.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/1650d0ec-c09a-3d54-dc54-bcc3f2d82e46.gif)
引用：https://www.notion.so/help/guides/make-work-more-efficient-database-button-property

# 🥞 今回作るもの
Notion公式の「投票ボタン」では1人1回しか投票できませんが、今回はこれを応用して何回でも投票できるカウンター機能の実装を行ってみたいと思います。

### 完成イメージ
![notion-database03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/49a00fb4-2b8e-dd75-005a-9d41c93e73fc.gif)


### Notionデータベースの設定
それでは早速作っていきましょう！

2024年5月現在Notionデータベースのボタン機能からデータベース内の数値を増やす方法がないため2つのデータベースを連携させる必要があります。（もし可能でしたらコメント下さい:pray:）


空のNotionページにインラインDatabaseを2つ作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/2ebcbe21-8427-5437-2f7f-cff9309c0c3b.png)

今回は「表示用DB」と「集計用DB」を作りました。
NotionデータベースではデフォルトでTagsが設定されていますが、このプロパティは今回使用しないため削除してしまってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/b694ed67-98ea-c245-1dc9-525461e3ddcd.png)


### 表示用Databaseの設定
次に「表示用DB」に必要なプロパティを追加していきます。
データベースの「＋」ボタンを押して下記のプロパティを追加します。

| 名称 | タイプ | 備考 |
|:---:|:---:|:---:|
|いいね数 | Formula | 後の工程で計算式を入力するため現在はプロパティの追加のみで構いません |
| いいね！👍 | Button | こちらも後工程でボタン押下時のアクションを追加します |
| いいね総数 | Relation | 集計用DBにリレーションを張ります。その「Show on 集計用DB」のトグルをONにし双方向にリレーションが張られるようにします |

![notion-database01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/719d6e95-d687-01d1-ee55-2bc7e701d695.gif)



### ボタン押下時のアクションを追加する
次に「いいね！👍」を押下した際の処理を追加していきます。

1. 「いいね！👍」ボタンの「Edit property」を開くとボタン押下時のアクション編集ができるので「Add action」をクリックします。
1. アクションは「Add pages to...」を選びページの追加先には「集計用DB」を指定します
1. 追加するページ名は「+1」としておきます（名前は自由に決めてもらって大丈夫です）
1. 「Edit another property」を押下しプルダウンから「いいね総数」を選択します
1. プロパティの指定先を選択できるので「This page」を選択します

![notion-database02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/98866a90-faa8-5383-9ed6-15c476dbe5d6.gif)


### いいね数を計算する
ここまで気たらあと一息です！
最後に「いいね数」のプロパティを編集していきます。

1. 先ほどと同様に「いいね数」の「Edit property」を開き、FormulaのEditから計算式を入力します
1. 「Your formula」というフィールドに　`length(prop("いいね総数"))`　と入力します


### 完成！！
これで完成です！
「いいね！👍」をクリックすると集計用DBにページが追加されていいね数が増えているのが確認できると思います。

![notion-database04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14082/0a91e392-f8b2-fedf-928f-55213787f962.gif)


# 🏋️‍♂️ まとめ
今回は2つのデータベースを連携させてカウントアップ機能を実現しているため、クリック時の動作速度が若干気になりますが、当初やりたかったことは実現できました。

今後Notion公式からデータベースのボタン機能からデータベース内の数値を増やす方法が提供されればもっとスマートな実装ができるかもしれません。

もしもっといい方法あるよ！！という方がいらっしゃったら是非コメントください。
最後にこの記事「いいね！👍」と思ったら記事のいいねもお願いいたしますｗ


# 🌈 参考サイト
- https://www.notion.so/help/relations-and-rollups
- https://info.nextmode.co.jp/blog/notion-database-button-property
- https://youtu.be/9-vZRqPh9Jk?si=sJtQwwR6vw0aSFhk
- https://www.notion.so/help/guides/make-work-more-efficient-database-button-property