Zettelkasten を作る : Notion 解説 (75)

1. はじめに

円谷さんの Zettelkasten の解説 YouTube が出ました。後半に作り方が紹介されているので、それを見ながら作ってみたいと思います。

こちらのブログでは紹介しませんでしたが、先日の NotionRubyMapping のリリースにて、erdToNotionRb というツールも同時公開しました。せっかくなので、今回のシステムをこのツールで作成してみたいと思います。

hkob.notion.site

いきなり完成系の ER 図を書いてしまうと意味がわからないと思うので、YouTube のタイムスタンプに合わせながら説明してみましょう。動画の開始位置にリンクを貼っています。

2. タグDB

最初は21:00 からのタグデータベース作成です。タグデータベースは最初名前だけなので、これだけです。

erDiagram
  Tag {
    title Name
  }

3. 一時ノート

次は22:00 からの一時ノートです。私の場合は、ここはタスクデータベースが兼ねるので作成しません。

4. Literature

次は23:37 からのLiteratureノートです。ここには以下のプロパティが追加されます。

  • URL: url property
  • N.A.: text property
  • Comment: text property
  • Select: select property (Web, Book, YouTube)
  • Tag: Tag データベースへの relation Property

少し複雑になってきました。こんな感じになります。

  Literature {
    url URL
    text p0 "N.A."
    text Comment
    select p1 "Select|Web|Book|YouTube"
  }
  Tag ||--o{ Literature: "Input|Tag"

5. Permanent

次は25:30 からのPermanentノートです。ここは relation propertyのみとなります。

  Permanent {
  }
  Tag ||--o{ Permanent: "Output|Tag"
  Literature }o--o{ Permanent: "Output|Literature"

6. Tag データベースへのプロパティ追加

Tag は Literature と Permanent へのリンクがあるため、これらをカウントするロールアップおよびそれを整形するフォーミュラが設定されます。これらを追加します。formula の中の " は記述できないので、@ で置き換えます。

  Tag {
    title Name
    rollup p0 "OutputNum|Output|Name|count"
    rollup p1 "InputNum|Input|Name|count"
    formula p2 "RelationNum|format(prop(@InputNum@) + prop(@OutputNum@)) + @(input: @ + format(prop(@InputNum@)) + @ / output: @ + format(prop(@OutputNum@)) + @)@"
  }

まとめるとこんな感じです。

ER図最終形

7. データベースの作成

コネクトを追加して、erdToNotionDb.rb を実行してみます。Title プロパティの Rollup ができないバグがあったので、0.7.4 にアップデートしました。

実行結果は以下のようになります。スクリーンショットの都合上、--inline にしましたが、通常はこのオプションはつけずにページで作成します(後でページに変更します)。

erdToNotionDb.rb https://www.notion.so/hkob/Zettelkasten-databases-46ce18f2f4164dce84d93440c4997111#2a3f0e24d6ce47978671522957a52699 https://www.notion.so/hkob/Zettelkasten-databases-46ce18f2f4164dce84d93440c4997111 --inline
=== Pass 1 ===
OutputNum blocked by Output
InputNum blocked by Input
RelationNum blocked by ["InputNum", "OutputNum", "InputNum", "OutputNum"]
Pass 1 Remain 3 in 16
=== Pass 2 ===
RelationNum blocked by ["InputNum", "OutputNum", "InputNum", "OutputNum"]
Pass 2 Remain 1 in 16
=== Pass 3 ===
Pass 3 Remain 0 in 16
Finish!!!⏎

動画の中でやっているように Tag データベースの Formula などはロールアップが作成されていないとプロパティが設定できません。erdToNotionDb は以下のような手順で Pass を重ねていくことで、依存関係を解消しています。

  • Pass 1

    • 全てのデータベースを作成します。
    • 全てのデータベースで依存関係のないプロパティを全て作成します。
    • リレーションを設定します。
    • リレーションの反対側の名前を修正します。
    • この段階では、OutputNum は Output、InputNum は Input が生成されていないので block されます。
  • Pass 2

    • Pass 1 で設定できなかった OutputNum の rollup は Output から生成されます。
    • 同じく、InputNum の rollup は Input から生成されます。
    • RelationNum は InputNum, OutputNum が生成されていないので、block されます。
  • Pass 3

    • 最後に残った RelationNum は InputNum, OutputNum が Pass 2 で生成されたので、ここで生成されます。

以上により、ER 図の内容が無事にテーブルに実装されました。

作成されたデータベースはこんな感じです。ビューは API では設定できないので、これから動画を見ながら修正していきます。

作成されたデータベース

8. 終わりに

やはり自分でいろいろと使ってみないとバグが出てきますね。修正するいい機会でした。リレーションなどを手で修正する必要もないですし、どうやって設計したのかも ER 図で思い出せるのでいいですね。今後もシステムを組む時には、ER図から生成したいと思います。


hkob.notion.site