1. はじめに
円谷さんの Zettelkasten の解説 YouTube が出ました。後半に作り方が紹介されているので、それを見ながら作ってみたいと思います。
👩💻 動画公開しました!
— Tsuburaya | Notion 公式アンバサダー (@___35d) 2023年2月4日
今回は究極のメモ術「Zettelkasten」を Notion で運用する方法について解説してみました。メモ術を極めたい方、ぜひご覧ください!(テンプレも配布しています!)
気合い入りすぎて30分超えの動画になってますwhttps://t.co/8HzvaweJAn pic.twitter.com/1kcUBJgPzm
こちらのブログでは紹介しませんでしたが、先日の NotionRubyMapping のリリースにて、erdToNotionRb というツールも同時公開しました。せっかくなので、今回のシステムをこのツールで作成してみたいと思います。
いきなり完成系の 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@)) + @)@" }
まとめるとこんな感じです。
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図から生成したいと思います。