ttyrec と ttycast というソフトを使うと、ターミナルの操作をウェブで配信することができます。
勉強会のデモでターミナルを共有するのに便利そうなので、使い方を簡単にまとめます。
ttyrec とは
ttyrec はターミナルを録画するソフトです。開発自体は2006年以降止まっているようですが、npm のパッケージもあるので、非常に簡単に導入することができます。
ttycast とは
ttycast は ttyrec で録画したターミナルをウェブで配信するソフトです。node で書かれていて、こちらも npm でインストール可能です。
インストール
npm でインストールするだけです。npm 自体は brew や apt、yum で入れることができます。
$ npm install -g ttycast ttyrec
ターミナル操作を録画する
ファイルを指定して ttyrec を実行することで、ターミナルの録画を開始することができます。 録画を終了するには、 Ctrl+D
で EOF を入力します。
$ ttyrec <録画ファイルの保存先>
$ <録画したい操作>
...
# <Ctrl+D> で録画終了
録画内容を確認する
ttyrec と共にインストールされる ttyplay というコマンドで、再生することができます。
$ ttyplay <録画ファイル>
-s
オプションで、再生スピードを調整することもできます。
$ ttyplay -s <再生速度> <録画ファイル>
録画内容をウェブで配信する
録画内容をウェブで配信するには、 ttyplay と ttycast を組み合わせます。
ttycast のオプションで、 画面サイズを指定することができるので、録画時のサイズに合わせておくと無難です。
$ ttyplay <録画ファイル> | PORT=<ポート> ttycast -s <横>x<縦> # http://0.0.0.0:<ポート> で内容を確認できる
ただし、この方法だと、 ttycast と立ち上げると同時に再生が始まってしまいます。
デモなどで使う場合は、再生タイミングを調整したいことがあるのですが、その場合は fifo を作って ttycast を起動しておきます。
$ mkfifo <fifoフィアル>
$ ttyplay <fifoファイル> | PORT=<ポート> ttycast # サーバーを起動しておく
再生したいタイミングで、上記とは別のターミナルで録画ファイルを fifo に流し込めば OK です。
$ tail -f -n+1 <録画ファイル> > <fifoファイル>
ターミナル操作をリアルタイム配信する
操作を録画しておくのではなく、リアルタイムに配信することもできます。
一番簡単な方法は、ターミナルの記録と配信を同時に行ってくれるラッパを使うことです
$ ttyreccast <録画ファイル>
ttyreccast は、/tmp/ttycast
をつくって、それを見つつ <録画ファイル> にも保存してくれるように ttycast を起動して待機してくれるので、別のターミナルを立ち上げ、
$ reset && ttyrec /tmp/ttycast
$ <配信したい操作>
...
# <Ctrl+D> で終了
とすれば、ターミナルの操作をリアルタイムに配信することができます。
参考情報
ttygif という、ttyrec の結果をGIFに変換するツールもあります。
まとめ
ttyrec/ttycast、単純だけど面白い。