見出し画像

【Obsidian】dataviewの使い方

dataviewはデータベースを作れるObsidianのコミュニティプラグインです。

ダウンロード数は2022年2月20日現在で147,826。コミュニティプラグインの中では第4位の人気を誇ります。

公式ドキュメントが用意されているのですが、正直難しくて何言ってるかわかりませんでした。なので、私はもっぱら海外有志の使い方が集まったforumを読んでいます。やっぱり他の人の例は参考になるな、としみじみ感じているので、私もここで書いておこうと思います。


できることは基本的に、リスト表示・テーブル表示・タスク表示です。指定した条件でfileやタスクを引っ張ってこれます。ちなみに、最近はカレンダー表示というものが追加されて、その日にいくつfileを作ったかドットで表示できるようになったみたいですね。

ファイル名に指定した文字が含まれているものを全て並べる

たとえばファイル名に「dataview」と入ったファイル全てを並べたいな〜というときがあります。そういうときはこれを使います。

```dataview
LIST
FROM ""
WHERE contains(file.name,"dataview")
```

WHEREをつけると条件を絞れます。
contains(検索範囲,"指定語句")を使えば、「file.name(ファイル名)に"指定語句"がcontains(含まれる)もの」をリスト表示できます。

日付指定

今日作成したファイル、昨日作成したファイル

file.cdayを使うことでファイルの作成日を指定することができます。

```dataview
LIST 
FROM ""
WHERE file.cday = date(today)
```

date(today)の部分をdate(yesterday)に変えると、昨日作成したファイルの一覧になります。
この指定方法はobsidianを開いている日付によって左右されるので、見る日によって結果が違います。2月20日の結果は2月20日に作成したファイル、2月21日の結果は2月21日に作成したファイルになります。

特定の日付指定

「デイリーノートにその日に作ったファイルを表示したいから、結果は変わって欲しくない」というときがあります。そういうときは、date("日付")で絶対指定ができます。

例)WHERE file.cday = date("2022-02-20")

この""の中が今日の日付になるようなテンプレートにしておきます。

```dataview
LIST
FROM "" 
where file.cday = date("{{date}}")
```

たとえばこんな感じでしょうか。{{date}}はCalendarプラグインの記法だったと思いますが、こうしておけば{{date}}は自動で日付に置き換わるので、結果はdate("2022-02-02")と同じことになります。

他にも、前回のNoteでも触れましたが、this.file.dayを使う手もありますが、結果は同じなのでここでは割愛します。

期間指定

7日以内に作成したファイルを並べる

```dataview
TABLE date(today) - file.mday AS "前回の修正から"
FROM #trial
WHERE date(today) - file.cday <= dur(7days)
SORT file.cday asc
```

「#trialというタグをつけたファイルのうち、今日-ファイル作成日が7日以下のものを作成日の昇順で並べ、その横に『前回の修正から』というタイトルで今日-ファイル修正日を表示する。」

結果はこんな感じ↓ 空白なのは今日作成したからです。

次のように、作成日を表示させることもできます。

```dataview
TABLE file.cday AS "作成日"
FROM #trial
WHERE date(today) - file.cday <= dur(7days)
SORT file.cday asc
```

作成してから7日以上14日以内のファイル

TABLE date(today) - file.mday AS "前回の修正から"
FROM #trial
WHERE date(today) - file.cday >= dur(7days) 
 AND date(today) - file.cday <= dur(14days)
SORT file.cday asc

改行とか大文字小文字は結果に影響ないっぽいです。
そういえばこれだと7日前に作成したものが両方に出てくるのかな。dur(8days)とかでもよさそうですね。

作成時間を横に表示させる

上で書いたように、TABLEを使うことで検索結果の横に作成日を表示させることもできます。
また、file.cday(作成日)やfile.mday(修正日)だけでなく、file.ctime(作成時間)やfile.mtime(修正時間)を使うことで、時間も表示できます。

file.ctime

ただ、一つ問題が。
これでいいときはいいんですが、ちょっと表記長いですよね。
たとえば、「今日のfile」を表示させているときは時間だけでいいです。
そんなときはdateformatをします。

すっきりしました。(これは作成日が違うファイルでしたが・・)

file.ctimeをdateformat(file.ctime,"HH:mm")に変えます。
そうすると、結果が"HH:mm"というフォーマットに直されるので、時間だけが表示されます。もちろん、file.mtimeにかえても大丈夫です。

今週のデイリーノートの特定のヘッダーの下のタスクを並べる

TASKを使うとタグ付けしたファイルからタスクを引っ張ってこれます。
また、Group by headerを最後に入れると、ヘッダーごとにまとめて表示してくれるので便利です。このあたりは簡単ですね。

最近、特定のヘッダーの下にあるタスクだけを引っ張ってくることができたので共有させてください。

```dataview
TASK from "100-daily notes"
where file.day >= date("2022-02-14") 
 AND file.day <= date("2022-02-20") 
 AND contains(string(section), "⭕ Things")
```

fromのあとの"100-daily notes"や"⭕️ Things"などを自分の条件に合うように変えてください。

file.dayはファイル名に含まれる日付を指すもので、デイリーノートやzettelkastenを扱うときに重宝します。
今週のものだけ表示させたかったので、テンプレートに{{monday:YYYY-MM-DD}}などをいれて「月曜から金曜までのデイリーノート」を指定しました。ここはもうちょっとうまいやりかたがあるのかな、とも思いますが、いまはよくわかりません。file.weekを使ってもうまくいかないので放置しています。

containsは上でも出てきました。string(section)に"指定文字"が含まれるもの、という条件です。なぜsection(string)ではないのかさっぱりわかりませんが、javascriptを勉強すればわかるでしょうか・・。

ちなみに、!completedをANDでつなげると、未完了のタスクだけが表示できます。

よく使っているのは、だいたいこんな感じです。
この他にも、javascriptを使ったdataviewjsがあるのですが、無印dataviewでもわりといろんなことができるな、ということがいろいろ触ってみてわかったので共有しました。参考になると嬉しいです。

この記事が気に入ったらサポートをしてみませんか?