メインコンテンツへスキップ
HALQME

GoでZedのJournal機能互換なCLIツールをVibe Codingした

1分未満
目次

Zed、使っていますか。最近v1に到達して、Agent連携も強化され、よりAI NativeなIDEになっていきそうな、個人的に今注目するべき最高のエンジニア向けエディタです。

Zedは(私から見ると)シンプルさを謳うIDEではあるのですが、初期からある機能としてJournalがあります。 コマンドパレットで new journal entry と打てば、今日の日付のマークダウンファイルに、見出しとして現在時刻が入力されたページが作成されます。 作業中にさくっとメモを残したりするのに便利そうではありますが、あまり使い道が知られていない機能の一つです。ZedのDiscussionにも、この機能が何のためのものなのかというスレッドが存在するほどです。

そんなZedのJournal機能を、ターミナルからいつでも使えるようにGoでCLIツールとして作りました。

journalとは

halqme/journalは、日々のエントリをタイムスタンプ付きで記録するためのCLIツールです。ZedのJournal機能から着想を得ており、同じような感覚で日報や作業ログを残せます。

主な特徴:

  • 直感的な操作 - 直接テキストを渡すことも、エディタを開いて書き込むことも可能
  • プロジェクトモード - -p フラグでカレントディレクトリに .journal/ を作成し、プロジェクト固有のメモを管理
  • fzf連携 - --root オプションでベースディレクトリを出力できるため、fzfなどと組み合わせて過去のログを瞬時に検索
  • カスタマイズ性 - テンプレートやファイル名フォーマット、使用するエディタなどを設定ファイルから自由に変更可能

なぜ作ったのか:AIエージェントの外部記憶として

個人的なログツールが欲しかったのもありますが、最近はAIエージェントが作業中に一貫した方法でログをとるためのインターフェースとして、こうしたシンプルなCLIツールが有用ではないかと考えたのが大きな理由です。

エージェントが自律的に作業を進める際、自分の思考プロセスや決定事項を特定のフォーマットで外部(ファイル)に書き出しておくことで、コンテキストの維持や、後からの監査が容易になります。

使い方

インストール後、すぐに使い始めることができます。

ログの記録

# 直接入力して記録(現在の時間に自動でヘッダーが入ります)
journal "今日の作業を開始。まずは既存コードの調査から。"

# エディタ($EDITOR)を開いてじっくり書く
journal

# プロジェクト固有のログを残す(カレントディレクトリに保存)
journal -p "この機能の設計方針について..."

fzfとの連携

過去のログを検索して開くのも簡単です。

# zsh/bashなどでfzfを使って検索して開く例
vim "$(find $(journal --root) -name '*.md' | fzf)"

Vibe Coding with OpenCode Big-Pickle

今回の開発は、OpenCode Big-Pickleを使って一気に書き上げる、いわゆるVibe Codingで行いました。 こういうシンプルなツールは、Goであれば安価なモデルでもほぼミスなく実装できるのですごく相性が良いと思います。

設定

~/.journal/settings.json で挙動をカスタマイズできます。

{
  "hour_format": "24",
  "path": "~/.journal/entries",
  "template": "# {time}\n",
  "file_name_format": "2006-01-02.md"
}

テンプレートの {time} は実行時の時刻に置換されるため、ZedのJournalのようなタイムスタンプ付きのセクションを自動生成できます。

おわりに

とりあえず動くものは完成しましたが、まだ荒削りな部分も多いです。AIエージェントとの親和性も含め、自分でも使い込みながら育てていこうと思います。