📼

Replay.jl と Asciinema で Julia の REPL の自動実行と記録をまかなえた.

2022/01/21に公開

本日は

以前, Julia の REPL でのキーボード入力作業を自動化する(Replay.jl) というのを書きました.

平たく言えばあらかじめ記述した作業内容を元に Julia によって Julia のREPLの入力を代行するパッケージです. 下記のようにペチペチとキーボードを叩いているかのように見せることもできます.

asciicast

さて, 本題

とりあえず,REPLへの入力は自動化できました. 問題はそれをどう記録するかです.
自分の場合は入力の自動化すればあとは画面のスクショは手動ですればいいじゃんって思ってましたが,Can this package also store the recording to a video file? という Issue がたちまして. 録画も自動化したいですよね.ですよね(・ω・`)... はい.

Pythonだと

(動画としての)スクショの自動化は Python だと pyautoguipygetwindow というのがあってそれを使って 指定された範囲(フォーカスが当たっているウィンドウの領域)に絞ってPIL 形式の画像オプジェクトでスクリーンショットを撮るというものです. 動画を取得したいのであれば時事刻々と画像を取得し OpenCV を使って video フォーマットにて保存するとOKってことになります.

asciinema がご所望のようで

asciinema を使いたいらしいです. これはターミナルでの作業を記録しそのフォーマットをアップロードすることで Web上でその結果をシェアできるサービスもあります. やろうと思えばJSライブラリを手元で置いてセルフホスティングもできたりします. まぁ便利なんだけれど最近メンテ放置されてそう...ってお思ってたら

2021 年に v2.1.0 がリリースがされてたようですね. その前のバージョンは Sep 08, 2019 だったので久しぶりのリリースらしいです.

https://github.com/asciinema/asciinema/releases/tag/v2.1.0

Added official support for Python 3.8 and 3.9

これは嬉しいかも.

色々考えた結果

asciinema はターミナルを起動した時のシェルでの操作しか記録できないと「思い込んでいた」ので作業を記したファイル app.jl を実行する julia app.jl の作業も録画されちゃうからあまりかっこよくないんではと使うのに懐疑的だったんですよね.
ところがどっこい

このコード を見る限り下記のようなオププションがあるらしいのです.

parser_rec.add_argument('-c', '--command', help='command to record, defaults to $SHELL', default=cfg.record_command)

ということで次のように実行すると julia examples/helloworld/app.jl が実行している最中の部分だけ記録できることがわかりました.

$ pip3 install asciinema # install `asciinema`
$ asciinema rec output.cast --command "julia examples/helloworld/app.jl"
$ asciinema play output.cast

下記の asciinema のものは上記のコマンドを実行して実際に得られたものです.

asciicast

正確に,素早くタイピングしている様子がわかります. ちなみに最新版(v0.4 系)では関数定義など複数行にわたる入力の自動化もできるようになりました.

こんなこともできます.

asciicast

まとめ

ということで asciinema と組み合わせて実行結果を記録できそう. ということがわかりました.
ビデオ録画版も作りたいなって思いました.マル.

GitHubで編集を提案

Discussion