Obsidian v1.9.0では、NotionのDatabaseを参考にしたBasesコアプラグインが追加されました。このプラグインはデータ集合の表示機能を提供し、書籍、映画、音楽などのコレクション管理に最適です。
今回は、ノート管理により適した「ノートコレクション」として、従来Dataviewで作成していたインデックスノートをBasesの記法に変換し、両者の機能の違いを実感できるようにしました。
Database(資料庫)に対応して「庫」と訳すことも可能ですが、ObsidianのvaultやGitのrepositoryなどで既に用いられているため、「資料集合」または「資料集」と訳すことを推奨します。
1. Basesの使い方概要
まず、設定(Settings) → コアプラグイン(Core Plugins)でBasesプラグインを有効化します。Ctrl/Cmd+Pでコマンドパレットを開き、「base」と入力すると、以下の2つのコマンドが表示されます:
- Bases: Create new base:Baseノートを作成します。拡張子は .base で、プレーンテキスト形式です。.baseをテキストエディタに関連付けることを推奨します。
- Bases: Insert new base:
![[Untitled.base]]を挿入し、自動的に Untitled.base ファイルを作成します。
また、BasesはYAML形式のコードブロックを使用する方法も提供しており、例えば以下のようになります:
```base
filters:
and:
- taggedWith(file.file, "book")
- not:
- taggedWith(file.file, "textbook")
formulas:
read_status: 'if(status == "Done", "Read", "Unread")'
reading_time: 'wordCount / 250'
display:
author: Author
formula.read_status: "Reading Status"
formula.reading_time: "Est. Reading Hours"
tags: Tags
priority: Priority
views:
- type: table
name: "Reading List"
filters: 'formula.read_status == "Unread"'
order:
- file.name
- author
- priority
- formula.reading_time
- type: gallery
name: "Book Gallery"
filters: 'formula.read_status == "Unread"'
title_field: file.name
description_field: summary
- type: board
name: "Reading Board"
group_by: "priority"
title_field: file.name
description_field: summary
- type: table
name: "Completed Books"
filters: 'formula.read_status == "Read"'
order:
- file.name
- author
- priority
- formula.reading_time
```
2. 新規Baseの作成
目標:
#obsidianタグが付いたノートの一覧を作成し、インデックスノートとして利用する
【Bases: Create new base】を実行すると、指定フォルダにUntitled.base(未命名の.base)が作成され、新規タブで開かれます。
左側から、表示モード(Table)、データ件数(3,230 results)、並び替え(Sort)、フィルター(Filter)、プロパティ(Properties)などのオプションが配置されています。
2.1. データのフィルタリング:Filter
まずFilterをクリックしてフィルター条件を変更し、データ件数を絞ります。下図では、tags contains obsidianを設定することで、#obsidianタグが含まれるノートのみが表示され、件数が3,230件から332件に減少します。
2.2. 表示カラムの追加:Properties
Propertiesをクリックして表示するカラムを追加します。必要なプロパティにチェックを入れるだけで追加可能です。
例えば、YAMLセクション内のcreated、modified、tagsなどにチェックを入れます。
特殊なカラムは、Add formulaで数式を追加できます。例:created.toString().slice(0, 10)を用いて、created(作成日時)の日付部分のみを表示します。
2.3. 表示スタイル:View
1つのBaseに対して複数の表示スタイルを設定可能です。各スタイルは個別にレイアウト、フィルター、カラムを指定できます。
現在、BasesはTableとCardsの2種類のレイアウトのみをサポートしています。
- Table view:Configure viewでデータ行の高さを調整できます。
- Cards view:ノートの画像プロパティを指定する必要があるため、画像が存在しないノートを除外するために、例として
cover_image_url starts with httpというフィルター条件を追加できます。
Table表示時、カラムの内容を直接編集でき、その変更は該当ノートに即座に反映されます。
2.4. 並び替え:Sort
Sortまたは列見出しをクリックすることで、データの並び替え形式を設定できます。
2.5. データのエクスポート:results
【件数 results】をクリックすると、表示件数の制限やデータをクリップボードにコピー、または.csvファイルとして保存できます。
3. 新規Baseの挿入
![[Untitled.base]] を挿入して、Untitled.baseファイルを作成します。
4. コードブロック
BasesのYAML記法に慣れていない場合は、まずビジュアル操作で.baseファイルを作成し、その後テキストエディタで開いて内容をコピーし、Baseコードブロックとして利用することを推奨します。コードブロックの言語指定は base です。
挿入後は、Obsidian内で自分の必要に応じて編集可能です。
5. DataviewからBase記法への変換
Bases Toolbox を開き、DataviewのTABLE記述をDataview Converterページに貼り付け、Convert to Basesをクリックすると即座に変換されます。
5.1. 変換時の異常
私が利用したDataviewでは、作成日時(Property: created)の先頭10文字、つまり日付のみを表示するためにsubstring(created, 0, 10)を使用していましたが、これが原因でBasesでエラーが発生しました。以下のように修正してください:
created.toString().slice(0, 10)
6. Dataview か Bases か?
6.1. Basesの使用
- データ表示の速度において、Basesのほうが高速だと感じます。
- Dataviewのコードブロックのみを利用し、Dataviewのインラインプロパティ(プロパティ名+コロン2つで指定する方式)を使っていない場合は、Basesの使用が適しているでしょう。
DataviewのインラインフィールドとBasesを併用したい場合は、dataview-propertiesプラグインの利用を検討してください。このプラグインはインラインフィールドをYAMLセクションに同期します。
6.2. Dataviewの使用
- DataviewのList表示を使用する。
- dataviewjsを利用して、より細かな制御を行う。
6.3. Datacoreの使用?
まだ使用したことがないため、評価はできません。
7. 💡 関連リンク
💡 解說文章(繁體中文): https://jdev.tw/blog/8832/
💡 Explanation article(English): https://quaily.com/jdevtw-en/p/obs181-farewell-dataview-obsidian-bases-note-collection-practical-application-function-analysis-and-syntax-conversion
💡 解説記事(日本語): https://quaily.com/jdevtw-jp/p/obs181-farewell-dataview-obsidian-bases-note-collection-practical-application-function-analysis-and-syntax-conversion
✅ Dataview→Bases変換ツール:Bases Toolbox
✅ Bases記法: Bases syntax - Obsidian Help
✅ obsidian-dataview-propertiesプラグイン: https://github.com/Mara-Li/obsidian-dataview-properties
8. チュートリアル動画
##