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

Share
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部分では独自の関数(concat、hour、minute、dateBeforeなど)が使用されており、いちおう独自の言語という感じですね。

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

重要ポイントは、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

Dependabotの対応が面倒なのでRenovateを導入する

Dependabotくんはある程度の依存関係の更新を通知してくれるが、山のようにprojectを抱えているとなんとも痒いところに手が届かない。 ということで、Renovateを使ってみる。 Build software better, togetherGitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.GitHub ここからGitHub Appを入れる。 あとは、指示に従ってポチポチするだけで、超かんたんだった。 感想 自動化最高。

By Sakashita Yasunobu

nodejsのバグを見つけたのでPRを投げてみた

概要 要するに、node --testで特定のバイナリを標準出力に書くと、テストランナーが固まったり、異常終了したりするバグです。 バグ自体は既知のものだったようで、修正がされていました。 test_runner: infinite loop in FileTest#drainRawBuffer when child stdout contains FF 0F followed by large size bytes · Issue #62693 · nodejs/nodeVersion v25.9.0 (also reproduced on v24.14.1 LTS, v22.21.0 LTS, v23.4.0) Platform Darwin 25.

By Sakashita Yasunobu
青空文庫のParser

青空文庫のParser

青空文庫のParserを作ってます。 GitHub - P4suta/aozora: Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks.Pure-functional Rust parser for 青空文庫記法 (Aozora Bunko notation): ルビ, 傍点, 縦中横, 外字, 返り点, indent containers, page breaks. - P4suta/aozoraGitHubP4suta Rustで作ってますが、配布物はcargoのほかにnpm/pypiでも入手できます Documentation * Playground — try it in

By Sakashita Yasunobu