はじめに
Notion を少し使い始めましたが、なんとなく性に合う感じがしました。 あまりに自由度が高くてどこから始めていいのかわからないという声も聞きますが、概念がわかるとプログラマには使いやすいのではと思いました。 ということで、プログラマの視点から Notion の概念を説明してみたいと思います。
ページはオブジェクト
プログラマ的に見ると、Notion におけるページはオブジェクトと考えることができます。 ページはあらゆるところに作成できますが、一番簡単なのは PRIVATE のトップにページを追加することです。プライベートの右側にカーソルを合わせると「+」の記号が出てきて、「Add a page」となります。PRIVATE が親のオブジェクトと考えてよさそうです。逆に言うと親がいないページは、全てここに表示されます。当初ページを作ると PRIVATE タブが溢れるのではないかと心配していましたが、親がいるものはここから消えるので、そんな心配は杞憂でした。
ページはオブジェクトですが、前述の通りその中にオブジェクトであるページを内包することができます。別のページに内包されているページは PRIVATE には表示されません。
ページ内に Page を埋め込むのは次のように「/page」で埋め込むのが普通だと思います。ただし、この作り方だとただの空のページの作成になるので、実際には、後で説明しようと思っている「テンプレートボタン」を使うようになるはずです。
ページの中にページを埋め込むということは、内包しているページの責任は埋め込み元のページにあります。オブジェクト指向で言うと強い参照です。このため、親のページを消してしまうと、内包しているページも全て消えることになります。
一方で、あるページから別のページへの参照だけを作りたい場合もあります。以下は今日の「活動記録(日)」の上の部分です。ここには、昨日の記録へのリンクが用意されています。このリンクは所有権を持たないため、オブジェクト指向でいう弱い参照になると思います。
このリンクを張る処理は簡単で、2月7日(日)の記録のリンクを「Command-L」で取得した後に、貼り付けを行うだけになります。ここで、「Mention page」とするだけで Notion のページの場合にはタイトルの名前を持ったリンクが作成されます。
Notion 以外の外部サイトの場合には、はてなブログのリンクのような「タイトル」「ページの先頭部分」「リンク」「画像」を含んだブロックが貼り付けられます。
データベースはクラス
情報をまとめていると定型で整理したいページが出てきます。この時にはデータベースの機能を使います。データベースは上述のページの集合体で、共通のプロパティを持ちます。各ページにどのようなプロパティを持たせればよいのかは、オブジェクト指向のクラスの設計に共通する話ではないかと思います。作った後で、さまざまなビューを作って絞り込みをできるようになります。この辺りは Rails で scope を作るイメージですかね。
試しにこのブログのM1 MacBook Air インストールアプリケーション一覧 - M1 MacBook Air インストール覚書(番外編) - hkob’s blogの M1 MacBook インストールアプリ一覧を Notion にインポートしてみました。ページデータを Numbers に貼り付け、CSV にエクスポートした後、Notion にインポートしました。読み込んだデータベースは、以下のような感じになりました。読み込んだ段階で、arch とかは Property type が自動的に Select になっていました。いっそ、ブログを更新したものを公開しつづけるより、このデータベースを公開した方が有用ではないかと感じているところです。後日、このページを作成する記事を作ってみて、よさそうならこちらに移行しようかと思っています。
もう一つは会議のデータベースです。こちらの属性は大したことないのですが、新しいページを作った時のテンプレートを工夫しています。会議ごとにテンプレートが異なるので、それぞれのテンプレートボタンをたくさん埋め込んでいます。こちらも後で記事にしようと思います。
いろいろ作りながら工夫をしているので、その辺りを説明しつつ、周りの Notion ユーザを増やしていこうと画策しているところです。