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

  1. Notion Templateを複製
  2. Notion Integrationを作成してAPIキーをコピー
  3. 作成したIntegrationを複製したデータベースに”コネクトを追加”します
  4. 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で定期的に同期することができます。

  1. 適当なPrivateリポジトリを作成します
  2. .github/workflows/update.yml というファイルを作成します
  3. https://github.com/azu/bluenotiondb/releases/latestに書かれているWorkflowを.github/workflows/update.ymlにコピーします
  4. 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のテンプレートではTitleURLといったカラム名が決まっていますが、これはnotion_property_namesで変更できます。 また、notion_extraで特定の値を上書きしたり、追加したりもできます。

そのため、Bluenotion専用のデータベースじゃないところに定期的に同期するという使い方もできます。 詳しくは次のドキュメントを参照してください。

作った理由

Notionに発生したイベントや予定などをまとめようとして使えるものが見つからなかったので作りました。 Blueskyの投稿やGitHubのアクティビティなどを記録しておくと、その日に何をしたかを振り返るのに役立ちます。

timeline

また、自分の場合は作成したリポジトリを記録するようにして、ブログを書くときに参考にしています。


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へと自動的に集まるようにしています。

自分の場合はタスク管理とデータベース、あとはストック的なドキュメント置き場としてNotionを使っています。 毎日見るデイリーページが日付毎にあるので、bluenotiondbで作成したアイテムは、そのデイリーページにRelationで紐づけています。

最近でたデータベースオートメーションで、データベース間のRelationもNotion側で自動化できるようになりました。 これによって、デイリーページを見るだけで、やること(タスク/カレンダー)とやったこと(Bluesky/GitHub)などが一覧できるようになったのが便利です。

bluenotiondbで色々な情報を取り込もうと思った理由として、NotionのMentionで参照できるようにするためです。 たとえば、Blueskyに投稿して、それをタスクとしてやろうと思ったときに同じことをタスクに書くのは面倒ですが、自動的に同期されているならmentionするだけで参照できます。

mention

bunでのバイナリ配布

bluenotiondbBunを使って書かれていますが、 Bunを使って良かったのは、bun buildで単一実行バイナリを作成できる点です。

GitHub Actionsで実行する場合は、Linux向けのバイナリをリリースページにアップロードしておけば、それをcurlで取得して実行するだけの簡単な設定で済みます。 また、これによって余計なものをダウンロードしなくてよくなるので、実行時間も短くなります。

ちょうどBun 1.0もリリースされたので、こういうバイナリだけのツール用途はNode.jsやDenoよりもBunの方が楽だった感じはします。