Obsidianでデータベースが使えるぞ!

Obsidianでデータベースが使えるぞ!
トンボが、ぽつんと。

Obsidianを開いたらRelease Noteが出てきて、内容を読んでびっくり!

Obsidian 1.9.10 Desktop (Public)
Introducing [Bases](https://help.obsidian.md/bases), a new core plugin that lets you turn any set of notes into a powerful database. With Bases you can organize…

Baseというコアプラグインが追加されて、YAML形式で記述されるプロパティとして扱えるらしい。

Introduction to Bases - Obsidian Help
Introduction to Bases - Obsidian Help

わお!

いちおう今までもコミュニティプラグインのDataviewを使えばそれっぽくできたんだけれど、コアプラグインじゃなかったから使ったことがないんだよねぇ。

GitHub - blacksmithgu/obsidian-dataview: A data index and query language over Markdown files, for https://obsidian.md/.
A data index and query language over Markdown files, for https://obsidian.md/. - blacksmithgu/obsidian-dataview

画像の埋め込みとか制限はあるそうだけれども、数式とかを書けるのだからすっごく便利そう。

というのも、従来のObsidianでは、ノートを整理するためには

  • 手動でタグをつけて分類する
  • フォルダで分ける
  • 検索機能に頼る

といった方法しかなかったんだよね。

これらの方法もやっていることが明確で、目的が手段化しないみたいに「いいことだ!」と思い込むことはできるのだけれど、やっぱりNotionのようなデータベースはちょっとうらやましいんだよね。「特定の条件に合うノート一覧を表形式で見たい」ときはあると思うんだよ。

Basesプラグインを使うと、ノートのプロパティ(YAMLフロントマターに記述される情報)を基にして、Excelのようなテーブルでノートを管理できるようになるっぽい。一言でいえば、ObsidianにExcel機能が来たって感じ?

これまでもちょびちょびYAMLフロントマターのアップデートがあったのだけれど、正直あんまり使い道がなかったんだよね。そもそもYAMLフロントマターが機械が読み取るようの補助的なメタデータという扱いだから、書かなくてもいいかなって感じだったの。でもこれでYAMLフロントマターに積極的にいろいろ書きこむ理由ができていいね。今まで書いてきた人も簡単に活用ができるようになってよさそう。

具体的にどんなことができるの?

説明なしにいろいろ話してきたけれど、Basesプラグインの機能を見ていこう。

Introduction to Bases - Obsidian Help
Introduction to Bases - Obsidian Help

フィルタリング機能

基本となるのが、ノートのフィルタリング機能。

  • 特定のタグがついたノートのみ表示
  • 特定のフォルダ内のノートのみ表示
  • 作成日が今日のノートのみ表示
  • 特定のプロパティ値を持つノートのみ表示

こんな感じで条件を組み合わせて、複雑な絞り込みをする機能。

カスタムビュー機能

同一のベースに対して複数のビューを切り替えられます。

例えば読書管理であれば

  • 「読書中」タグのついた本の一覧ビュー
  • 「読了」タグのついた本の一覧ビュー
  • 評価4以上の本のみのビュー

といった具合に、用途に応じて表示を切り替えられます。

Views - Obsidian Help
Views - Obsidian Help

動的プロパティ(フォーミュラ)

おそらく激アツなのがフォーミュラ機能。

既存のプロパティを組み合わせて、新しい計算結果を表示する機能です。

例えば

  • 作成日時から「◯日前に作成」といった相対的な情報を表示
  • 複数の数値プロパティを組み合わせた計算結果を表示
  • 条件分岐を使った動的な表示内容の変更

まあ、Excelの関数というか計算機能ですよ。目玉だよね!

Functions - Obsidian Help
Functions - Obsidian Help

はて、.baseファイルってなんだ?

当初は「YAMLで記述されるのかな?」と思っていたのですが、調べてみると全然違いました。Basesプラグインは独自の.base ファイル形式を使用しています。

Bases syntax - Obsidian Help
Bases syntax - Obsidian Help

実際の.baseファイルの構造

.baseファイルは以下のような構造になっています。

公式ヘルプのコードをClaudeに開設してもらいました。

# === 1. フィルター条件の定義 ===
# どのノートを対象にするかの基本条件を設定
filters:
  or:  # 以下のいずれかの条件に合致するノートを表示
    - file.hasTag("tag")  # 「tag」というタグを持つファイル
    - and:  # 以下の両方の条件を満たすファイル
        - file.hasTag("book")  # 「book」タグを持ち、かつ
        - file.hasLink("Textbook")  # 「Textbook」へのリンクを含む
    - not:  # 以下の条件を満たさないファイル
        - file.hasTag("book")  # 「book」タグを持たない、または
        - file.inFolder("Required Reading")  # 「Required Reading」フォルダにない

# === 2. カスタム計算式(フォーミュラ)の定義 ===
# 既存のプロパティを組み合わせて新しい値を計算
formulas:
  # 価格を「○○ dollars」形式で表示(priceプロパティが存在する場合のみ)
  formatted_price: 'if(price, price.toFixed(2) + " dollars")'
  # 1歳あたりの価格を計算(price ÷ age)、小数点以下2桁まで表示
  ppu: "(price / age).toFixed(2)"

# === 3. 表示するプロパティの設定 ===
# テーブルに表示する列とその表示名を定義
properties:
  status:  # statusプロパティを表示
    displayName: Status  # 列見出しは「Status」
  formula.formatted_price:  # 上で定義したフォーミュラを表示
    displayName: "Price"  # 列見出しは「Price」
  file.ext:  # ファイル拡張子を表示
    displayName: Extension  # 列見出しは「Extension」

# === 4. ビュー(表示方法)の定義 ===
# 実際にどのように表示するかの設定
views:
  - type: table  # テーブル形式で表示
    name: "My table"  # このビューの名前
    limit: 10  # 最大10件まで表示
    filters:  # このビュー専用の追加フィルター
      and:  # 以下の両方の条件を満たすもののみ表示
        - 'status != "done"'  # statusが「done」でない
        - or:  # かつ、以下のいずれかを満たす
            - "formula.ppu > 5"  # 1歳あたり価格が5より大きい
            - "price > 2.1"  # または価格が2.1より大きい
    order:  # 表示する列の順序
      - file.name      # ファイル名
      - file.ext       # ファイル拡張子
      - note.age       # ノートの経過時間
      - formula.ppu    # 計算された1歳あたり価格
      - formula.formatted_price  # フォーマットされた価格

この構文を見ると、YAMLに似ていますが、formulas部分では独自の関数(concathourminutedateBeforeなど)が使用されており、いちおう独自の言語という感じですね。

データの保存場所は従来通り

重要ポイントは、Basesプラグインを使っても実際のデータはMarkdownファイルとYAMLフロントマターに保存されるという点でしょう。つまり、

  • ノートの中身は従来通りMarkdown形式
  • メタデータ(プロパティ)は従来通りYAMLフロントマター
  • .baseファイルは「どのように表示するか」の設定のみ

これにより、Basesプラグインを無効にしても、これまで通りノートにアクセスできるというか、Baseはあくまで見た目側というか表で表示するための計算などを担当していて、データの大本であるMarkdownのメモは触らない仕組みっぽい。

現時点での制限について

Basesプラグインはまだベータ版のため、いくつかの制限があります:

表示形式の制限

現在サポートされているのはテーブル表示とカード表示のみです。将来的にはリスト表示なども追加される予定ですが、今のところはこの二択です。

Obsidian Roadmap
We’re chipping away at improvements to Obsidian. Learn about what’s coming next.

画像表示の制限

画像プロパティがあっても、現在のBasesプラグインでは画像を表示できません。例えば読書管理で本の表紙画像を表示したい場合などに不便ですねぇ。

学習コスト

GUIでの設定はかなり直感的ですが、高度な機能(フォーミュラなど)などはお勉強しないとね。

DataviewプラグインとBasesプラグインの棲み分け

既存のDataviewプラグインユーザーとしては、「Basesプラグインに乗り換えるべき?」なんでしょうかね?

Dataviewプラグインの利点

  • より柔軟なクエリが書ける
  • 画像表示が可能
  • リスト表示、テーブル表示など多様な表示形式
  • JavaScriptによる高度なカスタマイズが可能

Basesプラグインの利点

  • 公式プラグインなので安定性が高い
  • GUIでの設定が直感的
  • プログラミング知識がなくても基本機能は使える
  • 将来的な機能拡張が期待できる

現時点では、シンプルな用途ならBases、高度な機能が必要ならDataviewという棲み分けになりそう。

脚注機能も地味に嬉しい

今回のアップデートでは、Basesプラグインの影に隠れがちですが、Footnotes view プラグインも追加されました。

直訳すれば脚注表示ということだから、Markdownでたまに思う「脚注書けたらなあ」が改善されたってことかな?

というのも、これまでMarkdownでは、本文中に[^1]と書いて、ノートの最後に[^1]: 脚注の内容と書くことで脚注になりました。長いノートになると、脚注を確認するためにスクロールするのが面倒!

新しいFootnotes viewプラグインでは、サイドバーに脚注一覧が表示されるため、スクロールせずに脚注の確認・編集ができるようになりました。地味ですが、論文やレポートを書く際にとても便利な機能ですねぇ。

結論

新しく導入された.baseファイルはどうなんだろうね。

ObsidianをMarkdownメモ帳アプリとして使っているから、余計なファイル形式は便利であっても使いづらいなあ。

実際、便利だろうなあとは思っていてもCanvas機能とは使っていないし。

でも、さすがにデータベースとして使えるのはゲームチェンジャーな気もするけれどどうなんだろうね。

それにアイコンや余白なんかのデザイン的な改善もあったようで、なんか見た目が可愛くなったね。

Read more

TailscaleのSubnet Routesを消す

SynologyのNASにTailscaleを導入し、便利に使っている。 TailscaleにはSubnet routersという機能がある。 これは、Tailscaleネットワークに接続されたデバイスが、そのデバイスが接続されているローカルネットワーク(サブネット)全体へのアクセスを他のTailscaleデバイスに提供できる機能だ。つまり、Subnet routerとして設定されたデバイスを経由することで、Tailscaleネットワーク上の他のデバイスから、そのローカルネットワーク内の機器にアクセスできるようになる。 Subnet routers · Tailscale DocsUse subnet routers to give devices outside your local network access to services within specific subnets. Extend your private network with Tailscale.Tailscale 便利そうだなと思って設定をしてみたものの、結局使うことがなかった。 公式ドキュメント

By Sakashita Yasunobu

Boids

群れに指揮者はいない 鳥の群れは、誰かが指示を出しているわけではない。魚の群れも同じ。それぞれが周囲を見て、少しだけ動く。その繰り返しが、全体として秩序ある動きを生む。 これを1986年にCraig Reynoldsがコードで再現した。名前は Boids(bird + oid)。個体に与えるルールは3つだけ。 1. Separation ── 近すぎたら離れる 2. Alignment ── 周囲と同じ方向を向く 3. Cohesion ── 群れの中心に寄る これだけで、群れは群れらしく動く。 なぜ作ったか 群れの動きは、見ていて飽きない。 * 単純なルールから複雑な動きが生まれる ── 創発(emergence)の典型例。設計していないのに、設計したかのように見える。 * 自分のブログに置きたかった ── 静的なページに、動くものがあると空気が変わる。 * Web Components で作りたかった ── どこにでも持っていける部品として。 設計の話 見えないときは止める 画面外でアニメーションを回し続けるのは無駄。Inte

By Sakashita Yasunobu

Days Elapsed

一年を「面」で見る 一年は365日。数字で見ると多いけど、並べてみると案外少ない。 12ヶ月を並べて、過去を塗りつぶして、今日を光らせる。それだけのカレンダーを作った。進捗バーが「一次元」なら、これは「二次元」の進捗表示。 Year Progress一年は50週ちょっとしかない 2026年を週で数えると、52週とちょっと。 カレンダーで見ると長そうなのに、週で数えると急に短くなる。そんな感覚を形にしたくて、このページの上の方に進捗バーを置いた。 やっていることは単純で、「今年が何%進んだか」をリアルタイムで表示しているだけ。 なぜ作ったか 理由は3つある。 1. 時間を「量」として見たかった ── イベントや予定ではなく、単純に「どれだけ経ったか」を数値で見たかった。 2. 目に見える形にしたかった ── 抽象的な「一年」を、動く数字に落とすとどう感じるか試したかった。 3. 自分の場所に置きたかった ── 誰かのツールを借りるのではなく、自分のブログに自分で作ったものを置きたかった。 実装の話 せっかく作るなら、

By Sakashita Yasunobu