大枠かわらず細部はけっこう変化
前回11ヶ月前にデイリーノートの記事を書いたが、それから細々と機能を追加したり、自動化したり、細部を作り直したりしていた。
バージョン的には Ver.7.8 ぐらい?(適当
改めて全体をざっくり紹介しようと記事を書いた。
やたらと長い実例と実際
デイリーノート全体例
1日のデイリーノートしてデカすぎるものだが、実際はいつもこんなに長い代物ではない。バリバリ使った場合にこんな感じですよといったサンプル。
途中を端折り、構成要素を示すと以下のようになっている。
次から構成要素個別に紹介してみる。
Mement Mori —いつか死ぬことを忘れるな
Obsidianを紹介した古い記事の一つに、上記があった。
重すぎるテーマではあるものの、毎日が意味のないものではなく、振り返ってみたほうが良いと考えた。
しかし、そのまま採用して数日利用してみたが、人生というタイムスケールは長すぎて変化が乏しく感じる。
そこでもう少し現実を感じさせるため、今年の残り日数と経過日数を追加している。
コールアウトを使った表示で、標準では閉じていて、見出し部分の「今年残り ○日 (◇%)」のみが見える。
コールアウトを開くと、経過日数と、生誕から何日、80歳まで残り何日、何%が表示される。パーセンテージ表記は直感的にわかりやすいため。
なお今年はうるう年で366日だが、細かい計算は端折って365日で計算してるw
Next Task
タスク管理は Tasksプラグインでひとまとめにしている。
私はタスクを積み上げても気にしない質だが、優先順位をつけるため、タスク文に🌟をつけたタスクと、〆切のあるタスクを抽出表示。
その日を開始して Next Task を眺めて開きっぱなしにしてもよいし、ノート下部にアクセスしやすくするために閉じても良い。
見出しかコールアウトで簡単に閉じられるようにした。
コールアウトの活用は、さかさんより拝借したが、閉じたコールアウトの見出しを活用していない私の例は、単に見た目がよいというだけw
1-line Diary
一行日記。このノートで数少ない直接入力する箇所。
このデイリーノートの大半は自動生成されるが、それらを眺めながら今日の記録をつける感じ。
「1ツイートするだけ」と考えれば、意外と日記も続くものだ。
Myself Meter
- Work In Progress:具体的な作業進捗
- Motivation:その日、能動的なアクションはどの程度あったか
- Daily Check:日々のタスク、やりたいこと
Work In Progress(WIP)も直接テキスト編集するもので、この日はなかったので削除していた。
昨日分があればノート生成時に自動的に引き継げるようにしたが、振り返る期間を過去一週間に広げたほうがよいのでは?とか思っている。
Motivation と Daily Check は別途記事を書いているのでそちらを参照。
来年は項目を一部入れ替えようと思っている(そしてウィークリー他テンプレート改造祭りになる模様)
Done Today
その日に新規作成したノート(デイリーノートとタスクノートを除外)と、その日に完了したタスクが抽出されるだけのスペース。
Task / Idea / Want
その日に新規発生したタスクを抽出一覧するスペース。
3種類あるがタグが違うだけで実質ただのタスク。
なおタスクは「1タスク1ノート」運用で個別にノートを生成している。
Memo
上記記事を書いた頃とはずいぶん魔改造して別物になっているが、AutoHotkeyで書いた自家製外部スクリプトで、デイリーノートの末尾にメモを放り投げている。
似たような機能としては QuickAddプラグイン、Mobile First Daily Interface (MFDI)プラグイン、Thinoプラグイン(旧Memos)でも再現できるでしょう。
メモ欄に投げた内容は、Obsidian標準機能の「選択範囲を抽出」でノートを切り出して運用。その日に切り出したり、週間でまとめて切り出し作業したり。
その日の雑な記録として、ノート切り出しなしで残すものもある。
ファイル構成
テンプレート内容
- Templater テンプレートの実例
- デイリーノート名を「YYYY-MM-DD(ddd).md」として運用していますので、適宜変更してご参考ください(例:2024-12-15(日).md)
- Memento mori は最初の
const bday = '2000-01-01';
をご自分の生年月日に置き換えると動作します。 - 必要プラグイン:Templater、Dataview、Tasks
---
Ex_sleep: false
Ex_book: false
Ex_walking: false
Ex_taiso: false
Ex_oyatsu: false
Ex_sake: false
Mo_mov: 0
Mo_ais: 0
Mo_obs: 0
Mo_oth: 0
created: {{DATE:YYYY-MM-DD}}
uid: {{date:YYYYMMDD-HHmmss-SSSS}}
AutoNoteMover: disable
---
<%*
const bday = '2000-01-01';
const dday = moment(bday).add(80,'y').format('YYYY-MM-DD');
const bpday = Math.floor(moment.duration(moment(tp.file.title).diff(bday)).asDays()).toLocaleString();
const drday = Math.floor(moment.duration(moment(dday).diff(tp.file.title)).asDays()).toLocaleString();
const drper = ( moment.duration(moment(dday).diff(tp.file.title)).asDays() / moment.duration(moment(dday).diff(bday)).asDays() * 100).toFixed(1);
const ypday = Math.floor(moment.duration(moment(tp.file.title).diff(moment('{{date:YYYY-01-01}}').add(-1,'d').format('YYYY-MM-DD'))).asDays()).toLocaleString();
const yrday = Math.floor(moment.duration(moment('{{date:YYYY-12-31}}').diff(tp.file.title)).asDays()).toLocaleString();
const yrper = (moment.duration(moment('{{date:YYYY-12-31}}').diff(tp.file.title)).asDays() / 365 * 100).toFixed(1);
tR += '>[!tip]- Memento Mori : 今年残り ' + yrday;
tR += '日 (' + yrper + '%)\n';
tR += '> 経過:' + ypday + '日 生誕:' + bpday + '日 ';
tR += '80歳まで残り:' + drday + '日 (' + drper + '%)';
%>
## Next Task
>[!check]+ Pickup
> ```tasks
> not done
> no due date
> has tags
> hide task count
> hide created date
> hide postpone button
> description regex matches /🌟/
> short mode
> ```
>[!example]+ Scheduled
> ```tasks
> not done
> has due date
> hide due date
> hide created date
> hide start date
> hide task count
> hide postpone button
> starts before {{date:YYYY-MM-DD}}
> short mode
> ```
## 1-line Diary
-
## Myself Meter
### Work In Progress
<%*
const yesterday = tp.date.now("YYYY-MM-DD(ddd)[.md]", "-1", tp.file.title, "YYYY-MM-DD(ddd)[.md]"); // 前日の日付のファイル名を生成
const yesterdayFile = tp.file.find_tfile(yesterday); // 前日のファイルを取得
let wipNew = 0; // サブテンプレートから差し込むかどうか
if (yesterdayFile) {
const content = await tp.file.include(yesterdayFile); // ファイルの内容を読み込む
// "### Work In Progress"から"### Motivation"までのテキストを抽出するための正規表現
const wipOld = content.match(/### Work In Progress\n([\s\S]*?)\n### Motivation/);
if (wipOld && wipOld[1]) {
const wipFin = wipOld[1].match(/☆/); // 未進捗の☆が残っているか
if (wipFin) {
tR += wipOld[1]; // 進捗部分を書き出す
wipNew = 1;
}
}
}
if (wipNew == 0) {
// 進捗部分がない場合はサブテンプレートを書き出す
tR += await tp.file.include("[[stp_wip]]");
}
%>
### Motivation
```dataview
TABLE WITHOUT ID
file.name as Date,
("🟦" * Mo_mov + "🟧" * Mo_ais + "🟪" * Mo_obs + "🟩" * Mo_oth + "⬛" * (10 - Mo_mov - Mo_obs - Mo_ais - Mo_oth)) as "🟦動画編集 🟧生成AI 🟪ゲーム 🟩その他"
FROM "2_Daily"
WHERE file.day <= date({{date:YYYY-MM-DD}}) AND file.day >= date({{date:YYYY-MM-DD}}) - dur(1 day)
sort file.day asc
```
### Daily Check
```dataview
TABLE WITHOUT ID
file.name as Date,
choice(Ex_sleep = True, "🧡", "🖤") as ⏰,
choice(Ex_book = True, "🧡", "🖤") as 📗,
choice(Ex_walking = True, "🧡", "🖤") as 🏃,
choice(Ex_taiso = True, "🧡", "🖤") as 📻,
choice(Ex_oyatsu = True, "🌓", "⚫") as 🍰,
choice(Ex_sake = True, "🍺", "⚫") as 🍺
FROM "2_Daily"
WHERE file.day = date({{date:YYYY-MM-DD}})
```
## Done Today
``` dataview
list
FROM -"2_Daily" AND -"4_NoIndex/41_CaptureTask"
where file.cday = date({{date:YYYY-MM-DD}})
sort file.cday asc
```
```tasks
has tags
hide done date
hide created date
hide task count
short mode
done {{date:YYYY-MM-DD}}
```
#### Task (Alt+T) Idea (Alt+N) Want (Alt+W) Memo (Alt+Q)
## Task / Idea / Want
```tasks
has tags
hide task count
hide created date
hide done date
hide postpone button
short mode
created on {{date:YYYY-MM-DD}}
```
## Memo
*Top Image by Stable Diffusion