Obsidian Tasksで特定のタグがあるファイルのタスクを表示・取り除く方法
Obsidianでタスク管理するためにObsidian Tasksは便利です。
ですが特定のタグがついているノートのタスクを取り除いたり、特定のタグがついているノートのタスクのみ表示が通常の使い方ではできません。(記事執筆時点)
自分の使い方ではそういうことをしたいシチュエーションがあって、できないと結構困ります。
そこで標準的な方法ではないものの、DataviewJSと組み合わせることで実現できるので方法を紹介します。
Obsidian Tasksのfileについて
Obsidian Tasksではタスクが記述されているファイルの情報を取得することができます。
じゃあそこからタグをフィルタリングすればいいのでは?と思うけど、残念ながらタグの情報は取得できません。
取得できる情報はユーザーガイドに記載されています。
Task Properties - Tasks User Guide - Obsidian Publish
Values for File Propertiesの項目task.fileで取得できる情報があり、その中にはタグに関しての記載はありません。
ソースコードを見てみてもやはりタグの情報を取得するようなことはできなさそうでした。
特定のタグがついているノートのタスクを取り除く
まずは特定のタグがついているノートのタスクを 取り除く方法です。
tasksブロックは使わずにDataviewJSのdataviewjsブロックを使います。
1 2 3 4 5 6 7
const excluded = '(' + dv.pagePaths('#取り除きたいタグ名').array() .map(x => 'path does not include ' + x) .join(') AND (') + ')' const query = ` not done ${excluded} ` dv.paragraph('`tasks\n' + query + '\n`')
やっていることはタグがついているノートのパスを取得し、そのパスが含まれていないものを取得するクエリを作成しています。
こちらのフォーラムで紹介されている方法を参考にしました。
How can I list tasks from all notes with a certain tag (using the Tasks plugin)? - Help - Obsidian Forum
特定のタグついているノートのタスクのみを表示
取り除きたいニーズがあればその逆にのニーズも大体あると思います。
今度は特定のタグがついているノートのタスクのみを表示する方法です。
1 2 3 4 5 6 7
const included = '(' + dv.pagePaths('#Game').array().map(x => 'path includes ' + x) .join(') OR (') + ')' const query = ` not done ${included} ` dv.paragraph('```tasks\n' + query + '\n```')
取り除く場合とは逆にタグがついているノートのパスを取得し、そのパスが含まれているものを取得するクエリを作成しています。
まとめ
Obsidian Tasksで特定のタグがついているノートのタスクを取り除いたり、特定のタグがついているノートのタスクのみ表示する方法を紹介しました。
機能的に標準でできても良いような気もするのですが、現状ではDataviewJSを併用して実現することになります。