🙌

ObsidianのPeriodic Noteでタスク管理を便利にする方法

に公開

はじめに

Obsidianの便利機能にボタンを押せばDaily Noteを作成してくれる機能がある。
Daily Noteの使い道としてその日やるタスクを管理するツールとしての活用があるが、大きなタスクが与えられた時にそれをどう分解して日時単位のタスクにするかというのは別で考える必要がある。

自分は最近以下のようにしてタスクを管理する予定である

  1. 半期単位でやることが上から降ってくる
  2. Quarterly Noteに半期の自分担当のやることをチェックボックスで書く
  3. Monthly Noteに現在取り組んでいるタスクをQuarterly Noteから抜粋する
  4. Weekly Noteに今週取り組むタスクをMonthly Noteから抜粋する
  5. Daily Noteに今日やるタスクをWeekly Noteから抜粋してバレットジャーナル的に管理
      - バレットジャーナルで書いたタスクをDay Planner pluginで時間を割り振ることも可能

Quarterly Noteのイメージ

補足

  • タスクが増えた場合はQuarterly Noteに追加
  • タスク名はObsidianのNoteリンクになっており、そのノートにlogを書く
  • Monthly Note を飛ばして Quarterly Note から Weekly Noteに抜粋しても良さそう

この記事はこれらを便利に使うためのプラグインと設定を紹介する

installするプラグイン

  • Calender
  • Periodic Notes
  • Templater
  • (Day Planner 時間レベルで管理するなら)

Calender

Calenderを表示して、日付を押せばそのノートに飛べる
Weekly Noteへも飛べるのはありがたい
右上のカレンダーアイコンを移動でき、自分はUIの左下に配置している

Periodic Notes

Daily Note以外に Quarterly Note, Monthly Note を作る補助をしてくれるプラグイン
Weekly Noteの設定はCalenderプラグインでもできるが、こちらの方が補完が効いてるのでおすすめ
弱点は Monthly Note, Quarterly Note にUIから簡単にアクセスする手段がないこと

cmd + oの命令で各種Noteを作れる

Templater

Periodic Notesの弱点にも書いたが、Calenderの日付からWeekly Note、Daily Noteは楽にアクセスできるが、Quarterly Note, Monthly Noteへのアクセスは難しい
そこでTemplaterを使いリンクをNoteに埋め込むことで階層を移動できるようにする

参考: https://github.com/ljavuras/obsidian-power-tools/tree/main/Periodic Notes Navigation

daily note template

<%*
moment.locale('ja');

const today = moment(tp.file.title);
const prev = today.clone().subtract(1, 'days');
const next = today.clone().add(1, 'days');

// 2023 / Q1 / January / Week 1
tR += '[[' + today.format('YYYY') + ']] / ';
tR += '[[' + today.format('YYYY-[Q]Q') + '|' + today.format('[Q]Q') + ']] / ';
tR += '[[' + today.format('YYYY-MM') + '|' + today.format('MMMM') + ']] / ';
tR += '[[' + today.format('gggg-[W]ww') + '|' + today.format('[Week] w') + ']]\n';

// ❮ 2022-12-31 | 2023-01-01 | 2023-01-02 ❯
tR += '❮ [[' + prev.format('YYYY-MM-DD') + ']]';
tR += ' | ' + today.format('YYYY-MM-DD') + ' | ';
tR += '[[' + next.format('YYYY-MM-DD') + ']] ❯';
%>

weekly note template

<%*
const week = moment(tp.file.title);
const end = week.clone().endOf('week');

// 年 / 四半期 / 月
tR += '[[' + week.format('YYYY') + ']] / ';
tR += '[[' + week.format('YYYY-[Q]Q|[Q]Q') + ']] / ';
tR += '[[' + week.format('YYYY-MM|MMMM') + ']]';

// 週が月や四半期をまたぐ場合:末尾に追加
if (week.format('M') !== end.format('M')) {
  tR += ' - ';
  if (week.format('YYYY') !== end.format('YYYY')) {
    tR += '[[' + end.format('YYYY') + ']] / ';
  }
  if (week.format('Q') !== end.format('Q')) {
    tR += '[[' + end.format('YYYY-[Q]Q|[Q]Q') + ']] / ';
  }
  tR += '[[' + end.format('YYYY-MM|MMMM') + ']]';
}

tR += '\n';

// ナビゲーションリンク:❮ Week 52 | Week 1 | Week 2 ❯
const prev = week.clone().subtract(1, 'weeks');
const next = week.clone().add(1, 'weeks');

tR += '❮ [[' + prev.format('gggg-[W]ww|[Week] w') + ']]';
tR += ' | ' + week.format('[Week] w') + ' | ';
tR += '[[' + next.format('gggg-[W]ww|[Week] w') + ']] ❯\n';

// 各日付リンク:01 - 02 - … - 07
for (let i = 0; i < 7; i++) {
  const day = week.clone().weekday(i);          // 週の i 日目 (月〜日)
  tR += '[[' + day.format('YYYY-MM-DD') + '|'   // リンク先:2025-05-26 など
        + day.format('DD') + ']]';              // 表示名:26
  if (i < 6) tR += ' - ';
}

%>

monthly note template

<%*
const month = moment(tp.file.title, "YYYY-MM");

// 年 / Q / 月
tR += '[[' + month.format('YYYY') + ']] / ';
tR += '[[' + month.format('YYYY-[Q]Q') + '|' + month.format('[Q]Q') + ']] / ';
for (let i = 0; i < 12; i++) {
  const m = month.clone().month(i);
  tR += '[[' + m.format('YYYY-MM') + '|' + m.format('MMM') + ']]';
  if (i < 11) tR += ' - ';
}
tR += '\n';

// 前月・翌月
const prev = month.clone().subtract(1, 'month');
const next = month.clone().add(1, 'month');
tR += '❮ [[' + prev.format('YYYY-MM') + ']]';
tR += ' | ' + month.format('YYYY-MM') + ' | ';
tR += '[[' + next.format('YYYY-MM') + ']] ❯';
%>

quarterly note template

<%*
const quarter = moment(tp.file.title, "YYYY-[Q]Q");

// 年 / Qリンク(Q1〜Q4)
tR += '[[' + quarter.format('YYYY') + ']] / ';
for (let q = 1; q <= 4; q++) {
  tR += '[[' + quarter.format('YYYY') + '-Q' + q + '|Q' + q + ']]';
  if (q < 4) tR += ' - ';
}
tR += '\n';

// 対応月リンク
const startMonth = (parseInt(quarter.format('Q')) - 1) * 3 + 1;
for (let m = 0; m < 3; m++) {
  const month = quarter.clone().month(startMonth - 1 + m);
  tR += '[[' + month.format('YYYY-MM') + '|' + month.format('MMMM') + ']]';
  if (m < 2) tR += ' - ';
}
%>

yearly note template

<%*
const year = moment(tp.file.title, "YYYY");

// ❮ 2024 | 2025 | 2026 ❯
tR += '❮ [[' + year.clone().subtract(1, 'year').format('YYYY') + ']]';
tR += ' | ' + year.format('YYYY') + ' | ';
tR += '[[' + year.clone().add(1, 'year').format('YYYY') + ']] ❯\n';

// Q1 - Q4
for (let q = 1; q <= 4; q++) {
  tR += '[[' + year.format('YYYY') + '-Q' + q + '|Q' + q + ']]';
  if (q < 4) tR += ' - ';
}
%>

と、ここまで書いて思ったがY/Q/Mに簡単にアクセスできるパンくずリストがあればいいだけな気がしてきた
こんなの
year

[[2025]] / [[2025-Q1|Q1]] [[2025-Q2|Q2]] [[2025-Q3|Q3]] [[2025-Q4|Q4]]/  [[2025-01|1月]] [[2025-02|2月]] [[2025-03|3月]] [[2025-04|4月]] [[2025-05|5月]] [[2025-06|6月]] [[2025-07|7月]] [[2025-08|8月]] [[2025-09|9月]] [[2025-10|10月]] [[2025-11|11月]] [[2025-12|12月]]

quarterly

[[2025]] / [[2025-Q2|Q2]] / [[2025-04|4月]] [[2025-05|5月]] [[2025-06|6月]]

monthly

[[2025]] / [[2025-Q2|Q2]]

daily & weekly

[[2025]] / [[2025-Q2|Q2]] / [[2025-05|5月]]

Discussion