Codexだけで開発した glowm – ターミナルでMermaidを描画できるMarkdown CLIツール

ツール

はじめに

「ターミナルでMarkdownを見ながら、Mermaidの図もそのまま確認したい」

そんな思いから始まったglowmの開発。今回は特別なチャレンジとして、OpenAI Codexのみで開発を進めてみました。要件整理から実装、テスト、リリースまで、すべてCodexとの対話で完結させた記録です。

作ったもの

glowmは、Glow風のMarkdown表示機能に加えて、Mermaidダイアグラムをターミナル内で画像として表示できるCLIツールです。

主な機能

  • Markdown → ANSIレンダリング: Glamourベースの美しいターミナル表示
  • Mermaid → PNG変換: chromedp + Mermaid.jsでブラウザ不要の変換
  • iTerm2/Kitty対応: インライン画像プロトコルで図を直接表示
  • PDF出力: --pdfオプションでMermaidダイアグラムをPDF化
# 基本的な使い方
glowm README.md

# 標準入力から
cat README.md | glowm -

# PDF出力
glowm --pdf README.md > diagram.pdf

Codexとの開発プロセス

1. 要件整理 – スコープの絞り込み

最初は「Glow相当 + mermaid-cli相当 + 標準出力」という漠然とした要望からスタート。Codexと対話する中で、以下のように仕様が固まっていきました。

  • コマンド名: glowmに決定
  • 出力: 標準出力が基本、PDFはオプション
  • 実装言語: Go
  • 外部コマンド依存なし(glow/mermaid-cliを呼ばない自己完結型)

重要だったのは「URL/GitHub入力の意義が不明」という指摘。ローカルファイルとSTDINのみに限定することで、シンプルな仕様に収束しました。

2. 実装途中での方針転換

MVP実装後、大きな問題が発覚しました。

「ANSIで出力しても、Mermaidの図が見えない」

当初はMermaidをテキストとして表示していましたが、「端末内で図として見たい」という本来の目的に立ち返り、実装方針を大きく変更。

  • iTerm2/Kittyの画像プロトコル対応を採用
  • MermaidをPNG化してインライン表示
  • 非対応端末では従来通りコードブロック表示

この方針転換がglowmの最大の特徴になりました。

3. 細かな調整の積み重ね

Codexとの対話で、表示品質を段階的に改善しました。

  • 画像サイズ: 端末幅に合わせて動的に拡大
  • フォントサイズ: 14px→16px→18px→20pxと調整
  • 見出し表記: Glamourのデフォルト##プレフィックスを削除

4. リリースまで自動化

GitHub pushからHomebrew Formula作成まで、Codexの指示通りに進めました。

brew tap atani/tap
brew install glowm

技術的なポイント

外部依存なしのMermaid変換

chromedpを使い、ヘッドレスChromeでMermaid.jsを実行します。mermaid-cliのインストール不要で、Mermaidのレンダリングを実現しています。

ターミナル画像プロトコル

iTerm2とKittyは、Base64エンコードした画像をエスケープシーケンスで出力することで、インライン画像表示ができます。glowmは端末を自動検出し、適切なプロトコルで出力します。

Codexだけで開発して感じたこと

  • スコープの絞り込みが自然にできる: 対話の中で「それ本当に必要?」と問われることで、必要最小限の機能に集中できた
  • 方針転換のハードルが低い: 実装途中でも「やっぱりこうしたい」と言えば、すぐに対応してくれる
  • ドキュメントも一緒に作れる: ADR、PRD、Tasksなどをコードと並行して作成

おわりに

glowmは「ターミナルでMarkdownとMermaidを一緒に見たい」というシンプルな欲求から生まれました。Codexとの開発は、要件の整理から実装、リリースまで一気通貫で進められる新しい開発体験でした。

ぜひ試してみてください。

リンク

  • GitHub: https://github.com/atani/glowm
  • Homebrew: brew tap atani/tap && brew install glowm
  • Release: https://github.com/atani/glowm/releases/tag/v0.1.1
タイトルとURLをコピーしました