日別アーカイブ: 2025年1月22日

Obsidian の デイリーノートに前日の未実施TODOを引き継ぎたい

少しずつ使い始めている Obsidian 。
まだ使いこなしていると言うには程遠いですが。。。

ToDoをいわゆるAsanaやBacklogなどタスク管理ツール、プロジェクト管理ツールで管理している人もいるとは思うのですが、もう少し細かいタスク。
プロジェクトになっていないようなタスクは基本的にこれまではテキストベースで書いていました。

今回、Obsidianを利用するにあたってデイリーノートの仕組みがせっかくあるので有効活用したいところなのですが、デイリーノートは毎回作り直されてしまうので引き継げません。

コピペすればいい話ではありますが、完了済みのタスクもペーストされてしまうので地味に面倒です。

なんとかならないかな?と見ていたら、良さげなプラグインが。

Templaterを導入

コミュニティプラグインからフィルタでTemplaterを探し出してインストールを押下します。

インストールが終わったら忘れずに有効化します。

続いて、有効化したTemplaterプラグインの設定の中から必要なものを有効化します

有効化する設定としては下記となります

Trigger Templater on new file creation
→テンプレートから新規ファイルを作成した際にTemplaterプラグインのルールに従って内容を作り上げます。今回でいうと、前回のTODOを引っ張ってくる処理を動かすわけですね

引き継ぎの実施

引き継ぎ処理の仕様としては、一旦下記とした

  • ”Work In Progress”セクションから”Memo”セクションまでの間が対象範囲
  • その中でチェックが入っていない行を引き継ぐ
  • 毎日必ずしもデイリーノートを作るとは限らないので、1週間分まで遡って最初に見つけたノートを引き継ぐ

テンプレートへの記載内容は下記となる。
セクション名は適宜変更してほしい。

## Work In Progress
<%*
let addRest = 0; // サブテンプレートから差し込むかどうか
for (let i = 1; i <= 7; i++) {
	const yesterday = tp.date.now("YYYY-MM-DD(dd)[.md]", (i*-1), tp.file.title, "YYYY-MM-DD(dd)[.md]"); // 前回の日付のファイル名を生成
	const yesterdayFile = tp.file.find_tfile(yesterday); // 前日のファイルを取得

	if(yesterdayFile){
		const content = await tp.file.include(yesterdayFile); // ファイルの内容を読み込む
		// "## Work In Progress"から"## Memo"までのテキストを抽出するための正規表現
		const wipOld = content.match(/## Work In Progress([\s\S]*?)\n## Memo/);

		if (wipOld && wipOld[1]) {
		    const taskLists = wipOld[1].match(/^(\s*)- \[ \] .*/gm);
		    if (taskLists && taskLists.length > 0) {
			    uncheckedTasks = taskLists.join('\n');
			    tR += uncheckedTasks;
			    addRest = 1;
		    }
		}
		break;
	}
}
if (addRest == 0) {
  // 進捗部分がない場合はサブテンプレートを書き出す
  tR += await tp.file.include("[[daily-todo]]");
}
%>

## Memo

これで、前回未完了分をコピペし直さなくて良くなって満足だ。