私はよくRedditのr/commandlineというサブレディットを見ています。ここではコマンドラインツールのリリース情報や、こういう時どうしたらいいんだっけ?っという情報が流れてきます。
先日も情報収集のために徘徊しているとVHSというツールを発見しました。
.tape拡張子のファイルに実行したいコマンドなどを記述してvhsコマンドに渡してあげると、その記述したコマンドを実行しているGif画像を生成してくれるようです。コマンド名といい、拡張子といい、センスありますね。
便利そうなので、試してみます。
インストール
インストール方法はREADME.mdに記載されています。
https://github.com/charmbracelet/vhs#installation
私はMacを使っているのでHomebrewからインストールしました。
ffmpeg、ttydに依存しているので、go getでインストールする場合は、別途ffmpeg ttydをインストールしてください。
google-chrome(or chromium)にも依存してますが、chromeがインストールされていなければ自動でインストールされるようなので、以下のようなログが出ても問題ありません。
[launcher.Browser]2022/10/31 16:42:40 try to find the fastest host to download the browser binary [launcher.Browser]2022/10/31 16:42:40 check https://storage.googleapis.com/chromium-browser-snapshots/Mac/1033860/chrome-mac.zip [launcher.Browser]2022/10/31 16:42:40 check https://registry.npmmirror.com/-/binary/chromium-browser-snapshots/Mac/1033860/chrome-mac.zip [launcher.Browser]2022/10/31 16:42:40 check https://playwright.azureedge.net/builds/chromium/1033860/chromium-linux-arm64.zip [launcher.Browser]2022/10/31 16:42:40 check result: Get "https://playwright.azureedge.net/builds/chromium/1033860/chromium-linux-arm64.zip": context canceled [launcher.Browser]2022/10/31 16:42:40 check result: Get "https://registry.npmmirror.com/-/binary/chromium-browser-snapshots/Mac/1033860/chrome-mac.zip": context canceled [launcher.Browser]2022/10/31 16:42:40 Download: https://storage.googleapis.com/chromium-browser-snapshots/Mac/1033860/chrome-mac.zip [launcher.Browser]2022/10/31 16:42:41 Progress: [launcher.Browser]2022/10/31 16:42:41 00% [launcher.Browser]2022/10/31 16:42:42 45% [launcher.Browser]2022/10/31 16:42:43 100% [launcher.Browser]2022/10/31 16:42:43 Unzip to: /Users/ttanaka/.cache/rod/browser/chromium-1033860 [launcher.Browser]2022/10/31 16:42:43 Progress: [launcher.Browser]2022/10/31 16:42:43 00% [launcher.Browser]2022/10/31 16:42:44 37% [launcher.Browser]2022/10/31 16:42:45 71% [launcher.Browser]2022/10/31 16:42:45 100%
使ってみる
.tapeの雛形を作ります。
vhs new demo.tape
生成されたdemo.tapeを開いてみてください。色々書かれていると思います。
#から始まる行がコメントです。コメントに設定項目が色々書かれています。
Outputは生成するGIFファイルまでのパスです。vhsはGIF MP4 WebMに対応していて、Outputの指定で、拡張子をmp4やwebmにすることで、出力するファイルフォーマットを指定できるようです。
Settingはターミナルの見た目を設定できます。フォントサイズや、ターミナル自体のサイズです。
Sleepは指定秒数sleepします。msやsが指定できるようです。mやminを指定してみましたがエラーになりました。
Typeはターミナルに送る文字列を記述します。ここには実行するコマンドを入力します。
Keysは文字列ではないキーを記述します。EnterやTabなどですね。Ctrl+<key>でモディファイアキーも指定できます。
Displayはコマンド結果の出力を表示、非表示するかを設定できます。例えばパスワードの文字列を取得するようなコマンドで、GIFには載せたくない場合に使えるような気がします。
demo.tapeファイルのバリデーションをします。
vhs validate demo.tape
わざとSleepのSを小文字にしてみました。構文エラーがあると色々教えてくれます。

GIFを生成する
vhs demo.tape
Outputに指定したパスにGIFが生成されます。

ちょっとしたGIF作成に便利そうです。.tapeさえあれば何度でもGIFの生成はできますし、手順書とかでGIFを使う場合に、手順の書き換えも容易です。
