banner
DIYgod

Hi, DIYgod

写代码是热爱,写到世界充满爱!
github
twitter
follow
bilibili
telegram
email
steam
playstation
nintendo switch

Obsidian に基づく生活記録システム

私が2020 年の年末まとめで言及したように、私は Notion を使ってバレットジャーナルを書いてきましたが、今は少しだけ違っています。現在の私の生活記録システムを再度覗いてみましょう。

日記

image

週記月記

image

年記

image

元の Notion バレットジャーナル

image

Obsidian の強力な自動化機能と高い自由度のおかげで、日 / 週 / 月 / 年のノートはプリセットテンプレートを使用して自動生成され、相互に連動し、手動で処理する部分はほとんどありません。

すべてのファイルは GitHub にアップロードされています:https://github.com/DIYgod/DIYgod-Obsidian-Starter。テーマ、プラグイン、設定ファイル、カスタムスタイル、テンプレートファイル、サンプルファイルなどが含まれています。これは一例に過ぎないので、実際の状況に応じて変更してください。

これらのものは一見複雑に見えますが、実際には非常にシンプルで、自由度と拡張性も高いです。以下で詳しく説明します。

構造#

ディレクトリ構造は日記の左側のサイドバーに示されています。

├── OKR.md
└── Journal
    └── 2022
        ├── W1
        |   └── 2022-01-01.md
        |   └── 2022-W1.md
        ├── 2022-01.md
        └── 2022.md

毎日、自動的に今週のフォルダーにその日の日記ファイル YYYY-MM-DD.md が生成され、毎週自動的に新しい週のフォルダー [W]ww と週記 YYYY-[W]ww.md が作成され、毎月自動的に月記 YYYY-MM.md が生成され、毎年自動的に年のフォルダー YYYY と年記 YYYY.md が作成されます(訂正:自動ではなく、コマンドパネルで手動でトリガーする必要があります)。

これらのファイルの内容もすべてテンプレートで事前に設定されており、日付、本期の OKR スコアやグラフ、さらにはその日の位置、天気、月相などの情報が自動的に埋め込まれています。また、その日の状態や動きを記録するためのスペースも確保されています。

外部には OKR ファイルがあり、約半年ごとに更新され、この半年の人生の目標が記録されています。その中には毎日継続的に努力する必要がある目標もあり、日記システムの大部分はこれらの目標を中心に構築されています。

ディレクトリ構造は主にPeriodic Notesによって実現され、テンプレートは主にTemplaterDataviewおよびコアプラグイン Templates によって実現されています。

日記#

image

情報#

情報は自動生成されたその日の情報で、年月週記と OKR へのリンク、位置、天気、月相などの情報が含まれています。

位置、天気、月相の情報は Templater のコマンド機能を使用して取得されます。

位置と天気を取得するには

curl wttr.in/"$(curl -s --header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r ".city" | sed 's/ /%20/')"\?format="%l+%c%t"

月相を取得するには

curl wttr.in/"$(curl -s --header "user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r ".city" | sed 's/ /%20/')"\?format="%m"

OKR トラッカー#

OKR トラッカーは、その日の現在の段階の OKR の達成状況を追跡します。例えば、Sleep:: 10.3 は今日の睡眠時間が 10.3 時間であることを示し、Healthy Eating:: 5 は今日の食事が非常に健康的であることを示します。:: は Dataview の構文で、現在のページに以下のような属性を追加します。

page = {
    ...
    "Sleep": 10.3,
    "Healthy Eating": 5,
}

このような属性が追加され、次に週記、月記、年記での分析や処理が容易になります。

O1 KR2 の下には特別なリストがあり、API を通じてその日の Toggl Track データが表示されます。Toggl Track は時間記録アプリで、私が毎日さまざまなタスクに費やした時間を記録します。例えば、アニメ視聴時間、Bilibili 視聴時間、作業時間などです。これらのデータは、今日の生産性が期待通りであったかどうかを反映することができます。

ノート#

ここが実際に日記を書く場所です。ほとんどは単なる流水帳で、私の生まれつきのひどい記憶力を補うためのものです。時折、考えを記すこともあります。

週記と月記#

image

ジャーナルリスト#

ジャーナルリストは、自動生成された今週 / 月のすべての日記のリストで、Dataview を使用して実現されています。

すべての日記を取得するには

// 週
window.pages = dv.pages(`"${dv.current().file.folder}"`).where(p => p.file.name.match(new RegExp(`${dv.current().file.name.split('-')[0]}-\\d{2}-\\d{2}`))).sort(p => p.file.name);

// 月
window.pages = dv.pages().where(p => p.file.name.match(new RegExp(`${dv.current().file.name}-\\d{2}`))).sort(p => p.file.name);

リストをレンダリングするには

dv.paragraph(window.pages.file.link.join(', '))

サマリー#

ここは月末にまとめと反省を行う場所で、日記のノートに対応しています。

OKR トラッカー#

ここでは、すべての日記の OKR データを処理・分析し、最終的にスコアを生成します。日記の OKR トラッカーに対応しています。

これは Dataview を通じて実現され、睡眠を例にとると、≥ 6.5 時間かつ ≤ 8.5 時間を有効な睡眠と見なし、有効な睡眠日数の割合がスコアとなります。

let count = 0;
let total = 0;
for (let page of window.pages) {
    if (page['Sleep']) {
        count++;
        if (page['Sleep'] >= 6.5 && page['Sleep'] <= 8.5) {
            total++;
        }
    }
}
const score = (total / count * 100).toFixed(2);
dv.el('div', score + '%', {
    cls: score > 80 ? 'score-class1' : score > 50 ? 'score-class2' : 'score-class3'
});

さらに CSS を追加し、> 80 点は緑色、50-80 点は黄色、< 50 点は赤色で表示することで、今週 / 月の睡眠状況を明確に把握できます。図は黄色の範囲で、あまり良くはありませんが、受け入れられる範囲です。来月はもっと注意を払う必要があります。

統計#

ここでは、睡眠と運動データを統計グラフに生成し、睡眠時間がかなり不安定であること、運動日数と時間が非常に少ないことを明確に示します。

統計グラフはObsidian Chartsを使用して描画され、睡眠統計グラフのコードは以下の通りです。

const times = [];
for (let page of window.pages) {
    times.push(page['Sleep']);
}

const chartData = {
    type: 'line',
    data: {
        labels: window.pages.file.name.array(),
        datasets: [{
            label: 'Sleep Time',
            data: times,
            pointBackgroundColor: '#6c40d6',
            borderColor: '#6c40d65c',
            tension: 0.4,
            spanGaps: true,
        }],
    },
    options: {
        scales: {
            y: {
                type: 'linear',
                min: 2,
                max: 13
            }
        }
    }
}

window.renderChart(chartData, this.container);

財務#

今月の財務データの円グラフは、MoneyWiz を使用して生成されます。

年記#

image

年記は週記や月記と非常に似ていますが、時間のスケールを広げることで、多くの新しい有用な結論を導き出すことができます。

例えば、同じ睡眠と運動の統計グラフを年単位で見ると、5 月末に睡眠が制御不能になり、その期間に運動も中断していたことがわかります。そして、6 月中旬からは改善が見られました。

また、新しい体重と体脂肪の統計グラフが登場し、私の体重と体脂肪が着実に減少していることがわかります。健康状態が明らかに改善されています。

年記には新しい熱マップが登場し、目標を達成した日を記録します。これはHeatmap Calendarを使用して描画され、睡眠を例にとると以下のようになります。

const calendarData = { 
    entries: [],
}

const pages = window.pages
    .where(p => p.Sleep && p.Sleep >= 6.5 && p.Sleep <= 8.5)
    .sort(p => p.file.name);

for(let page of pages){ 
    calendarData.entries.push({
        date: page.file.name,
        intensity: page.Sleep,
    })
}

renderHeatmapCalendar(this.container, calendarData);

限界#

バレットジャーナルには非常に重要なタスクリストモジュールがあります。上記のバレットジャーナルのスクリーンショットに示されているように、以前は一週間のタスクリストを事前にノートに書いていましたが、現在は日記がその日の自動生成のため、事前に計画することができません。そのため、タスクリストはすべて TickTick を使用して管理することにしました。TickTick も非常に使いやすいですが、これにより日記との連動が失われ、手動で追加すると多くの重複作業が発生してしまいます。あまり快適ではありません。

最後に注意すべきことは、このような生活管理システムがあっても、生活がすべて期待通りに進むわけではないということです。例えば、5 月末の睡眠失調事件のように、一度緩むと制御が失われることがあります。ノートは私に生活が失調していることを知らせてくれますが、どうやって軌道に戻り、OKR を追いかけるかは、自制心と定期的なまとめ、反省、改善に依存しています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。