💭

obsidianでtemplaterとdataviewによるタスク管理

に公開

installする拡張機能

以下の拡張機能をinstall

  • templater
  • dataview
  • DB Folder Plugin(任意・notionっぽくするなら)

templaterの設定

cmd+P で 設定画面を開き、tempalte folder locationを指定する

補足

うまく動かない時はDevToolsConsoleでエラーメッセージを確認する
View › Toggle Developer ToolsでDevToolsConsoleを開ける

templaterでtaskのテンプレを作る

例えばtask-note.mdとしてtemplaterの設定で指定したディレクトリに保存する

<%*
/* ───────── 1. 設定 ───────── */
/* 必要なプロジェクトをここに並べてください */
const PROJECTS = ["Alpha", "Beta", "Gamma"];

/* ───────── 2. 入力 ───────── */
const title = await tp.system.prompt("Task title");

/* クリックで選ぶ:初期値は先頭要素 */
const project = await tp.system.suggester(PROJECTS, PROJECTS);

const due = await tp.system.prompt(
  "Due date (YYYY-MM-DD)",
  tp.date.now("YYYY-MM-DD", 3)
);
const est = await tp.system.prompt("Est. hours", "2");

/* ───────── 3. ファイル名と保存先 ───────── */
const filename = title.replace(/[\\\/:*?"<>|]/g, "-");  // 禁止文字→-
await tp.file.move(`9 - neta/tasks/${filename}`);
-%>
---
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
status: "🟡 In Progress"
project: "<% project %>"
due: "<% due %>"
est: "<% est %>"
---
  • -%>で終わることで、templaterで出力したファイルの冒頭1行を削除している
  • const target = `9 - neta/tasks/${filename}.md`;が作成先のファイルになる
  • cmd + Pで出てくるコマンドパレットで Templater: Create <templateのパス> を選択すれば新ファイルを作れる
    • hotkeyを登録しておくと便利

dataviewを用いる形式

tasksにtemplaterでノートを作る

```dataview
TABLE file.link AS "ノート", status, due
FROM "tasks"
WHERE status != "🟢 Done"
SORT due ASC
```

noteのupdate

タスクが終わって In Progress -> Done にステータスを変更できるようにしたい
scripts/update-status.md を用意し、以下のmarkdownを書く

<%*
/* ───────── 設定 ───────── */
const STATUS = ["🟡 In Progress", "🟢 Done"];

/* ───────── 現在値 & 選択 ───────── */
const current = tp.frontmatter?.status;          // 既存値(無いなら undefined)
const pick = await tp.system.suggester(
  STATUS,                                       // 画面に表示するリスト
  STATUS,                                       // 返ってくる値
  STATUS.indexOf(current)                       // 初期選択 (‑1 なら先頭)
);

/* ───────── フロントマター更新 ───────── */
const file = tp.file.find_tfile(tp.file.path(true));
await tp.app.fileManager.processFrontMatter(file, (fm) => {
  fm.status = pick;                             // 新しい値をセット
});

new Notice(`status → ${pick}`);
%>

これをhotkeyに登録して、編集したいファイルで Templater: Insert <templateのパス> を行えばステータスの更新ができるだろう

DB Folder Pluginを用いる形式(notionっぽくなる)

DB Folder Pluginでviewを作っても良く、よりnotionのDatabaseっぽくなる
自分はtemplater+Dataviewで満足したのでこちらは利用しないことにする

Discussion