Bluesky/GitHub/Calendar/RSSをNotionに同期するbluenotiondbを作った
Notionには同期データベースとしてGitHubやJiraなどを同期できるDBがありますが、任意のサービスには対応していません。 もっと色々なサービスと同期するNotionのデータベースが欲しかったので、bluenotiondbというツールを作りました。
bluenotiondb
bluenotiondbは、色々なサービスからデータを取得してそのデータをNotionのデータベースに追加するツールです。
現状では次のサービスに対応しています。
- Bluesky
- Pull Posts from Bluesky and push to Notion
- GitHub Activity
- Pull events of GitHub user and push to Notion
- Open/Close/Comment of Issues/PRs etc…
- GitHub Search
- Pull Issues/PRs or Repositories from GitHub Search and push to Notion
- iCal calendar like Google Calendar
- Pull events from iCal and push to Notion
- Required: need to setup
actions/cache
action to prevent duplicated items
- RSS Feeds
- Pull posts from RSS Feeds and push to Notion
- Required: need to setup
actions/cache
action to prevent duplicated items
Blueskyの投稿やGitHubアクティビティや検索結果、またiCalに対応しているのGoogleカレンダーの予定、RSSフィードを自動的にNotionデータベースに同期できます。
bluenotiondbは、Bunで書かれたただのCLIツールになっていて、
どのサービスを取得するか、同期先のデータベースはBLUENOTION_ENVS
という環境変数で指定する形になっています。
bluenotiondbの使い方
Setup Notion
- Notion Templateを複製
- Notion Integrationを作成してAPIキーをコピー
- https://www.notion.so/my-integrations
- Copy the API key
- 作成したIntegrationを複製したデータベースに”コネクトを追加”します
BLUENOTION_ENVS
の環境変数をbluenotiondb env generatorで作成します
bluenotiondb env generatorは、BLUENOTION_ENVS
の環境変数を生成するためのツールです。
必要な設定は同期したいものを選んで入力すれば、BLUENOTION_ENVS
の環境変数を生成できます。
たとえば、次の設定は、Blueskyの投稿を同期、GitHubのアクティビティをNotionデータベースに同期するための設定です。
見るとわかりますが、BLUENOTION_ENVS
には配列で複数のサービスの設定を書くことができます。
BLUENOTION_ENVS='[{"notion_database_id":"xxxx_xxxx_xxx","notion_api_key":"secret_xxx","bluesky_identifier":"test.bsky.app","bluesky_app_password":"xxx-xxx-xxx"},{"notion_database_id":"xxxx_xxxx_xxx","notion_api_key":"secret_xxx","github_token":"ghp-xxxx-xxx","github_user_name":"test"}]'
CLIで実行する
Linuxのバイナリしか配布はしてないですが、CLIで実行できます。
ローカルで作る場合は、リポジトリをクローンしてbun install && bun run dist
で作成できます。
$ BLUENOTION_ENVS='[...]' ./bluenotiondb
GitHub Actionsで定期的に実行する
GitHub Actionsでは定期的な実行をサポートしてるので、GitHub Actionsで定期的に同期することができます。
- 適当なPrivateリポジトリを作成します
.github/workflows/update.yml
というファイルを作成します- https://github.com/azu/bluenotiondb/releases/latestに書かれているWorkflowを
.github/workflows/update.yml
にコピーします BLUENOTION_ENVS
をGitHub Actionsのsecretsに設定します
バージョンやタスクによって設定は異なりますが、次のようなWorkflowを書くことで定期的に同期できます。
name: Update
on:
push:
branches:
- main
schedule:
# every 30 minutes
- cron: "*/30 * * * *"
workflow_dispatch:
env:
BLUENOTION_VERSION: v1.0.1
permissions:
contents: none
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Download
run: |
curl -L https://github.com/azu/bluenotiondb/releases/download/${{env.BLUENOTION_VERSION}}/bluenotiondb -o bluenotiondb
chmod +x bluenotiondb
- name: Update
run: ./bluenotiondb > /dev/null 2>&1
env:
BLUENOTION_ENVS: ${{ secrets.BLUENOTION_ENVS }}
細かい設定
BLUENOTION_ENVS
に設定をすべて入れるようにしているので、かなり柔軟に色々な設定ができます。
たとえば、NotionのテンプレートではTitle
やURL
といったカラム名が決まっていますが、これはnotion_property_names
で変更できます。
また、notion_extra
で特定の値を上書きしたり、追加したりもできます。
そのため、Bluenotion専用のデータベースじゃないところに定期的に同期するという使い方もできます。 詳しくは次のドキュメントを参照してください。
作った理由
Notionに発生したイベントや予定などをまとめようとして使えるものが見つからなかったので作りました。 Blueskyの投稿やGitHubのアクティビティなどを記録しておくと、その日に何をしたかを振り返るのに役立ちます。
また、自分の場合は作成したリポジトリを記録するようにして、ブログを書くときに参考にしています。
BLUENOTION_ENVS='[{"notion_database_id":"xxxxxx","notion_api_key":"secret_xxxx", "github_token":"ghp_xxxx","github_search_query":"user:@me created:>={{-1day}}","github_search_type":"REPOSITORY","notion_extra":{"Type":{"select":{"name":"My GitHub Repository"}}}}]'
他にも色々な情報がNotionへと自動的に集まるようにしています。
- Gitコミット
- GitコミットHooksでのコミットメッセージを記録してる
- GitコミットをNotionに記録してみてる | Web Scratch
- 📝Notes
- VSCodeで書いた一時的なメモを保存する際に、自動的にNotionへ同期
- Bluesky
- bluenotiondbで同期
- GitHub
- bluenotiondbで同期
- アクティビティ(作成したリポジトリ、Issue、PR、push、Release)などが記録される
- Gmail
- https://github.com/azu/gmail-to-notion で、
GmailのGTD/*
系を取り込んでいる - メールで特定のラベルをつけたものをNotionに同期
- https://github.com/azu/gmail-to-notion で、
- メモリーノート: 突発的なメモ
- https://github.com/azu/memory-note で作成
- 記憶に残らないものをメモするためにMemory Noteという仕組みを書いた | Web Scratch
- 音声でメモできるので、忘れないうちに追加できる
- 買い物
- https://github.com/azu/memory-note の worker
- 記憶に残らないものをメモするためにMemory Noteという仕組みを書いた | Web Scratch
- 音声でメモできるので、忘れないうちに追加できる
- iOSのダッシュボードでwidgetとしても見れる
- カレンダー
- bluenotiondbでGoogleカレンダーの予定を同期
- ブログ候補
- 新しく作ったものをブログとして書くので、bluenotiondbでGitHubの検索結果を同期してる
自分の場合はタスク管理とデータベース、あとはストック的なドキュメント置き場としてNotionを使っています。 毎日見るデイリーページが日付毎にあるので、bluenotiondbで作成したアイテムは、そのデイリーページにRelationで紐づけています。
最近でたデータベースオートメーションで、データベース間のRelationもNotion側で自動化できるようになりました。 これによって、デイリーページを見るだけで、やること(タスク/カレンダー)とやったこと(Bluesky/GitHub)などが一覧できるようになったのが便利です。
NotionのDatabase Automationを使えば、
— azu (@azu_re) September 8, 2023
DB同士のRelationも自動化できることがわかった(ページを追加した時に、Relation先のDBをフィルターで特定のページだけになるようにして追加する)ので、
日付ごとに作ってるダッシュボード的なページに、今日作成したものを紐付けるようにしたらだいぶ便利。 pic.twitter.com/b4QWnHkmnI
bluenotiondbで色々な情報を取り込もうと思った理由として、NotionのMentionで参照できるようにするためです。 たとえば、Blueskyに投稿して、それをタスクとしてやろうと思ったときに同じことをタスクに書くのは面倒ですが、自動的に同期されているならmentionするだけで参照できます。
bunでのバイナリ配布
bluenotiondbはBunを使って書かれていますが、
Bunを使って良かったのは、bun build
で単一実行バイナリを作成できる点です。
GitHub Actionsで実行する場合は、Linux向けのバイナリをリリースページにアップロードしておけば、それをcurlで取得して実行するだけの簡単な設定で済みます。 また、これによって余計なものをダウンロードしなくてよくなるので、実行時間も短くなります。
ちょうどBun 1.0もリリースされたので、こういうバイナリだけのツール用途はNode.jsやDenoよりもBunの方が楽だった感じはします。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。