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

気づいたらRustだらけ

気づいたらRustだらけ

Protonのブログを見ていたら、「Proton AuthenticatorをRustで作ったよ」なんて記事があったのでびっくり。 How Rust powers Proton Authenticator | ProtonTo build a secure 2FA app for all major devices, Proton turned to Rust. Carlos Quintana explains why we chose Rust and why we’ll likely use it more in the future.ProtonCarlos Quintana 最近はRustがいろいろな場所で使われているのを見るね。 最近Pythonを使う機会があったのだけれど、uvっていうパッケージマネージャもRustで作られてたわ。 uvuv is an extremely

By Sakashita Yasunobu
Lumo1.1が来たよ~

Lumo1.1が来たよ~

暗号化して安全にメールを送受信できるサービスを展開するProtonがAIもやっているんだね。 どうやらLumoという名称で、ProtonもAIに力を入れている感じ。 ぜんぜん知らなかったのだけれど、Lumoは1か月前ぐらいに発表されたサービスっぽい。 Say hello to Lumo, your privacy-first AI assistant by u/Proton_Team in lumo 暗号化の世界にAIの流行が来てるのかな~。 ブログポストを見る感じ、Protonの得意とするPGPを基盤とした暗号化システムをAIに適用した感じの設計だね。 Lumo security model: How Proton makes AI private | ProtonYour AI chats deserve privacy. Learn how Lumo keeps your conversations confidential with zero-access encryption and no logs.ProtonMarc Dupont

By Sakashita Yasunobu
フィルムで写真を撮ってみた

フィルムで写真を撮ってみた

Kodak Ultramax 大学に行く前に撮った一枚。 ぶらぶらしていたら目に入ったかわいい置物。 さびは経年劣化だと思うんだけれど、いい味出してるよねぇ。 実に青々とうつるフィルムだね。 遥か未来の失われし文明痕みたいで。 かしゃっ。 うだるほど暑い夏に公園で一息つくのが好きなんだよね。 お散歩するときにもよく寄ります。 頭上にまでせまる木の枝が気になったものだから撮ってみたら、赤いペットボトルのキャップかな?いいアクセントなこと。 それに、ボケてる感じ、めちゃくちゃ好きかも。 ゆったりした時間みたいなのを取りたかったのだけれど、空が露出オーバーでなんかどんよりしちゃったね。 とんぼ。 実はこのレンズ、テレ端ではピントが合わないみたい。 ピンとリングが止まるまで回してもボケてるw まあそこも愛嬌かな。 さっきの写真はピントが合ってないのにもかかわらずシャッターが切れちゃったものだから、悔しくて、トンボを見かけたときにすかさずもう一枚。 背景とか色合いはコンクリートって感じ。 公園でも目を凝らすと枝先にポツンとトンボが止まっていたのでこちらもぱしゃ

By Sakashita Yasunobu
ファイル階層を使ってメモは分類しない方がいいと思う

ファイル階層を使ってメモは分類しない方がいいと思う

結論から ObsidianやNotionを使ってメモを取るときはファイル階層(ディレクトリ階層?)を使って整理するのではなく、リンクを使ってメモを接続することで整理する方がいいと思う。 たとえば大学の講義ノート フォルダーで管理をするとこんな感じでメモを管理することになると思う。 📂月曜3限専門英語 📝第1回講義メモ 📝第2回講義メモ 📝第3回講義メモ 📝第4回講義メモ 📝第5回講義メモ 📂月曜5限環境経済学 📝第1回講義メモ 📝第2回講義メモ 📝第3回講義メモ 📝第4回講義メモ 📝第5回講義メモ 見た目にはきれいに分類できていい気分になれるのがメリット。 問題はディレクトリは管理という意味以外をもたないこと。 知識というのはそれぞれが海上の孤島のように存在していて、それらをつなげていくことが大事なのかなって思っている。 リンクで管理するとこんな感じ。 📝2025年1学期 🔗📝専門英語 🔗📝第1回講義メモ 🔗📝第2回講義メモ 🔗📝第3回講義メモ 🔗📝第4回講義メモ 🔗📝第5回講義メモ

By Sakashita Yasunobu