ちょっと話題の記事

ターミナルでの入力の記録と再生、Webでの共有が可能なOSSツール – asciinema

今回はCNCFプロジェクト、TelepresenceというKubernetesアプリケーションの開発とテストをローカルで行うツールを紹介しようと思ってましたが、トップページに埋め込まれているasciinemaの方が気になったので紹介します。
2018.11.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、shoito(しょいと)です。
今回はCloud Native Computing Foundation(CNCF)のサンドボックスプロジェクト、TelepresenceというKubernetesアプリケーションの開発とテストをローカルで行うための支援ツールを紹介しようと思ってましたが、トップページに埋め込まれているasciinemaの方が気になったので紹介します。
Telepresenceは別の機会に。

asciinemaとは

https://asciinema.org/

asciinemaはターミナルセッションの記録とWeb上での共有ができるOSSのツールです。
asciinema.orgにはギャラリーも設けられており、他のユーザーが共有しているターミナルの記録が見られます。

asciinemaを試してみた

macOS Mojave(10.14.1)環境で試しました。
Homebrewでインストールします。

$ brew install asciinema

※ macOS以外の環境の場合はInstallationを参考にしてみてください。

ローカルファイルに保存、再生してみる

asciinema rec コマンドで記録を開始できます。
パラメータとしてファイルパスを指定すると、ファイルに保存できます。
今回はカレントディレクトリの hello-world.cast というファイルに保存します。

$ asciinema rec ./hello-world.cast
asciinema: recording asciicast to ./hello-world.cast
asciinema: press <ctrl-d> or type "exit" when you're done
$ # Say Hello World
$ echo Hello World
Hello World
$ # Say Good bye
$ echo Good bye
Good bye
$ date
2018年 11月15日 木曜日 17時46分12秒 JST
$ exit
asciinema: recording finished
asciinema: asciicast saved to ./hello-world.cast

これで hello-world.cast にターミナルの操作が記録されました。
次に、保存したファイルを再生してみます。
asciinema play コマンドで再生できます。

$ asciinema play ./hello-world.cast

コマンドを実行すると以下のように入力スピードや内容がそのまま再生されます。
音は無いので職場でも安心して再生ボタンを押してください。

scriptコマンドとの違いは?と思うかもしれませんが、scriptコマンドはターミナルの表示内容のハードコピーであり、asciinemaと違い操作時の状況を再生したりはしません。

scriptコマンドで作業ログを記録

scriptコマンドみたいに表示内容を確認してみる

ぱっとどんな感じだったか結果だけ見たいという場合は asciinema cat コマンドを使います。

$ asciinema cat ./hello-world.cast
$ # Say Hello World
$ echo Hello World
Hello World
$ # Say Good bye
$ echo Good bye
Good bye
$ date
2018年 11月15日 木曜日 17時46分12秒 JST
$ exit

Webで再生してみる

まずWebで共有する前に、asciinema.orgにアカウントを作成します。
これはアップロードしたファイルとアカウントを結びつけて、タイトルや説明を編集できるようにするためです。

手順としては、画面右上にある Log in/Sign up メニューを押して遷移し、 Log in フォームにメールアドレスを入力します。
メールベースのパスワード無し認証なので、ログインの際は毎回メールアドレスか登録後に設定する username を入力して送られてくるメールにあるリンクからログインします。

アップロードの準備にはもうひと手間あります。
アップロードはCLIで行うため、事前にローカルのasciinemaとasciinema.orgのアカウントをリンクさせます。これは asciinema auth コマンドで行います。

$ asciinema auth
Open the following URL in a web browser to link your install ID with your asciinema.org user account:

https://asciinema.org/connect/XXXX-XXXX-XXXX-XXXX-XXXX

This will associate all recordings uploaded from this machine (past and future ones) to your account, and allow you to manage them (change title/theme, delete) at asciinema.org.

メッセージにあるように https://asciinema.org/connect/XXXX-XXXX-XXXX-XXXX-XXXX をブラウザで開きリンク完了です。

asciinema upload コマンドで記録したファイルを公開します。

$ asciinema upload ./hello-world.cast
https://asciinema.org/a/XLKvvObxMUejVH85xdjlGTF86

コマンド実行後に表示されるURLが再生ページになります。
アップロード直後はprivate状態となっていて、GitHubのGistと同様に、URLを知っている人しかアクセスできません。

ギャラリーやユーザーページで公開したい場合は右下のSettingsメニューから Make publicMake private で切り替えます。
なお、いつでもpublicからprivateへ切り戻せます。

例えデフォルトが非公開でもWebで共有が心配な場合

ローカルだけで保存、再生するか、asciinema/asciinema-serverというサーバのコードが公開されているので独自にインスタンスを立てましょう。
設定で独自のインスタンスにAPIの向き先を変更すれば、asciinema.orgは使われないようです。

さいごに

類似のツールとしてアニメーションGIFに変換できるTerminalizerもありますが、今回はasciinemaを紹介しました。ターミナル操作に関するブログやWebでの見せ方の手段の一つにいかがでしょうか?