🦖

Rust製ターミナル操作GIF録画ツールt-recの紹介

4 min read 2

コマンド出力の説明をするときなど、ターミナルでの操作を動画で記録・共有したいときがあります。
この手のサービスはasciinemaが有名ですね。

https://asciinema.org/

しかし、asciinemaで共有された動画はasciinemaのサイト上で再生するのが基本です。
以下のようにGitHubのREADME上では再生することができませんし、(現時点では)Zennにも埋め込めません。

https://github.com/asciinema/asciinema

そうなると、単純な操作例であればGIF動画で記録するのが便利です。
今回は、Rust製のt-recを紹介します。

https://github.com/sassman/t-rec-rs

Rust製ツール、blazingly fast[1]って言いがちですね。実際速い。

導入

MacであればHomebrewでインストール可能です。
なお、GitHubのリポジトリ名はt-rec-rsとなっていますが、ツール自体の名前はt-recです。

❯ brew install t-rec

使用法

t-recで起動し、そこからのターミナル操作が記録されます。

❯ t-rec

起動するとシェル画面がclearされ、[t-rec]: Press Ctrl+D to end recordingという説明が表示されます。

説明の通り、Ctrl+Dで録画を終了し、自動的にGIFとして出力されます。
出力先は同ディレクトリ、ファイル名はt-rec.gif[2]となっています。

ツールの操作説明などに使用する場合、[t-rec]: Press Ctrl+D to end recordingの説明が邪魔に感じますが、--quietオプションで消すことができます。
ほかにも、--end-pause 3sのようにして動画の終わりに3秒の待機時間を入れたり、--videoオプションでmp4形式で出力することもできます。
Blazingly fastを名乗るだけあって、なかなか軽快です。

help内容
❯ t-rec --help
t-rec 0.6.0
Sven Assmann <sven.assmann.it@gmail.com>
Blazingly fast terminal recorder that generates animated gif images for the web written in rust.

USAGE:
    t-rec [FLAGS] [OPTIONS] [shell or program to launch]

FLAGS:
    -h, --help          Prints help information
    -l, --ls-win        If you want to see a list of windows available for recording by their id, you can set env var
                        'WINDOWID' to record this specific window only
    -n, --natural       If you want a very natural typing experience and disable the idle detection and sampling
                        optimization
    -q, --quiet         Quiet mode, suppresses the banner: 'Press Ctrl+D to end recording'
    -V, --version       Prints version information
    -v, --verbose       Enable verbose insights for the curious
    -m, --video         Generates additionally to the gif a mp4 video of the recording
    -M, --video-only    Generates only a mp4 video and not gif

OPTIONS:
    -b, --bg <bg>                     Background color when decors are used [default: transparent]  [possible values:
                                      white, black, transparent]
    -d, --decor <decor>               Decorates the animation with certain, mostly border effects [default: shadow]
                                      [possible values: shadow, none]
    -e, --end-pause <s | ms | m>      to specify the pause time at the end of the animation, that time the gif will show
                                      the last frame
    -s, --start-pause <s | ms | m>    to specify the pause time at the start of the animation, that time the gif will
                                      show the first frame

ARGS:
    <shell or program to launch>    If you want to start a different program than $SHELL you can pass it here. For
                                    example '/bin/sh'

また、上で紹介したGIF自体がこのツールで録画したものです。
t-recでの録画中に更にt-recを実行することで、「t-recで録画して出力する操作をt-recで録画して出力」しています。
これ、ちょっと面白い挙動だと思いました。あまりやりすぎると録画中なのかわからなくなるので注意です[3]

ターミナル以外も録画可能

なんとターミナルではない一般のアプリケーションも録画可能です。

環境変数TERM_PROGRAMに対象のアプリケーションを設定して、ターミナル録画と同様にt-recを実行するだけです。任意のアプリをターミナルだと解釈しているということ…?

❯ TERM_PROGRAM="sidekick" t-rec
[t-rec]: Press Ctrl+D to end recording

終了時はt-recを実行したターミナルにフォーカスを移したうえでCtrl+Dです。

複数ウィンドウが開いている場合はアクティブな一つが対象になるようです。

おわりに

Rust製のGIF録画ツール、t-recの紹介でした。
動画ファイルではないので、GitHub、Zenn、その他多くのサイトで埋め込み可能です。
簡単な操作を記録・共有したいときに使ってみてください。

脚注
  1. またはblazing fast ↩︎

  2. 既に存在する場合はt-rec_1.gifのように番号がつく ↩︎

  3. クリストファー・ノーラン監督の『インセプション』っぽい ↩︎