Obsidian:吉田のデイリーノート、24年冬

ツール活用

大枠かわらず細部はけっこう変化

前回11ヶ月前にデイリーノートの記事を書いたが、それから細々と機能を追加したり、自動化したり、細部を作り直したりしていた。
バージョン的には Ver.7.8 ぐらい?(適当

改めて全体をざっくり紹介しようと記事を書いた。

やたらと長い実例と実際

デイリーノート全体例

1日のデイリーノートしてデカすぎるものだが、実際はいつもこんなに長い代物ではない。バリバリ使った場合にこんな感じですよといったサンプル。

途中を端折り、構成要素を示すと以下のようになっている。
次から構成要素個別に紹介してみる。

Mement Mori —いつか死ぬことを忘れるな

ObsidianのDaily noteでMemento Mori する|Seitaro
Mement Mori —いつか死ぬことを忘れるな 有名なラテン語だ。 忘れるな。と言われれば、 しばらくは気に留めておけるだろう。 しかしそのまま放っておくと、 いずれ忘れてしまうのが人間。愚か也。 いつか死ぬことを忘れないためには 工夫...

Obsidianを紹介した古い記事の一つに、上記があった。
重すぎるテーマではあるものの、毎日が意味のないものではなく、振り返ってみたほうが良いと考えた。

しかし、そのまま採用して数日利用してみたが、人生というタイムスケールは長すぎて変化が乏しく感じる。
そこでもう少し現実を感じさせるため、今年の残り日数と経過日数を追加している。

コールアウトを使った表示で、標準では閉じていて、見出し部分の「今年残り ○日 (◇%)」のみが見える。
コールアウトを開くと、経過日数と、生誕から何日、80歳まで残り何日、何%が表示される。パーセンテージ表記は直感的にわかりやすいため。

なお今年はうるう年で366日だが、細かい計算は端折って365日で計算してるw

Next Task

GitHub - obsidian-tasks-group/obsidian-tasks: Task management for the Obsidian knowledge base.
Task management for the Obsidian knowledge base. Contribute to obsidian-tasks-group/obsidian-tasks development by creati...

タスク管理は Tasksプラグインでひとまとめにしている。
私はタスクを積み上げても気にしない質だが、優先順位をつけるため、タスク文に🌟をつけたタスクと、〆切のあるタスクを抽出表示。

その日を開始して Next Task を眺めて開きっぱなしにしてもよいし、ノート下部にアクセスしやすくするために閉じても良い。
見出しかコールアウトで簡単に閉じられるようにした。

コールアウトを入れ子にしてデイリーノートのタスクインターフェースを作る(全てDataviewjsで自動)。#Obsidian部

さかさん🦋 (@masa21gifus.bsky.social) 2024-12-12T23:42:14.206Z

コールアウトの活用は、さかさんより拝借したが、閉じたコールアウトの見出しを活用していない私の例は、単に見た目がよいというだけ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] QuickAddプラグインを関西弁で解説するで!
兄ちゃん、兄ちゃん……それ、Obsidianか。 おーワシも知っとるがな。関西人ナメたらあかんで。 しかしな、兄ちゃん。今メモったその動作…… 遅いわ。 そんなもんメチャクチャ遅いがな。どのくらい遅いてそら、星野のスローカーブくらい遅いわ!
GitHub - tadashi-aikawa/mobile-first-daily-interface: Obsidianにてモバイルに最適なインターフェースでデイリーノートを扱うプラグインです。
Obsidianにてモバイルに最適なインターフェースでデイリーノートを扱うプラグインです。. Contribute to tadashi-aikawa/mobile-first-daily-interface development by ...
GitHub - Quorafind/Obsidian-Thino: A quick capture plugin for Obsidian, all data from your notes.
A quick capture plugin for Obsidian, all data from your notes. - Quorafind/Obsidian-Thino

メモ欄に投げた内容は、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