Skip to content
eclair's note
Go back

コンソール出力を綺麗なSVG画像にするツールを作ってみた

Edit on GitHub
この記事は Zenn にも投稿されています。

ライブラリの実行結果をREADMEに貼り付けるにあたり、png等の貼り付けだと画質が微妙になりがちです。
そこでsvgで出力できるツールを調べてみて、ほしいものが見つからなかったのでさくっと作ってみました。

概要

こんな感じで、背景・ウインドウ枠付きの綺麗なSVGが生成できます。(コマンドにはoh-my-logoを使わさせていただきました)

動画も吐き出せます。

従来の方法/問題点

コンソール出力をSVGに変換する方法としては、asciinemasvg-termを組み合わせる方法が一般的です。

svg-term --out demo.svg --width 80 --height 24 --no-cursor --command "(command)"

しかし、個人的に

  • asciinemasvg-term(npm/node)の依存があるのが面倒
  • asciinemaはWSLでしか動かない(Windowsで手軽に生成できない)
  • dotnet tool installで導入したい
  • コンソールの出力をそのまま使いたいことは少なく、適切に切り取りたい
  • コマンドが長い!

という点がちょっと気にいりませんでした。そこで自作してみました(AIが99%ぐらいやりました)。

作ったツール

その名もconsole2svgです。

npmまたはdotnet toolで手軽にインストールできます。

# npm
npm install -g console2svg
# dotnet
dotnet tool install -g ConsoleToSvg

静的バイナリも配布しているので、そちらをダウンロードして使うこともできます。

使い方

以下のように--の後ろにコマンドを指定するだけです。

console2svg -- dotnet

そのまま実行すると幅80、高さ24のSVGが生成されます。変更したいときは-w-hで指定します。
また、よくあるmac風のwindowをつけることもできます。

console2svg -w 120 -h 16 -d macos -- dotnet

出力が長い場合、そのうちの一部を切り取って使いたいこともあるかと思います。その場合、crop-top/crop-bottomオプションで切り取りを指定できます。指定方法もいくつかあり、ch(行数or文字), px(ピクセル), テキスト指定(指定したテキストが出てくるまで)から選べます。

例えばdotnet --infoの出力は非常に長いので、HostおよびSDKsの情報だけ切り取ってみます。
この際、sdkの情報をピンポイントで切り取るのは難しいので、その下にいる.NET runtimes installedの行を基準にして、そこから2行上に切り取ることにします。

console2svg -w 60 -h 16 --window macos --crop-top "Host" --crop-bottom ".NET runtimes installed:-2" -- dotnet --info

--backgroundオプションで背景色をグラデーションにしたり、画像を指定することもできます。

# グラデーション
console2svg -w 100 -h 10 -c -d macos-pc --background "#004060" "#0080c0" --opacity 0.8 -o ./assets/cmd-bg2.svg -- dotnet --version
# 画像
console2svg -w 100 -h 10 -c -d macos-pc --background ./assets/bg.png --opacity 0.8 -o ./assets/cmd-bg3.svg  -- dotnet --version


何が嬉しいのか

  • SVGなので拡大してもきれい!
  • 背景やウインドウ枠をつけることで、見栄えが良くなる(そのままドキュメントサイト等に使える!)
  • 動画も吐き出せるので、動いている様子も見せられる(マニュアルに最適!)
  • 全てコマンドで完結するので、CI等に組み込んで自動生成できる!

といったメリットがあります。
とくにドキュメント等の画像だと、現物のソースコードと画像とで乖離しがち(それでいて差異があると不親切!)なので、CIで自動生成できるのは便利だと思います。

感想

1日でできました。AIすごい。最近人間の存在価値をよく考えるようになってきました
自分用のツールですが、比較的汎用的に使えるように作ったつもりなので、もし興味があれば使ってみてください!
もし気に入ったならstarをお願いします!


Edit on GitHub
Share this post on:

Previous Post
GitHub Codespace(風)環境をセルフホストしてAgentを使い倒す
Next Post
コンソール出力をSVGに変換する