世界を動かす技術を、日本語で。

Nix、Vim、coreutilsを使ったジャーナリング

2025年8月12日原文(tangled.sh)

概要

  • {neo,}vim、coreutils、dateutilsを使った プレーンテキストジャーナルシステム の紹介
  • Ryder Carollの Bullet Journal 方式を参考にした月単位・週単位管理
  • 記号(シグニファイア)Vimの自動化 による効率的整理
  • シンタックスハイライト集計スクリプト による視認性・分析強化
  • 日付操作や 複数月同時表示 のコマンド例も解説

Vim・coreutils・dateutilsで作るBullet Journal風ジャーナルシステム

  • ジャーナルは 年ごとのディレクトリ、各年は 月ごとのファイル で管理
    • 例: journal/2023/01journal/2023/02など
  • 月初めに カレンダー を挿入(:read !cal -mコマンド活用)
  • 週単位でタスク管理、各週は見出し+各項目を1行ずつ記述

タスク記号(シグニファイア)の工夫

  • タスクの状態や種類ごとに 記号 を使い分け
    • ·(U+00B7): todo(未完了タスク)
    • ×(U+00D7): done(完了タスク)
    • o: event(イベント)
    • -: note(メモ)
    • >: moved(移動)
  • Vimの abbreviation機能 で記号入力を自動化
    • 例: :iabbrev todo ·todoと入力→自動で·に変換

タスクの グループ化・ソート

  • タスクを 記号ごとにグループ化・並べ替え
    • 範囲選択(vip)→:sortコマンドで整列
    • :set formatprg=sort\ -V設定でgqipショートカットも可能
  • 記号のUnicode値を活用し todoが上、doneが下 など好みの並び順に調整

シンタックスハイライトで 視覚的な区別

  • 各記号ごとに Vimのsyntax match でグループ化
    • 例: :syntax match JournalDone /^×.*/
  • :highlightコマンドで 色分け (例:doneはグレー、eventはシアン、noteは黄色)

習慣トラッキング・集計

  • 週ごとに 習慣ヘッダー支出記録 を記述
  • awkスクリプト で月間支出などを自動集計
    • 例: awk -f spend.awk journal/2023/01で合計金額表示

振り返り・複数月同時表示

  • 複数月のファイルを同時に開く ことで、過去の記録を参照しながら計画
    • 例: vim -O journal/2023/0{1,2,3}で1月~3月を縦分割表示

日付コマンドによる 効率化

  • 現在月のファイルを自動で開く: vim $(date +"%Y/%m")
  • 2ヶ月前~2ヶ月後の月を一括表示:
    • vim -O $( dateseq "$(date --date "2 months ago" +%Y/%m)" "$(date --date "2 months" +%Y/%m)" -i %Y/%m -f %Y/%m )
  • dateutilsの dateseq コマンドで日付範囲を柔軟に指定

カスタマイズ・運用例

  • サンプルvimrcやnix flakeファイルも リポジトリ で提供
    • 例: git clone https://tangled.sh/@oppi.li/journal
  • ASCIIアート や好みの記号、派手なハイライトで個性も演出可能

注意点・所感

  • org-modeユーザー からの理解は期待しないこと
  • プレーンテキストでも 紙の手帳に負けない楽しさ と柔軟性
  • 自己流カスタマイズ で日々の記録がより快適に

まとめ

  • Vim、coreutils、dateutilsを活用した Bullet Journal風ジャーナル運用法
  • 記号・自動化・色分け で見やすく管理
  • 集計や複数月表示 もシェルコマンドで効率化
  • プレーンテキストならではの 自由度拡張性

Hackerたちの意見

nixが何をしてくれるのか、よくわからないな。vimはもちろん、coreutilsもあるけど、GNU特有のものはすぐには見当たらないし、flake.nixで書かれた小さなラッパースクリプトがあるだけだね。vimをインストールしたらOpenBSDでも動くようなものしか見当たらないよ。(とはいえ、いいジャーナリングシステムではあるけどね)

これはいくつかの理由であまり良い例じゃないけど、要は誰でもツールを完全にインストールした状態でシェルを使えるってことだね。コマンド一発で:nix shell 'git+https://tangled.sh/@oppi.li/journal' これはシェルエイリアスには過剰すぎるけど、もっと複雑なプロジェクトにはすごく便利だよ。

作者はテックトレンドに乗って「クールさ」をアピールするタイプみたいだね。そういう人たちは、実際の利益のためじゃなくてニッチだからこそ、こういう absurなスタックを使うんだ。

うーん、ここではNixが特に何かするとは思えないけど、僕は通常、システムをできるだけ一貫性のある状態に保つためにこういうことをするかな。アクティブにメンテナンスされていなくても、長期間にわたってね。これでjournalコマンドが正確に同じように動くことは保証されると思う。dateutilsのバイナリがflake.lockのバージョンに固定されるからね。nvimも固定されると思ってたけど、特別な設定があるからこそ、そこにもっと壊れやすい変更があると思ってたんだ。こういう小さなツールやプロジェクトだと、またアクティブに注目するまでに数ヶ月から数年かかるかもしれないし(単に使わなくなるかもしれないから、関係ないけど)。

フレークにはvimrcがバンドルされたnvimが入ってると思ってたんだけど。そうすれば、nix develop環境でnvimを開くだけで、最小限のジャーナリング環境ができるよね(cdしたときにdirenvみたいなものでアクティベートすることもできるし)。

blosxomを復活させてほしいな: https://en.m.wikipedia.org/wiki/Blosxom

todoアイテムが2-3語だけだったらいいのにな。例を見た感じでは問題なさそうだけど、実際のデータだとどうなるかは怪しいね。

まだ詳しい記事は読んでないけど、ちょっとした話としてTODOリストは「動詞 名詞 [- 説明]」にしてる。- 牛乳を買う - 医者に電話 - 肩 - 整備士に電話 - ヘッドガスケット 簡潔にすることで、すぐに見返せるのが助かる。すぐに見返せるから、すぐに実行できるんだ。

なんか「nix宗教」ってよく聞くけど、これって何なの?

Nixは、過去20年と未来20年が同時に存在するようなコンピューティングの形だね。大好きだよ。正直に言うと、これはコンピュータや環境を構築するための決定論的な方法なんだ。pipやuv、packages.lockみたいな感じで、すべてに対して使えるんだよ。

これはnodeやnpm、pythonとかを使う人向けだと思う。開発環境やツールが最初からうまくいかないことが多いし、みんなが互換性のないパッケージを使ってるからね。

ここで「tangled.sh」について考え込んでるけど、これがこの投稿の全てのポイントかもしれないね。

Hacker Newsで議論の続きを見る