UP | HOME

cheat sheet for org-journal

Table of Contents

Last modified: 20240628T1224+0900


業務日誌、研究日誌は、org-journalで付けよう。(後半の「比較」も参照のこと)

いつでもどこでも、 C-c j で日誌を起動してメモを取ることができる。

1. org-journal-mode

org-journalを起動して日誌を書いている状態で、以下のキーが有効。

C-c C-f 次の日誌へ
C-c C-b 前の日誌へ
C-c C-j 現在のファイルに新しいエントリーを挿入
C-c C-s 検索

2. calendar-mode

org-journalの強みは、 M-x calendar で起動するemacsのcalendarと連携していること。calendarを起動してそのバッファに移動した状態で、以下のキーが有効。

j m カレンダーの中でカーソル位置の日誌をマークする
j r カーソルがある日付の日誌を新しいバッファで開き、そこにカーソルを移動する
j d 上と同じだがカーソルは移動しない
j n カーソルがある日付のファイル(なければ作成)に新しいエントリーを追加
j s w 今週を検索
j s m 今月を検索
j s y 今年を検索
j s f すべての日誌を検索
j s F 未来の日誌を検索
[ 前の日誌へ
] 後の日誌へ

3. 運用

3.1. 2024年1月

デフォルトでは、

(setq org-journal-time-format "%R")
(setq org-journal-time-prefix "** ")

となっていて、

** 13:20 秘密会議
会議の内容

のように、新しいエントリーが、第2レベルのヘッダーとして、時刻と共に作成される。しかし、業務日誌や研究日誌は、その日の終わりや、一段落したときに、振り返ってまとめて付けるものだから、この時刻は不要。また、必ずしもヘッダーは必要ないので、この二つの変数は両方とも空にする。

(setq org-journal-time-format "")
(setq org-journal-time-prefix "")  

その上で、日誌ファイルを、日常生活の記録、業務記録、研究記録の三つの部分に分け、それぞれについて記録する。やり方は、まず、次のような内容のテキストファイルを用意して、 org-journal-dir に置く。

** life

** work

** research

そして、このファイルを読み込む関数を次のように作成して、

(defun org-journal-date-format-func ()
"Custom function to journal date header"
(insert-file-contents "./template_for_daily")
)

ヘッダーが作られたときにこの関数が実行されるようにフックを設定する。

(add-hook 'org-journal-after-header-create-hook 'org-journal-date-format-func)

こうすると、毎日、最初にエントリーを作成したときに、 template_for_daily が読み込まれた状態で、新しいファイルが作成される。(ただし、 org-journal-file-type'daily 。)

そうすると毎日のファイルは以下のような形式で蓄積されていく。

* 202401
** life
- オムレツを焼く
- 出勤。サミットで白身魚フライ海苔弁当を買う。
- Xに電話

** work
- 会議
- 書類提出
- 面談

** research
- あの本のどこそこ
- あの論文を第2章まで

時間があれば、 M-x calendar ( [F2]にバインドしている)でカレンダーを起動して、 [] で日付を行ったり来たりしながら過去の日誌を見直す。calendar-modeを参照

3.2. 2024年6月下旬

業務日誌はcalendar / diaryにしたので、通常の日誌はデフォルトに戻す。ただし、新しいエントリーに時刻が付くのは煩わしいので、 C-c j で日誌ファイルを開くごとに時刻を挿入し、その後は通常の - によるリストにする。これは、転記先でhtmlに変換するため。

  (setq org-journal-time-format "%R")
  (setq org-journal-time-prefix "** ")
(defun org-journal-entry-format-func ()
  "Custom function to journal entry"
  (insert "\n- ")
  )
(add-hook 'org-journal-after-entry-create-hook 'org-journal-entry-format-func)  

毎日のファイルの見た目は以下のようになる。

* 20240621
** 10:04 
  - 出汁巻き玉子。
  - 雨が降っていて、ときおり土砂降りになる。
  - 某講演会の報告書を提出。
** 21:09 
  - ジムは中止。雨がしっかり降っているし、体調的にも、無理して行くことはないと感じる。
  - standard-theme.elを試してみる。
  - 夕食は豚肩ロースのタマネギとキノコ炒め。

4. 比較

org-journal以外にも、emacsには日誌をつけるための手段がいくつかある。以下にその比較と考察を行い、今後の方針を考えてみる。

4.1. calendarのdiary

emacs標準。手軽さ、柔軟性、安定感。シンプル極まりないのが長所であり短所でもある。

標準では、 /.emacs.d/diary に記録されるが、変数 diary-file にファイルを指定すると、そこに記録される。たとえば、

(setq diary-file "~/Dropbox/calendar/my_diary.txt")

などと指定することができる。

cf. 32.10.1 The Diary File

入力コマンドは、まず i を叩いて、次に d で日誌の入力画面になる。

i d diary-insert-entry その日の日誌を入力
i w diary-insert-weekly-entry 毎週繰り返す予定を入力
i m diary-insert-monthly-entry 毎月繰り返す予定を入力
i y diary-insert-yearly-entry 記念日の入力

また、calendarバッファで s を叩けば、 diary-file 自体が開く。 また、 i d を使う場合には、後述の org-agendaとの関係に注意する必要がある。

cf. 32.10.4 Commands to Add to the Diary

calendar / diaryでは、とくに、定期的な予定の入力が簡単。

5/11 太郎の誕生日
Thursday 16:00 木曜会

などと書ける。これをorg-modeで書くと、

* 太郎の誕生日
<2000-05-11 +1y>

* 木曜会
<2024-05-02 Thursday 16:00 +1w>

などとなる。

4.1.1. org-modeとの併用

このようなcalendarのdiaryは、 org-agenda-include-diaryt にすることで、org-agenda viewで表示される。

(setq org-agenda-include-diary t)

ただし、org-agendaと併用する場合は、 org-agenda-diary-file の値に注意すること。これに、以下のように具体的なorgファイル名を指定すると、calendarやorg-agenda viewで i を叩いたときに org-agenda-diary-entry が起動し、そのorgファイルに書き込まれる。

(setq org-agenda-diary-file "~/Dropbox/org/agenda24.org")

他方、以下のように、その値を diary-file に指定すると、calendarとorg-agenda viewで diary-insert-entry が起動して diary-file に書き込まれる。(現在の運用)

(setq org-agenda-diary-file 'diary-file)

つまり、calendarから i ddiary-file に日誌を書き込みたければ、 org-agenda-diary-file の値を後者のように設定する必要がある。前者の設定にしておいて、なおかつ、 diary-file に書き込みたい場合には、calendarバッファから sdiary-file 全体を表示させて、それを編集する。

  1. tips

    calendar/diaryの書式では、日付の行の下に、一つ以上のスペースのあとに入力された内容は、その日付の内容だと見なされる。org-agenda viewにも、そのすべての内容が表示される。これが少し邪魔と感じる場合には、日付の下に、スペースを空けないで、詳しい内容を書いておけば、それは、その日付の内容とは見なされないので、org-agenda viewにも表示されない。

    5/11/2024 タイトル
    行頭にスペースを入れずに
    内容をたくさん
    いくらでも書いておく
    

    この場合、org-agenda viewには、「タイトル」だけが表示される。

4.2. org-capture

org-captureは柔軟なので、日誌用のテンプレートを作ることもできる。

cf. 10.1.3 Capture templates

(setq org-capture-templates
         '(
           ("j" "Journal"
            entry (file+datetree "~/Dropbox/org/journal.org")
            "* %?"
            :empty-lines 1)
           )
         )

たとえば、このように設定すると、ターゲットのファイルの中に、以下のようなツリー状の構造でテキストが蓄積される。

* 2024
** 2024-05 May
*** 2024-05-11 Saturday

**** 1st entry of diary
bra bra bra

**** 2nd entry of diary
bro bro bro

4.3. denote

denoteでは、denote-journal-extrasを使って日誌が書ける。というよりも、 _journal というキーワードを各ファイルに付加するだけで、denoteのシンプルなファイル管理システムの中に日誌も取り込んでしまう。calendarやorg-journalにはない独自の発想で、これはこれでアリなのかもしれない。

cf. 13. Keep a journal or diary

4.4. org-roam

emacsのノート整理分野で一世を風靡した(現在もおそらくトップ)org-roamだが、日誌を書くためのコマンドも用意されている。自前のtemplateを準備してorg-captureで日誌をつけるよりは便利だが、org-journalほど細かい設定はできないという印象。データベースを使うので、手軽さは感じられない。

cf. 13.3 org-roam-dailies

cf. Keep a Journal in Emacs with Org Roam

4.5. 比較のまとめ

(2024年5月時点)

発想の観点から言うと、選択肢は三つ。

calendar / diary
とにかく軽くてシンプル。calendarやorg-agenda viewから呼び出して何でも柔軟に書ける。
org-journal
本格派。calendarとの連携や検索など、日誌としての機能が充実している。
denote-journal-extras
期待の新人。新しい発想で、diredなど、emacs自体の機能を活かすことが考えられている。将来性は一番かもしれない。

番外

org-roam-dailies
すでにorg-roamを使いこなしていて、新しい設定を最小限にして日誌を始めたい場合。あるいは、org-roamの中で日誌も処理したい場合。日誌としての機能はorg-journalに劣る。calendar/diaryのような手軽さも、denoteの新鮮さもない。ただし、これはあくまでも日誌としての評価で、メモ管理システムとしてのorg-roamはきわめて優秀であり、私も長年使用している。(最近、denoteに移行しつつあるが、まだ完全にorg-roamから離れてはいない。)

4.6. 考察

  • 予定の管理は一元化することが鉄則であり、分散させると忘れるリスクが高まる。その意味で、予定は日誌とは別に管理することが望ましい。org-journalは、予定管理としても使えるが、これは極力避ける方針にする。
  • 予定は、これまで通り agendaYY.org というファイルにまとめる。YYの部分は、西暦下二桁。入力は、org-captureまたはcalendarから行う。
  • 日誌は、上記三つの選択肢があるので、それぞれ使い分けたい。ちょうど、現在、「生活上の記録」「業務上の記録」「研究日誌」という三つの分類で日誌をつけているので、この三つに対応させられないか。

4.6.1. 2024年5月初旬の案

calendar / diary
研究日誌。基本的に研究日誌はメタノートであって、ノートの実体は別のところにある。いつ何を読んだか、何を書いたか、などを記録するものなので、簡易的なメモで十分。
org-journal
生活上の記録。こちらは定番なので変更なし。
denote-journal-extras
calendar/diaryで作成する研究日がメタノートならば、denoteやorg-roamは、ノート本体を書くためにある。denote-journal-extraを使って、あえてdenoteで日誌を付ける意味や場面は、まだ思い浮かばない。

4.6.2. 2024年5月下旬、ほぼ1ヶ月使ってみた。

  • calendar / diary は研究日誌として確かに優れている。 C-c a aorg-agenda view を開いたときに、 i ですぐにメモできる。そして、その内容が、 org-agenda view の一番下に表示されるので、確認しやすく、記憶にも残りやすい。
  • diary-file は、通常のdenoteファイルを一つ作り、それに metanote index research journal diary といったキーワードを付けて、そのファイル名を変数 diary-file に格納する。デフォルトは /.emacs.d/diary だが、このように分離させると、denoteなどで扱いにくい。研究日誌をdenoteのファイルにしておけば、本体となるメモやノートとのハイパーリンクなどが自由に使える。
(setq diary-file "~/Dropbox/org/20240524T103226--research-journal__diary_index_journal_metanote_research.org")

Date: 2023-12-29 Fri 10:05

Author: Yoshinori Ueeda

Created: 2024-06-28 Fri 12:24

Validate