はじめに

dataview は Obsidian のコミュニティプラグインの人気プラグインの 1 つである
ノートから様々な情報を抽出することが出来る
他のプラグインの前提になっていることも多い
使いこなせると Obsidian の使用用途がぐっと広がるが、日本語でまとめているページが殆どないので、使用法を記録しておく

Example Usage

機能が多すぎるのでテンプレ運用を推奨
以下は一例である

タスクテンプレ

task
from "デイリーノートのフォルダ"
where !completed

未完了のタスクを抽出する
デイリーノートにこれを入れておくとリマインダーとして機能して便利

表テンプレ

table without ID
authors[0] as "First Author", journal, year, tags, comment,
"[Go To Note]("+file.name+".md)" as note, zotero, doi
from outgoing([[]])
sort tags asc, year desc

これは私が現在使用している文献管理用のテンプレ
文献管理については別記事にて解説→Zotero×Obsidian 文献管理のすゝめ
First Author の抽出についても別記事にて解説→Templaterでフロントマターを書き換える
tags でなんとなく分類して、comment に一言コメントを追加するようにしている

抽出できる項目

ノートに記載した項目

  1. フロントマターに記載したメタデータ
  2. タグ
  3. タスク
  4. inline field

inline field とは

key:: 内容

ノートの任意のところにこの形式で記載した内容もフロントマターに記載したメタデータと同様に抽出できる

元々使用可能な項目

Property説明type
file.pathファイルのパスstring
file.folderファイルのあるフォルダstring
file.nameファイルのタイトルstring
file.linkファイルへのリンクlink
file.outlinksファイルから出ているリンクlink
file.inlinksファイルに入るリンクlink
file.tagsファイルに設定したタグlist
file.aliasesファイルのエイリアスstring
file.sizeファイルのサイズnumber
file.ctimeファイルの作成日時date
file.cdayファイルの作成日date
file.mtimeファイルの最終更新日時date
file.mdayファイルの最終更新日date
file.dayファイル名に含まれる日付date

最初に this をつけると現在のノートの情報を指定できる

this.file.day

階層化した key を使用するには

フロントマターでは key を階層化して登録することができる

key:
  key1:
  key2:
  key3:

と登録し
dataview で呼び出す際には

key.key1

などとして指定することができる

最初に抽出したい形式と key を宣言する

list

list file.name

後ろにリストアップしたいものを記載

table

table file.name, file.path

後ろに表にしたいものをコンマ区切りで羅列する

table without ID

ファイルへのリンクが必ず入るが without ID の記載で消せる

task

task

タスクを抽出できる

ちなみに

- [ ] task1
- [ ] task2 [key::]

タスクの後ろに上記の形式で inline field を設定できる

組み合わせる

list "File.name" + "=" + file.name as "ファイル名"

"" で囲むと文字列を追加できる

  • を使って組み合わせることができる
    数字や日付を取得する場合、計算式を作ることも可能
    as をつけると表示名を変更できる

複数ある値の 1 つを指定する

例えば 1 つ目に登録されたタグだけ表示したい場合は

tags[0]

数字で何番目かを指定することができる
0 から始まる点に注意が必要

特定のノートの情報を使用する

現在のノートの情報は this.を最初につける
例えば

this.file.frontmatter.key

コードを記載したノートのフロントマターから情報を入手する

this.フィールド名

現在のノートのインラインフィールドを取得する

さらに、この this の部分を別のノートのリンクにすると別のノートのフロントマターやインラインフィールドから情報を入手できる

[[他のノート名]].file.frontmatter.key

別のノートの特定の値を計算式に入れたい場合に有効

現在の時刻を取得する

date(now)

日付だけで良い場合は

date(today)

from

ノートから

from "ノート名"

ノートに記載のリンク

from outgoing([[link]])

この時、link になにも記載しないと dataview のコードを記載したノートが対象になる

タグから

from #タグ名

除外するときは - をつける

from -"ノート名"

組み合わせ

from "ノート名" and #タグ名

from -"ノート名" or #タグ名

where

key の有無で絞る

key が登録されているノートだけに絞る

where keyの名前

計算式を作る

絞り込みができる

>, >=, <, <=, =, !=

!=はノットイコール

where file.size >30

where file.name = "ファイル名"

など文字列の場合はダブルクォーテーションで囲む

number や date に関しては四則演算を用いた計算式を作ることができる

sort

昇順

sort "項目名" asc

asc はなくても自動で昇順

降順

sort "項目名" desc

複数の場合

sort "項目名" asc, "項目名" desc

group by

表をグループ分けできる

group by file.ctime

flatten

1 つの key に複数のデータを登録した場合に別々の項目として扱う
group by の逆と考えれば良い
“Group by” Woes - Help - Obsidian Forum

limit

表示件数に制限を加える

limit 10

Functions

dataview ではかなり多くの機能を搭載している
以下は一例

contains

where contains(file.name, "Daily Note")

特定の文字列を含む

length

where length(file.name) > 10

文字数で指定

sum

sum(rows.file.size)
group by ""

列の合計の場合は rows.を用いてから group by でまとめる

他にも色々ある様子
Functions - Dataview

Advanced Usage

ちょっと複雑だが有用そうな使用例を別記事にまとめた→Dataviewを使い込む

また、設定で dataviewjs を on にすると javascript を組み込めるようになるのでプログラミングに精通している場合は大体なんでもできるようになりそう

私は学習コストを考慮して js までは使用しない方針

注意点

エンコード

dataview ではリンクを認識すると自動的にエンコードしてしまう
(※エンコードとは URL に使用できない日本語などの文字を使用できる文字に変換すること)
Web サイトへのリンクの場合は問題ないはずだが、ローカルフォルダへのリンクを表示する際に問題になることがある
M1Mac の場合はエンコードされたローカルリンクも有効だが、windows や他の環境では有効ではない事がある
対策として、リンクに日本語などのエンコードの対象になる文字を入れないようにする

参考

An Introduction to Dataview - Obsidian Hub - Obsidian Publish
Data Types - Dataview

おわりに

dataview はカスタマイズ性が非常に高いツールである
基本的な使用法はマスターしたい
この記事は備忘録をかなり兼ねているので、適宜情報を追加しておこうと思う