ぬじろぐ

好きなゲーム発表ぬこちゃん

【Obsidian】今年はデイリーノート運用をやめてマンスリーノート運用にする


なんか最近意識高い人の技術ブログみたいじゃない?
メギド72完結カウントダウンからの逃避かな…

年も変わったんでね…運用とか見直しましょうということで。
去年は色々ぶっこみ帳としてObsidianを使っていたわけですが、毎日フィットボクシングをしていた関係でしばらくデイリーノートを使ってたんですね。そうすると、当たり前だけど1年で365ページ作られるわけです。毎日管理するほどのタスクがあるわけでもないのに。

で、やっぱりむやみにファイルが作られるのは避けたい…と思い、マンスリーノート運用に戻すことにしました。

マンスリーノートにする

ノート自体はただのmarkdownであるべきという思想の持ち主なので、ノート内にはdataviewやその他プラグインを使わないといけないスクリプトなどは埋め込みません。
後に残るのはただのmdファイル。

手始めに、こんな感じのノートを生成するテンプレートを作成

2025-01.md
# 2025-01-01
曜日

# 2025-01-02
曜日

... 以下繰り返し

コミュニティプラグイン>TemplaterでEnable folder templatesをマンスリーノートを入れるフォルダに設定する
あとはコアプラグイン>デイリーノートで月対応(YYYY/YYYY-MM.md)に設定

ここまでは簡単。
すると「今日のデイリーノートを開く」ボタンで今月のノートが表示されるようになる。
でも今月のノートの頭から今日の見出しを探すのは面倒なので、「今月のノート>今日の見出し」に一発で飛ぶボタンが欲しい…(要望1)

この動作自体はdataviewjsでボタンでも作ってやればできるっぽい。

▼クリックでコードを展開

dataviewjs
// 今日の日付を取得
const today = moment().format("YYYY-MM-DD");
const year = moment().format("YYYY");
const month = moment().format("YYYY-MM");

// デイリーノートのパスを作成
const filePath = `DailyNote/${year}/${month}.md`;

// ボタンを作成して表示
const button = document.createElement("button");
button.textContent = "Monthry:今日のノートを開く";
button.style.padding = "10px";
button.style.marginTop = "10px";
button.style.cursor = "pointer";

// ボタンクリック時の処理
button.onclick = async () => {
  // ファイルが存在するか確認
  if (await app.vault.adapter.exists(filePath)) {
    // ファイルが存在する場合
    const fileContent = await app.vault.adapter.read(filePath);
    if (!fileContent.includes(`# ${today}`)) {
      // 今日の日付がファイルにない場合は追記
      await app.vault.adapter.write(filePath, `${fileContent}\n# ${today}\n\n##tweet\n`);
    }
    // 今日の日付の位置にジャンプ
    app.workspace.openLinkText(filePath, "/", false).then(() => {
      setTimeout(() => {
        const activeLeaf = app.workspace.activeLeaf;
        if (activeLeaf) {
          const editor = activeLeaf.view.editor;
          const lines = editor.getValue().split("\n");
          const lineNumber = lines.findIndex(line => line === `# ${today}`);
          if (lineNumber !== -1) {
            // カーソルを日付の位置に移動
            editor.setCursor({ line: lineNumber, ch: 0 });
           
          }
        }
      }, 200);
    });
  } else {
    // ファイルが存在しない場合は作成
    const initialContent = `# ${today}\n\n`;
    await app.vault.create(filePath, initialContent);
    app.workspace.openLinkText(filePath, "/", false);
  }
};

// ボタンをページに追加
dv.container.appendChild(button);

ノートに手軽にメモを追加したい

既存のプラグインでできそうだけど…有名なやつだとThinoとかQuickAddあたり。
私も今まではThinoを使っていました。しかしこれはデイリーノートに書き込む前提…マンスリーノートには対応していない。課金したら書き込み位置のカスタマイズできるのか?わからん。
QuickAddはショートカットから窓を出して挿入って感じらしい。
うーん、私はTwitterみたいに縦に並べてダラダラ書きたいんだ(要望2)

じゃあ別のプラグインは?っていうと、そもそもマンスリーノートに対応してるプラグイン自体が滅多ににない。需要ないんか?
まあObsidian自体デイリーノート使わない攻略なんて縛りプレイに等しいしな。

仕方ねえ、作るっきゃねえか。要望1と要望2を満たすプラグインをよ!

マンスリーノート運用のためのプラグイン(Monthly-memos)を自作

GitHub - nujisato/Obsidian-monthly-memos: ObsidianでMonthly Noteにメモを書き込むためのプラグインとテンプレートのセット

ということで作りました。ジェネリック1人Twitterです。
( ΦωΦ⊂彡☆))Д´) 完全にThinoのパク…
だまれ

いやほんとにThinoの有料版ってそういう機能ついてんじゃないのぉ!?でも公式ページ見ても分かんないんだよぉ…
無料版だと記録場所がデフォルトDailyに設定されてて動かせないし、ページを変更できても特定の見出しの下に書くとか、そこまで設定できるのか分からなくってぇ…数百円なら軽い気持ちで試せるけど価格設定が3000円↑と強気なんだもん
自分の時給考えたら3000円払ったほうが安くない?それはそう

サイドに表示した状態
メニュー展開状態
完全に自分用なのでコミュニティプラグインに登録する予定はありません。
素人丸出しのプラグイン登録するの恥ずかしいし…
てかこんな適当なのじゃなくて誰かちゃんとしたの作ってくれない?

一応、「月ノートの中の今日の見出しが基準」「Twitterみたいに書く」の要件を満たしています。
Templaterで1か月分の日付は全部入れている前提ですが、一応見出しがなかった場合に判定して挿入する機能も付けました。
予定タグがついている行を一覧表示する機能も付けました。
も、もうええじゃろ…前回髪切った日?フィットボクシングのカウント?そんなの自分で検索しろよ!
140文字制限は?
(っΦωΦ)(ΦωΦ˘)誰得なんだよ つけてないよ

Obsidianのノート管理ってグラフビューなんかもそうだけど基本的にノートどうしの繋がりで、
Dataviewで抜き出すにしてもプロパティを取ってきて表示する、っていうのが多いので、デイリーノートを作らない運用となるとなかなか回りくどくなってしまうんですよね。
Obsidianの思想と違うことを無理やりやろうとしてるから仕方ないのか…
とりあえず今年はこれでやっていこうと思います。

余談

これを作るにあたって色々調べたんですが(何せマジの素人)
どのくらい素人かというと、Markdownエディタのソースをコピペして動かして「javascript チョットダケ ワカルヨウニナッテキタ…」みたいな段階です。

んで、Obsidianのプラグインって中身覗くとjsで書かれてるようだけどどうやって作るんじゃい?→ぐぐる→Typescript?初耳…なにそれ、おいしいの?javascriptとは違うの?コンパイルするとjavascriptになる?じゃあ最初からjavascriptで書けばいいんじゃないの…???

となったのでjavascriptで書いています。私は別にプログラマーになりたいわけではなく、マンスリーノート運用補助のためのプラグインを欲しているだけなので…