
Obsidianを使い込んでいくと、多くの人が直面しやすい壁があります。それは増え続けるノートをどう見つけて再利用するかという問題です。最初はフォルダ分けで整理できていたとしても、ノートが数百、数千と増えるにつれて、どこに置いたか思い出せなかったり、複数テーマにまたがる情報が埋もれてしまったりするのは珍しくありません。せっかく記録したアイデアや知見が、検索に引っかからず活用されないまま死蔵されてしまうのは、知的生産において大きな損失になり得ます。
そんな散らばった情報を条件で集めて可視化する手段として有力なのが、コミュニティプラグインのObsidian Dataviewです。Dataviewは、ノートに付与したプロパティや特定形式のフィールドを読み取り、条件に従ってリストや表として自動生成できます。一見するとエンジニア向けの難しいツールに見えるかもしれませんが、安心してください。Dataviewは、基本的な一覧表示やフィルタリングであれば、テンプレートをコピペして少し書き換えるだけでも十分に便利さを体感できます。また、日本語で書いた本文のノートでも問題なく動作します。ポイントは本文が日本語でもOK、ただしプロパティのキー名の付け方は工夫すると安定するという点です。
この記事では、Dataviewの導入から、つまずきやすい設定、そして明日から使える基本クエリ例まで、専門用語をできるだけ噛み砕いて解説します。
- Dataviewで静的なノートを「条件で集まる一覧(動的ビュー)」として扱う考え方
- コピペですぐに試せる基本クエリ例(TABLE・LIST・TASKなど)
- 日本語環境でハマりやすい「プロパティ名(キー)」運用のコツと解決策
- タスク管理や読書ログ、習慣ログを集めて見える化する具体的な設計例
Obsidian Dataviewの導入と基本操作
まずは、この強力なプラグインを導入するための第一歩を踏み出しましょう。ここでは、Dataviewがどのように情報を処理するのかという基本的な仕組みから、実際のインストール手順、そして日本人のユーザーが最も躓きやすいプロパティ設定について、専門用語を避けながら丁寧に解説します。
初心者でもわかる使い方の全体像
Obsidian Dataviewを一言で表現するならば、「ノートの中に散らばったメタデータを条件で集計し、表やリストとして表示する“ビュー生成エンジン”」と言えます。
従来のメモアプリやファイル管理の考え方では、情報は「フォルダ」という箱に入れて整理するのが一般的でした。しかし、この方法では「ある情報はAのフォルダにも、Bのフォルダにも属する」といった場合に破綻しやすく、また「先週作成したファイルだけを見たい」「評価が星5の本だけを並べたい」といった動的な要望に応えるには、いちいち検索機能を呼び出して手動で探す必要がありました。これは非常に受動的で、時間のかかるプロセスです。
一方で、Dataviewを導入すると、パラダイムが劇的に変わります。あなたはノートに対して、「これは読書メモです」「著者は夏目漱石です」「評価は星5です」といった「属性(プロパティ)」を付与しておくだけで良くなります。あとはDataviewに対して「評価が星5の読書メモを出して」と命令(クエリ)を出せば、フォルダの場所に関係なく、瞬時にそのリストが生成されます。しかも、新しいノートを追加すれば、リストも自動的に更新されます。
ここで重要なのは、Dataviewが作るのは基本的に「表示(ビュー)」であり、ノートそのものを書き換えたり、データベースファイルを作成したりするわけではないという点です。Vault(保管庫)上のMarkdownファイルを、あたかもデータベースであるかのように参照できるようにする「魔法のメガネ」をかけるイメージを持つと理解しやすいでしょう。
ここがポイント Dataviewは「情報を整理する時間」を極限までゼロに近づけ、集まった情報から新たな洞察を得るための「活用する時間」を生み出してくれます。
インストールから初期設定の流れ
導入は非常にシンプルですが、その後の設定次第で使い勝手やセキュリティリスクが大きく変わります。手順を一つずつ確認していきましょう。
まず、Obsidianの画面左下にある歯車アイコン(設定)をクリックし、メニューから「コミュニティプラグイン」を選択します。「閲覧」ボタンを押し、検索ボックスに「Dataview」と入力してください。開発者「Michael Brenan」氏によるプラグインが表示されるはずですので、「インストール」をクリックし、完了後に必ず「有効化」のスイッチをONにします。
有効化が完了したら、Dataviewの設定画面を開いてみましょう。英語のメニューが並んでいますが、特に確認すべき重要な項目は以下の通りです。
| 設定項目 | 推奨設定 | 詳細な理由と解説 |
|---|---|---|
| Enable JavaScript Queries | ON | デフォルトではOFFになっていますが、ONにすることを推奨します。これをONにすることで、dataviewjs というより高度で柔軟なスクリプト機能が利用可能になります。ネット上で公開されている便利なコード(ヒートマップや複雑なグラフなど)をコピペして使う場合に必須となる機能です。 |
| Enable Inline Queries | ON | これも非常に重要です。文章の途中に = this.file.name のように記述して、データを埋め込む機能を使えるようにします。例えば、「現在のプロジェクトの進捗は 50% です」といった動的な値を文章内で扱えるようになり、レポート作成などで重宝します。 |
| Enable Inline Field Highlighting | ON | エディタ上で key:: value という形式でメタデータを記述した際、それを視覚的にわかりやすくハイライト表示してくれます。入力ミスに気づきやすくなるため、ONにしておくのが無難です。 |
セキュリティに関する重要な注意点 「Enable JavaScript Queries」を有効にすると、ノート内に記述されたDataviewJSブロックのJavaScriptコードが実行されるようになります。これは非常に強力な反面、インターネット上の信頼できないソースからコピーしたコードに悪意のあるスクリプトが含まれていた場合、それが実行されてしまうリスクがわずかながら生じます。信頼できる情報源のコードだけを使用し、内容が全く分からないコードを不用意にコピペするのは避けるようにしてください。
日本語でのプロパティ設定のコツ
日本人のObsidianユーザーがDataviewを使い始めたときに、最も多くの人が躓き、挫折してしまう原因が「プロパティ(Frontmatter)における日本語キーの扱い」です。
Obsidian v1.4以降、ノートの先頭にメタデータを記述する「プロパティ」機能が標準化され、GUIで管理できるようになりました。ここで多くの人が、直感的に「作成日」「タグ」「ステータス」といった日本語の項目名(キー)を設定してしまいます。しかし、Dataviewのクエリ言語(DQL)は、基本的には英語ベースで設計されており、スペースや特殊文字を含む日本語のキーをそのまま扱うと、予期せぬパースエラー(解析失敗)を引き起こすことが多々あります。
日本語ユーザーがつまずきやすいのは「本文が日本語だから」ではなく、「プロパティのキー名に日本語・スペース・記号を混ぜたときに、クエリが書きにくくなる」という点に尽きます。環境や書き方によっては動作することもありますが、運用としては非常に不安定になりやすいのです。
これを回避するためのベストプラクティスは、「キー(項目名)は半角英数字、値(内容)は日本語」という運用ルールを徹底することです。
推奨される設定例
- 悪い例(書きづらい・ミスしやすい):
ステータス: 完了、読んだ日: 2024-01-01 - 良い例(安定しやすい):
status: 完了、read_date: 2024-01-01
「でも、プロパティの表示が英語だと直感的にわかりにくい」という場合は、Obsidianの機能ではなく、テンプレートや見出し、あるいはDataviewでの表示時にカラム名を日本語に置換する(AS "日本語名")などの工夫で補うのがおすすめです。どうしてもキー自体を日本語にしたい場合は、row["日本語キー"] のように特殊な記法が必要になり、メンテナンス性が低下します。まずは英数字キーで統一しておく方が、将来的なトラブルを確実に減らせます。
すぐに使えるテンプレートの活用
理屈はさておき、まずは動かしてみることが理解への近道です。以下のコードをコピーして、Obsidianの新規ノートに貼り付けてみてください。これは「最近更新したノート」を自動的にリストアップするシンプルなコードです。
※以下のコードブロックは、バッククォート3つ(```)の後に dataview と書いて記述します。
TABLE file.mtime as "更新日時", file.folder as "保存場所" FROM "" WHERE file.name != this.file.name SORT file.mtime DESC LIMIT 10
これをプレビューモード(またはライブプレビュー)にすると、自動的にあなたのVault内の最新ノート10件が表形式で表示されます。これがDataviewの威力です。いちいち手動でリンクを貼らなくても、常に最新の状態が保たれるのです。
コードの解説(一行ずつの意味)
TABLE ...: 表形式で出力します。file.mtime(更新日時)やfile.folder(フォルダ名)を表示項目として指定しています。FROM "": Vault全体を対象にします。特定のフォルダだけ対象にしたい場合はFROM "Daily Notes"のように指定します。WHERE ...: 条件で絞り込みます。file.name != this.file.nameは「このリストを表示しているノート自身を除外する」という意味です。SORT ... DESC: 更新日時(file.mtime)の新しい順(DESC)に並び替えます。LIMIT 10: 表示件数を10件に制限します。数千件のノートがある場合、制限をかけないと動作が重くなる原因になります。
もし、基本的なObsidianの使い方やMarkdownの記法そのものに不安がある場合は、先にObsidianの基本的な使い方を解説した記事を確認しておくと、ここからの内容がよりスムーズに理解できるはずです。
DQLを使ったクエリの基礎知識
Dataviewを操作するための言語をDQL (Dataview Query Language) と呼びます。SQLに影響を受けた読みやすい記法ですが、SQLそのものではなく、Markdownノートとそのメタデータを扱うための独自仕様です。
DQLのクエリは、基本的に以下の4つの主要なコマンド(句)の組み合わせで成り立っています。この順番は決まっており、順序を間違えるとエラーになります。
| コマンド順序 | コマンド名 | 役割とイメージ | 具体的な記述例 |
|---|---|---|---|
| 1 | QUERY-TYPE (必須) | 「どのような形式で出力するか?」 レストランで「お皿で出すか、お弁当箱で出すか」を決めるようなものです。 | TABLE(表) LIST(箇条書き) TASK(タスクリスト) CALENDAR(カレンダー) |
| 2 | FROM (推奨) | 「どこから探してくるか?」 食材を「冷蔵庫から取るか、野菜室から取るか」を指定します。フォルダやタグを指定します。 | FROM "01_Inbox"(フォルダ) FROM #todo(タグ) FROM "Daily" AND #review(組み合わせ) |
| 3 | WHERE (任意) | 「どのデータを選別するか?」 「賞味期限切れを除く」「赤いものだけ選ぶ」といったフィルター機能です。 | WHERE file.size > 1024(サイズ条件) WHERE contains(tags, "book")(タグ条件) |
| 4 | SORT (任意) | 「どういう順番で並べるか?」 「大きい順」「新しい順」など、提供する順番を整えます。 | SORT file.ctime DESC(作成日の新しい順) SORT rating ASC(評価の低い順) |
最初は難しく感じるかもしれませんが、基本形は「TABLE ... FROM ...」だけです。これさえ覚えておけば、まずは自分のノート一覧を作ることができます。そこから、「ちょっと条件で絞りたいな」と思ったら WHERE を足し、「並び順を変えたいな」と思ったら SORT を足していく。このように、必要に応じてブロックを積み上げていく感覚で学習を進めていけば、決して挫折することはありません。
Obsidian Dataviewの応用テクニック
基本操作とDQLの仕組みがわかったところで、ここからはさらに実践的な応用テクニックに踏み込んでいきましょう。単にファイル一覧を出すだけでなく、タスク管理システムを構築したり、読書ログをリッチなビジュアルで管理したり、毎日の習慣を可視化したりと、Dataviewの可能性は無限大です。ここからの内容を実践すれば、あなたのノートが単なる記録から「使えるシステム」へと進化します。
テーブルとリストで情報を整理
Dataviewで最も頻繁に使う表示形式が TABLE(表)と LIST(リスト)です。この2つは似ていますが、情報の性質によって明確に使い分けることで、視認性と実用性が格段に向上します。
LIST(リスト)を使うべき場面
LISTは、情報の構造がシンプルで、主に「存在を確認したい」場合や「リンク集を作りたい」場合に適しています。箇条書き形式で出力されるため、スマートフォンなどの狭い画面でも見やすいのが特徴です。
活用例:書きかけの「アイデア」ノート一覧 タグに #idea が付いているノートを一覧表示し、クリックしてすぐにアクセスできるようにします。
LIST FROM #idea SORT file.ctime DESC
TABLE(テーブル)を使うべき場面
TABLEは、複数の属性(メタデータ)を横断的に比較・分析したい場合に適しています。Excelのスプレッドシートのような感覚で情報を扱えます。
活用例:リッチな読書管理リスト 「書名」だけでなく、「著者」「評価」「読了日」「カテゴリ」といった情報を一覧で確認したい場合は、TABLE一択です。
TABLE author as "著者", rating as "評価", finished as "読了日" FROM #book WHERE status = "read" SORT rating DESC
また、ここで覚えておきたい重要なテクニックが TABLE WITHOUT ID です。通常のTABLEクエリでは、一番左の列に必ず「ファイル名(リンク)」が表示されますが、場合によっては「ファイル名は不要で、中身のデータだけ見たい」あるいは「ファイル名も自分でカスタマイズして表示したい」ということがあります。その場合、WITHOUT ID を付けることで、デフォルトの第1列を非表示にし、完全に自由な列構成を作ることができます。
TABLE WITHOUT ID link(file.link, title) as "書名", author as "著者" FROM #book
このように記述すると、プロパティの title を表示名としたリンクが生成され、ファイル名(例:202405201200.mdのような無機質な名前)を隠したまま、美しいリストを作成することが可能です。
タスク管理を効率化するコード
Obsidianをタスク管理ツールとしても活用しているユーザーにとって、Dataviewはまさに革命的な存在です。通常、タスク(- [ ] タスク名)は日々のデイリーノートや、プロジェクトごとの議事録ノートなどに散らばって記述されることが多く、それらを一元管理するために「タスク転記」という無駄な作業が発生しがちです。しかし、Dataviewを使えば、Vault内のあらゆる場所に点在する未完了タスクを、一つのダッシュボードに自動的に集約することが可能になります。
最も基本的かつ強力なタスク収集クエリは以下の通りです。
TASK FROM "Projects" WHERE !completed GROUP BY file.name
このクエリは、「Projects」フォルダ内にある全てのノートをスキャンし、完了していない(!completed)タスクだけを抽出して表示します。さらに GROUP BY file.name をつけることで、どのノートに含まれているタスクなのかをグループ化して表示してくれるため、タスクの背景情報(コンテキスト)を見失うことがありません。
Dataviewの特筆すべき機能は、「双方向の同期(インタラクティブ性)」です。Dataviewで生成されたリスト上のチェックボックスをクリックして完了にすると、元のノートにあるチェックボックスも自動的に書き換えられ、- [x] に変化します。つまり、Dataviewは単なる「閲覧用ウィンドウ」ではなく、「操作盤(コントロールパネル)」として機能するのです。
応用:期限切れタスクの自動あぶり出し
さらに、タスクにメタデータとして日付情報(例:[due:: 2024-12-31] やTasksプラグイン形式の 📅 2024-12-31)を含めている場合、期限が過ぎているにもかかわらず完了していない「ゾンビタスク」を自動的に抽出することも可能です。
TASK WHERE !completed AND due < date(today)
このクエリをObsidianの「ホームページ」や「ダッシュボード」となるノートに設置しておけば、忘れ去られたタスクを即座に発見し、リスケジュールや削除といった対処を行うことができます。「Tasks」などの専用プラグインも優秀ですが、Dataviewなら「特定のタグがついた、期限切れの、プロジェクトAのタスク」のように、自分の好きな条件で自在にフィルタリングできる柔軟性が最大の魅力です。
Tasksプラグインとの住み分け 「繰り返しタスク」や「完了日の自動記録」といった高度な機能は、専用のTasksプラグインの方が優れています。Dataviewはあくまで「表示・抽出」に特化させ、日々のタスク操作はTasksプラグインで行う、というハイブリッド運用が最も効率的です。
日付や優先度で自在にソートする
データ量が増えれば増えるほど、情報の「並び順(SORT)」は重要になります。Dataviewの SORT コマンドは、Excelの並び替え機能以上に柔軟で、複数の条件を組み合わせた高度なソート順を定義できます。
例えば、タスク管理において「優先度(priority)が高い順に見たいが、同じ優先度なら締切(due_date)が近い順に見たい」というケースはよくあります。これを実現するには以下のように記述します。
SORT priority DESC, due_date ASC
ここでポイントなのが、DESC(降順)と ASC(昇順)の使い分けです。
- 数値や優先度: 大きい方が重要な場合(例:Priority 1 < 5)は
DESC(降順)を使います。 - 日付や期限: 日付が古い(今日に近い、あるいは過去)方が急ぎの場合は
ASC(昇順)を使います。
ファイル名から日付を自動認識する機能(Implicit Fields)
また、Obsidianでデイリーノート運用をしている人には非常に嬉しい機能として、「ファイル名からの日付自動抽出」があります。もしあなたのノートファイル名が 2024-05-20.md や 2024-05-20_Monday.md のような形式(YYYY-MM-DD)であれば、Dataviewは自動的にそのファイルが「2024年5月20日」の日付データを持っていると認識し、file.day という隠しプロパティにその日付を格納します。
わざわざプロパティ欄に date: 2024-05-20 と手入力しなくても、以下のクエリを書くだけで、デイリーノートを時系列順に綺麗に並べることができます。
TABLE file.day as "日付", summary as "今日のハイライト" FROM "Daily Notes" SORT file.day DESC
この機能を活用すれば、過去の日記を振り返ったり、特定の期間(例:今月のノート)だけを抽出したりといった操作が非常にスムーズになります。「日付」という最も基本的なメタデータが自動化されるだけで、ノート管理のストレスは大幅に軽減されるはずです。
このコードを実行すると、自動的に計算された達成率の数値とともに、緑色のバーが伸び縮みする動的なダッシュボードが生成されます。数字の羅列だけでは感じにくい「進捗」も、こうして視覚化されることで達成感が生まれ、モチベーション維持に大きく貢献します。このように、HTML要素(dv.el)を直接生成できるため、デザインの自由度も格段に高まります。
また、DataviewJSは情報の「集約」にも威力を発揮します。例えば、複数のプロジェクトノートに分散している「未解決の課題」や「要注意事項」だけを吸い上げて、一つのアラートボックスとしてホームページ(起動直後の画面)に表示するといった運用も可能です。dv.pages().file.tasks を操作することで、タスクのテキストを正規表現で加工して表示するなど、痒い所に手が届くカスタマイズが可能になります。
パフォーマンスへの影響について
DataviewJSは非常に強力ですが、複雑なループ処理や重い計算(数千ファイルの全文検索など)を行うコードを書くと、Obsidianの起動や動作が目に見えて遅くなることがあります。特に、dv.pages() で全ファイルを対象にする処理は避け、可能な限りタグやフォルダで範囲を絞ってから処理を行うように心がけてください。
カレンダー表示で習慣を可視化
日々の積み重ねを可視化することは、新しい習慣を定着させる上で最も効果的な方法の一つです。「Don't break the chain(鎖を断ち切るな)」という言葉がある通り、続いている記録を見るだけで「今日もやらなきゃ」という心理的スイッチが入ります。Dataviewの CALENDAR クエリタイプを使えば、外部の習慣管理アプリを使わなくても、Obsidianの中で完結する強力なハビットトラッカー(習慣追跡)システムを構築できます。
基本的な使い方は非常にシンプルです。デイリーノートなどのファイル名やプロパティに日付情報が含まれているノートを対象に、カレンダー形式でマッピングを行います。
CALENDAR file.day
FROM "Daily Notes"
WHERE exercise = true
上記のコードは、「Daily Notes」フォルダにあるノートのうち、exercise プロパティが true(またはチェックボックスがON)になっている日だけに「ドット」を表示するカレンダーを生成します。これを「読書」「筋トレ」「勉強」など、習慣ごとに並べて表示しておけば、どの習慣が途切れがちか一目瞭然になります。
しかし、標準の CALENDAR 表示はあくまで「点」が表示されるだけのシンプルなものです。「もっとGitHubのコントリビューショングラフ(草)のような、濃淡のあるヒートマップを作りたい」という方もいるでしょう。その場合は、コミュニティプラグインの「Heatmap Calendar」などを併用するか、DataviewJSを使ってデータを整形し、グラフ描画ライブラリに渡すという高度な連携技を使います。
以下は、DataviewJSを使って簡易的なテキストベースの「週間達成状況」を表示するアイデアです。
```dataviewjs
const habits = dv.pages('"Daily Notes"')
.where(p => p.file.day >= dv.date("today").minus(dv.duration("7 days")));
dv.table(["日付", "読書", "運動", "瞑想"], habits.sort(p => p.file.day, "desc").map(p => [
p.file.link,
p.reading ? "✅" : "⬜",
p.exercise ? "✅" : "⬜",
p.meditation ? "✅" : "⬜"
]));
```
このように、過去1週間の実績を〇×表のようにリストアップすることで、週末の振り返り(週次レビュー)が驚くほどスムーズになります。「記録する」という行為自体のハードルを下げ、自動的に「見える化」される環境を作る。これこそが、三日坊主を防ぎ、長期的な自己成長を支えるためのDataview活用術なのです。
カレンダー活用のアドバイス
カレンダー表示は「空白」が目立つとモチベーションが下がる原因にもなり得ます。最初はあまり多くの習慣を詰め込みすぎず、「これだけは絶対にやる」という1つか2つの習慣からトラッキングを始めるのが、挫折しないコツです。
Obsidian Dataviewで構築する知的生産
ここまで、Obsidian Dataviewの導入から基本的なクエリの書き方、そしてJavaScriptを用いた高度な活用法までを解説してきました。おそらく、読み始めた当初よりも「自分にもできそう」「こんな風に使ってみたい」というイメージが具体的に湧いてきているのではないでしょうか。
最後に改めてお伝えしたいのは、Obsidian Dataviewは単なる「検索ツール」や「便利機能」の枠を超えた存在であるということです。それは、あなたの脳内に散らばる断片的な記憶やアイデアを有機的に結びつける「結合組織」のような役割を果たします。
私たちは普段、何かを考えるときに「あの情報はどこだっけ?」と探すことに多くの脳内リソースを消費してしまっています。しかし、Dataviewによって「必要な情報は、必要な条件で、必要な場所に自動的に集まってくる」という環境が整えば、脳のリソースを本来の目的である「思考」や「創造」に100%注ぎ込むことができるようになります。過去の自分が書いた何気ないメモが、Dataviewを通じて現在のプロジェクトの文脈で再浮上し、新たなひらめきを生む。これこそが、Obsidianが目指す「第二の脳」としての真価であり、Dataviewはその中核を担うエンジンなのです。
最初はコピペしたコードを動かすところからで構いません。少しずつパラメータを変え、自分のワークフローに合わせてカスタマイズしていく過程そのものが、あなたの知的生産システムを磨き上げる旅路となります。ぜひ、この強力なデータベース機能を使い倒し、あなただけの最強のナレッジベースを構築してください。