Log Stamp

unlisted

by takosasi-dev

Add timestamped entries to a daily dev log, through an inbox that only one device imports.

Updated 2d agoMIT
View on GitHub

Log Stamp

1 日 1 ファイルの開発ログ(作業日誌)に、### 🕒 [HH:MM] 見出し の形の項目を、決まった書式と位置で足す Obsidian プラグインです。ノートを書き換える道具です(書くのは「受け箱」のファイルと開発ログ)。ネットワークには出ません。PC でもモバイルでも動く作りですが、モバイルの実機ではまだ確かめていません。

どの端末でも、項目はまず「受け箱」フォルダに 1 項目 1 ファイルで記録します。開発ログに書き込むのは、「この端末で取り込む」を ON にした 1 台だけです。入れた直後は OFF で、OFF の間は開発ログに一切書きません。

English summary is at the bottom.

できること

  • 項目の追加: 日付・時刻・見出し・本文を入れる窓。日付と時刻は開いた瞬間の値で埋まり、書き換えられる
  • 受け箱: 記録は、まず受け箱フォルダに 1 項目 1 ファイルで残る。この段では開発ログに触らない
  • 取り込み: ON にした 1 台が、受け箱の項目を開発ログの「総括」の直前(総括の無い日は末尾)に足す
  • 重複よけ: 同じ見出し行と本文が既にログにあれば、足さずに「既にあった」に数える
  • 照合: 取り込んだ項目がログに残っているか、2 回入っていないかを一覧にする(読むだけ)
  • 総括の骨組み: その日の見出しを「名前: 中身」の名前ごとにまとめた下書きを、クリップボードに出す
  • 今日のログを開く: 今日の日付のログを開く

向いている vault(前提)

次の形の開発ログを付けている vault 向けです。Obsidian 1.14.4 以降が要ります。

  • 1 日 1 ファイル。<開発ログのフォルダ>/YYYY-MM-DD.md
  • 1 行目は # 2026-01-15 開発ログ のような見出し
  • 項目は ### 🕒 [HH:MM] 見出し で始まり、項目の間を --- で区切る
  • その日のまとめを書くなら、## この日の総括 の節を項目の後ろに置く(無くてもよい)
# 2026-01-15 開発ログ

### 🕒 [09:30] 献立アプリ: 一覧の並び順を直した

- 日付の新しい順にした
- テストを 2 件足した

---

### 🕒 [14:05] 買い物メモの整理

- 古い行を消した

---

## この日の総括

- **献立アプリ**: 並び順の不具合を直した

1 行目の形と総括の見出しの既定は、作者の vault の書き方に合わせてあります。設定で自分の vault に合わせて書き換えてください。開発ログのフォルダと受け箱のフォルダには既定が無いので、最初に指定します。項目の見出し行の形(### 🕒 [HH:MM] )は変えられません。開発ログのフォルダは作らないので、先に用意しておきます。

入れ方

BRAT で入れる(おすすめ)

  1. コミュニティプラグインの「BRAT」(Obsidian42 - BRAT)を入れて有効にする。
  2. BRAT の設定 → 「Add Beta plugin」に takosasi-dev/log-stamp を入れる。
  3. コミュニティプラグインの一覧で「Log Stamp」を有効にする。

手で入れる

Releases から main.js・manifest.json・styles.css を落とし、vault の .obsidian/plugins/log-stamp/ に置いて、コミュニティプラグインの一覧で有効にします。

入れたら最初に設定する

設定 → Log Stamp で、次の 2 つを指定します。どちらも既定は空(未設定)です。

  • 「開発ログのフォルダ」: 1 日 1 ファイルのログを置いているフォルダ(例: Daily log)
  • 「受け箱のフォルダ」: 記録したファイルを置くフォルダ(例: Daily log inbox)。開発ログのフォルダの外にする

未設定のあいだは何も書かず、フォルダも作りません。コマンドを使うと、「受け箱のフォルダが未設定です。設定 → Log Stamp で指定してください」か「開発ログのフォルダが未設定です。設定 → Log Stamp で指定してください」と出ます。

使い方

受け箱と取り込みの仕組み

ねらいは、同じ日のログを複数の端末が書いて、同期でぶつかるのを避ける事です。そのために、書く場所を 2 段に分けています。

  1. 記録(どの端末でも): 窓の「記録」を押すと、受け箱フォルダに <日付>_<時分秒>_<16進4桁>.md が 1 つできる。開発ログには書かない
  2. 取り込み(ON の 1 台だけ): 設定の「この端末で取り込む」を ON にした端末だけが、受け箱の項目を開発ログに足し、受け箱のファイルに 取り込み: <時刻> の 1 行を足す
    • ON の端末で記録した項目は、その場で開発ログにも入る
    • ほかの端末で記録した項目は、ON の端末でコマンド「受け箱を取り込む」を実行したときに入る(自動では取り込まない)
  3. 「この端末で取り込む」の値は、その端末のその vault にだけ残る(data.json に入らないので、同期で運ばれない)。既定は OFF で、値が読めないときも OFF として動く

受け箱のファイルの中身は、frontmatter(logstamp: 1・日付・時刻・作成)と、ログに入れる見出し行・本文です。

コマンド

コマンドパレットに出る名前すること
開発ログに項目を追加入力の窓を開く(リボンの時計のアイコンも同じ)
今日の開発ログを開く今日のログを開く。まだ無いとき、ON の端末は 1 行目だけのログを作って開く。OFF の端末は作らない
受け箱を取り込むON の端末だけ。まだ取り込んでいない受け箱のファイルを、作った時刻の古い順に開発ログへ入れる
取り込んだ項目を照合取り込み済みの受け箱のファイルと開発ログを比べて、一覧を出す(読むだけ)
総括の骨組みをコピー開いているログ(違えば今日のログ)の見出しから骨組みを作り、クリップボードに出す。ファイルには書かない

既定のホットキーはありません。

画面の見方

  • 入力の窓「開発ログに項目を追加」: 欄は「日付」「時刻」「見出し」「本文」、ボタンは「記録」
  • 入力が合わないときは、窓の中に文が出て記録しない。例: 「見出しを入れてください」「時刻は 00:00〜23:59 の HH:MM にしてください」「本文の 3 行目は見出しか区切り線になるので入れられません」「本文のコードブロックが閉じていません」
  • 記録の知らせ: OFF の端末は「受け箱に記録しました」、ON の端末は「Daily log/2026-01-15.md に入れました」
  • フォルダが未設定のとき: 受け箱が未設定なら、「開発ログに項目を追加」は窓を開かずに「受け箱のフォルダが未設定です。設定 → Log Stamp で指定してください」と出す。開発ログのフォルダが未設定なら、「今日の開発ログを開く」「総括の骨組みをコピー」は「開発ログのフォルダが未設定です。設定 → Log Stamp で指定してください」と出す。「受け箱を取り込む」「取り込んだ項目を照合」は、どちらかが未設定ならその文を出して何もしない
  • 「受け箱を取り込む」の結果: 「取り込み: 入れた 3・既にあった 0・形式外 0」。OFF の端末では「この端末では取り込みが OFF です」
  • 照合の窓「取り込んだ項目の照合」: 「ログに無い物」「2回以上ある物」「形式外の受け箱ファイル」の 3 つの欄に、受け箱のファイルのパスが並ぶ。無ければ「なし」。ON の端末では「ログに無い物」に「入れ直す」のボタンが出る
  • 骨組みのコピー: 「総括の骨組みをコピーしました(見出し 2 件)」。上の例のログなら、次の文がクリップボードに入る
## この日の総括

- **献立アプリ**: 
  - [09:30] 一覧の並び順を直した
- [14:05] 買い物メモの整理
- **学び**: 

設定

項目既定内容
この端末で取り込むOFFON の端末だけが開発ログに書き込む。値はこの端末だけに残り、data.json には入らない。ON にするのは 1 台だけ
開発ログのフォルダ空(未設定)項目を入れるログのフォルダ。未設定のあいだは、取り込みも今日のログを開くことも動かない(例: Daily log)
受け箱のフォルダ空(未設定)記録したファイルを置くフォルダ。未設定のあいだは、項目を記録できない(例: Daily log inbox)。開発ログのフォルダと同じ場所・その中には置けない(「受け箱は開発ログフォルダの外にしてください」)
新しいログの1行目# {date} 開発ログ{date} は YYYY-MM-DD になる
総括の見出し## この日の総括この行の直前に項目を入れる。無い日は末尾に入れる
本文の行を箇条書きにするON- や * や 数字. で始まらない行の先頭に - を付ける(コードブロックの中と字下げのある行は除く)
総括の骨組みの最後の行- **学び**: 骨組みの末尾に足す行。1 行に 1 つ

安全のための決まり

書く物は次のとおりです。これ以外の vault のファイルには触りません。

  • 受け箱(どの端末でも): <受け箱のフォルダ>/<日付>_<時分秒>_<16進4桁>.md を、1 項目につき 1 つ作る。受け箱のフォルダが無ければ作る
  • 受け箱(ON の端末): 取り込んだファイルの frontmatter の閉じ --- の直前に、取り込み: <時刻> を 1 行足す
  • 開発ログ(ON の端末だけ): 項目の日付のログの、最初の「総括の見出し」の行の直前(コードブロックの中の行は数えない。無い日は末尾)に、見出し行・空行・本文・空行・---・空行 を足す。直前が --- でも 1 行目の見出しでもなければ、先に --- も足す
  • 新しいログ(ON の端末だけ): その日のログが無ければ、「新しいログの1行目」だけのファイルを作る(取り込みのときと「今日の開発ログを開く」のとき)。開発ログのフォルダが無ければ、作らずに止まる(「フォルダ Daily log がありません」)
  • フォルダが未設定のあいだ: 受け箱が未設定なら記録せず、開発ログのフォルダが未設定なら取り込まず、今日のログも作らない。フォルダも作らない。vault の直下のノートを受け箱やログとして読むこともしない
  • 既存の行は変えない。消す・並べ替える・名前を変える、もしない。足す行の改行は直前の行に合わせる(CRLF のログには CRLF)。例外は 1 つで、最後の行に改行が無いログの末尾に足すとき、その行に改行を 1 つ付ける
  • 書く前に「足した行を除くと元に戻るか」を確かめ、戻らなければ書かない(「既存の行が変わるため書き込みを止めました: …」)
  • OFF の端末は、開発ログのフォルダに何も書かず、何も作らない
  • ほかに書くのは、自分の設定(data.json)と、端末の中の「この端末で取り込む」の値だけ。クリップボードに書くのは「総括の骨組みをコピー」のときだけ
  • ネットワークに出ない。Node.js / Electron の機能を使わない(モバイルでも動く作り)
  • 戻し方: 取り消すコマンドは無い。ログに足した行(見出し行から次の --- まで)と、受け箱のそのファイルを手で消す。受け箱に残すと、照合の「ログに無い物」に出る

動作確認の状況

  • 版 0.1.1。Windows の Obsidian 1.14.4 で動作を確認(項目の追加 → 受け箱に 1 件 → OFF の間は開発ログが変わらない → ON にすると総括の直前に入る → もう一度取り込んでも重複しない → 照合 → 総括の骨組み → 今日のログを開く)
  • iPhone・Android の実機は未確認(モバイル表示のエミュレーションで読み込みと表示まで確認)。ほかの端末で作った受け箱のファイルが同期で届いて取り込める所も、まだ見ていない
  • 同期や、Obsidian の外からの書き込みとぶつかったときの実験はまだ。 取り込み先のログを編集画面で打っている最中に取り込んだときの動きも未確認
  • 「総括の骨組みをコピー」で本物のクリップボードに入る所は、まだ確かめていない(骨組みの文そのものはテストで確認)
  • フォルダが未設定のときは、5 つのコマンドのどれも案内の知らせを出すだけで、ファイルもフォルダも作らないことを確認(0.1.1 で足した。「受け箱を取り込む」は、取り込みが OFF の端末でだけ見た)

分かっている限界

  • ON にするのは 1 台だけ。2 台以上で ON にしたときの動きは確かめていない(同じ項目が 2 回入る、同期でぶつかる、があり得る。2 回入った物は照合の「2回以上ある物」に出る)
  • 項目は時刻順に並べず、取り込んだ順に足す。日付と時刻は窓の欄の値で記録する(23:59 に開いて 0:01 に「記録」を押しても、欄を直さなければ開いたときの日付のまま)
  • 受け箱のファイルは、自動では消えないし動かない。「受け箱を取り込む」の「既にあった」には取り込み済みのファイルも数えるので、手で消すまで数が増える
  • 本文には、見出しの形の行(# 〜 ###### で始まる行)と、区切り線だけの行(--- など)を入れられない(コードブロックの中でも)。ログを読むほかの道具が、見出しや区切りと読み違えないようにするため
  • 総括の骨組みは、見出しの最初のコロン(: か :)の前を名前としてまとめる。見出しにドライブ名(D: のような物)が入っていると、そのコロンで割れる
  • 見出しに入った異体字セレクタ(一部の絵文字に付く U+FE0F)は、黙って消す
  • vault の直下(どのフォルダにも入れていないノート)を、開発ログのフォルダ・受け箱のフォルダとして指定することはできない。空や / は未設定として扱う
  • ログに 1 行目の見出しが無い・日付がファイル名と違うときは、直さずに項目だけ足し、知らせに「H1 がありません」「H1 の日付が違います」を添える

開発

npm install
npm run build        # main.js を作る(型チェックつき)
npm test             # vitest
npm run lint         # eslint-plugin-obsidianmd

書式・挿入位置・受け箱の読み書きの中身は obsidian を import しない関数で、テストは作り物のログだけを使います。環境変数 OP_REAL_VAULT に vault のフォルダを渡すと、その開発ログを読むだけの追加のテストが動きます(書き込みません)。

ライセンス

MIT。LICENSE を見てください。


English summary

Log Stamp adds timestamped entries (### 🕒 [HH:MM] heading) to a one-file-per-day dev log, through an inbox folder that only one device imports.

  • It modifies notes: it creates one small file per entry in an inbox folder, and (on one device only) inserts the entry into the daily log just before the summary heading, or at the end.
  • Importing is off by default. While it is off, the plugin never writes to the log folder. Turn on "この端末で取り込む" on exactly one device; the switch is stored per device and is not synced.
  • Existing lines are never changed. Before writing, the plugin checks that removing the added lines gives back the original text, and aborts if not.
  • Set the two folders first: Settings → Log Stamp → "開発ログのフォルダ" (the log folder, for example Daily log) and "受け箱のフォルダ" (the inbox folder, for example Daily log inbox, outside the log folder). Both are empty by default. Until they are set, the plugin writes nothing, creates no folder, and each command shows a one-line reminder. The vault root cannot be used for either folder.
  • Expects logs at <log folder>/YYYY-MM-DD.md with ### 🕒 [HH:MM] … entries separated by ---, and an optional summary section. The first line and the summary heading are settings; their defaults are Japanese.
  • No network access. No Node.js or Electron APIs. The clipboard is written only by the "copy summary skeleton" command.
  • Install with BRAT: takosasi-dev/log-stamp. Requires Obsidian 1.14.4 or later.
  • The UI is Japanese only.
  • Tested on Windows desktop (Obsidian 1.14.4) only. Real phones and collisions with sync or outside edits have not been tested yet.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.