二千三百五十五年

"Making peace to build our future, Strong, united, working 'till we fall."

Obsidian/Dataviewによるタスク管理【2024-05-29】

ObsidianのDataviewプラグインを使えば、同時並行して進められている大量のタスクを簡単かつフレキシブルに、しかもその背景情報と紐づいた形で管理することができます。その詳細について、私のやり方を提示する形で説明していきたいと思います。

まず: Obsidianとは?

Obsidianとは、メモアプリであり、Markdownエディタであり、あなたの第二の脳になりうる、極めて強力なデータベース形成ツールです。

Markdownが使えるので、こういう記法を全部使ってメモが取れる

Obsidianの機能には色々ありますが、そのうちで最も中核的かつ強力な機能が内部リンクです。EvernoteやNotionのような類似サービスを使ったことのある方にはイメージしやすいかもしれません。Obsidianでも、メモとメモの間にリンクを作り、関連性の高い情報を柔軟にまとめていくことができます。

ノートの中に別のノートへのリンクを埋め込み、知識を結合

そればかりか、Obsidianでは、そうやって作ったメモ同士の関係性をグラフとして可視化することもできるのです!

実際に役に立つかというとそうでもないが、それはそれとしてめちゃくちゃ()える機能

データベース全体のグラフを作ることだってできるのだ!

それで: Dataviewとは?

Dataview。それは、Obsidianの表現力を支えている無数のコミュニティプラグイン1の一つです。強力な検索・クエリエンジンとして、あなたのデータベースの整理を手伝ってくれます。

導入方法

ここから

こうして

こう

インストールし、有効化もしてください。

ここをね、こう

設定で日時の表示フォーマットを変更するのをオススメします。

日本人になじみ深いのはこの方式

使用例

Dataviewでは、あなたのVault2全体から特定の条件を満たすファイルを検索して一覧表示したり、箇条書きにしたリストから要素を抽出したりすることができます。

DQLという独自のクエリ言語が実装されており、例えばこんなコードを

TABLE dateformat(file.mtime,"HH:mm") AS "編集" // 表示するものの定義
FROM ""                                       // Vault全体から検索
WHERE date(today) = file.mday                 // 編集日が「今日」のものだけ抽出
SORT file.mtime desc                          // 編集時間順にソート

ノートの中に埋め込むことで

こんな具合に、今日編集したファイルを一覧にして表示したりできる

めちゃくちゃ頑張れば複式簿記の帳簿を作ったり3もできる。こちらは後日紹介予定

ではでは: Dataviewによるタスク管理

そもそも論として、我々はなぜタスク管理を行うのでしょうか?機能設計を行うために先んじて、それの供せられるべき需要を明らかにする必要があるでしょう。

私は、タスク管理の骨子とは、抱えているタスクを外部に記憶させることによるワーキングメモリの拡大と、個別のタスクの種別、優先度、あるいはそれらが関係して生み出すタスク全体の構造を可視化することによる管理コストの低下にあると考えています。

このうち前者: ワーキングメモリの拡大の実現は簡単です。タスク管理を行う専用のノートを用意しておき(私はそのためだけの"行動計画.md"というノートを用意しています)、そこにこんな感じでタスクの箇条書きを連ねていき、そのページを見ることを習慣づければそれでよいからです。

ただ箇条書きで「今やる気があるタスク」を体系化しただけ。
しかし、これ以上のものが必要だろうか?

書きかけの原稿だったり、関連するノウハウの殴り書きだったりをまとめておける

これだけでも一定の機能はします。ですが、このタスクリストが100行200行と拡大していくとそうはいかず、簡単に全体像を把握しきれなくなります。しかし、我々の仕事が我々の認知能力に制約されていてはしょうがないので、これを解決しようという動機も当然発生するわけです。

そこで後者: 構造の可視化を行うための手段として、Dataviewのメタデータを利用することができます。

メタデータによる箇条書きリストからの検索

Dataviewで扱えるファイルや箇条書きリストにはメタデータが付与されています。例えば最終編集日時や、ファイル自体の名称などです。また、詳細は公式ドキュメント4に譲りますが、[metadataname:: content]という形式の記述をすることで、自分が定義したメタデータを後から付与することができます。これは箇条書きの一つ一つの要素にも有効です。

なので、例えばこのように箇条書きのうちで注力したいものに[focus::1]とでもメタデータを付与してやり、

これに手を付けないといけない

いい感じに抽出するコードを書くことで、

TABLE WITHOUT ID L.text AS "FOCUS" // 表として表示するものの定義
FROM "行動計画.md"                  // 特定のファイルからのみ検索 
FLATTEN file.lists AS L            // ファイル内の箇条書きをリストとして扱う
WHERE L.focus                      // リストのうち、"focus"のメタデータがあるもののみ表示
SORT L.focus asc                   // focusの値に応じてソート

注力したいもののみをリストアップすることができます。

メタデータの型は文字列でも日付でもいいので、同じ要領で締め切り管理もできる

この方式により、タスクがいくら増えても必要に応じて注力すべきもののみをピックアップしたり、締め切りの近いタスクを過剰に抱えていないか点検したりすることが可能です。

さらに: Outliner

箇条書きしたタスクの一覧を整理するのは大変ですよね。

優先順位に応じて上下を入れ替えたりしたいところですが、逐一切り取り+貼り付けをするのでは手間が掛かりすぎます。

しかし、当然ながら、そういった不満を解決してくれるコミュニティプラグインも当然存在しています。Outlinerです。

箇条書きの階層構造を維持したまま、好きなだけ上下を入れ替えることが可能

結語

私はこのようにしてObsidianでタスク管理をやっています。必要な基本的機能はだいたい押さえていると思いますし、一定の拡張性も担保されているので便利です。何より、Obsidianに形成した自分のデータベースと有機的に結合できるので、すぐさま背景情報を参照することも、逆にタスクに付随して発生した知見・議事録・確認事項の一切合切の忘れられることのないように記録していくことも容易で、そこらへんのタスク管理ソフトよりもよほど使い出があると思います。


  1. ユーザーが開発しているオープンソースの追加機能。Obsidianはこのコミュニティプラグインの開発が盛んで、あったらいいな、がだいたい実在している。
  2. Obsidianでまとめたノートなどが格納される一番上位のフォルダのこと。ここでは「ノート全体」くらいの意で捉えておけば問題ない。Obsidianはローカルで動作するので、ノートの.mdファイルも、Dataviewなどのプラグインのコードも、すべてVaultとして指定されたフォルダの中に格納されていく。
  3. 詳細は省くが、dataviewjsというdataviewの機能を使うことで、検索したファイルのコンテンツを読み出し、javascriptで処理できるようになる。あとは正規表現なりを使ってどうとでもできる。参考: https://note.com/masuipeo/n/nfc54193b13ee
  4. https://blacksmithgu.github.io/obsidian-dataview/annotation/add-metadata/