mcpField
A
asciinema-cast-format

asciinema-cast-format

github.com/terrylica開発2132 回インストール今日更新
リポジトリ

asciinema-cast-format について

asciinema の .cast 録画を読み書きするためのリファレンススキルです。録画を調べる開発者や関連ツールの作成者向けに、NDJSON 構造、イベント形式、解析例、大容量ファイルの扱いを説明します。

主な機能

  1. 01ヘッダーとイベントの構造
  2. 02イベントコードとタイムスタンプ
  3. 03jq による解析例
  4. 04大容量ファイルの処理指針

活用シーン

  1. 01.cast のメタデータとイベントの確認
  2. 02.cast の読み書きツールの作成
  3. 03録画形式エラーの調査
  4. 04出力、マーカー、時刻別イベントの抽出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terrylica/cc-skills --skill asciinema-cast-format

インストール後、Claude Code で/asciinema-cast-formatを入力して読み込まれたか確認します。

同梱ファイルreferences/evolution-log.md

詳細

asciinema-cast-format

asciinema v3 の .cast ファイル形式(asciicast v2 仕様)のリファレンスドキュメントです。

プラットフォーム:すべてのプラットフォーム(ドキュメントのみ)

自己進化型スキル:このスキルは使用を通じて改善されます。説明に誤りがある場合、パラメーターが変わった場合、または回避策が必要になった場合は、先送りせず、このファイルをすぐに修正してください。実際に再現可能な問題がある場合にのみ更新してください。

このスキルを使用する場面

以下の場合にこのスキルを使用します。

  • .cast ファイルの構造を解析または調査する
  • NDJSON のヘッダーおよびイベント形式を理解する
  • .cast ファイルを読み書きするツールを構築する
  • 録画の問題や形式エラーをデバッグする
  • asciicast v2 仕様を学ぶ

形式の概要

Asciinema v3 では、NDJSON(改行区切り JSON)形式を使用します。

  • 1 行目:録画メタデータを含むヘッダーオブジェクト
  • 2 行目以降:タイムスタンプ、タイプ、データを含むイベント配列

ヘッダー仕様

1 行目は、次のフィールドを含む JSON オブジェクトです。

フィールド型必須説明
versionintはい形式のバージョン(v3 の録画では常に 2)
widthintはい端末の幅(列数)
heightintはい端末の高さ(行数)
timestampintいいえ録画開始時の Unix タイムスタンプ
durationfloatいいえ合計時間(秒)
titlestringいいえ録画のタイトル
envobjectいいえ環境変数(SHELL、TERM)
themeobjectいいえ端末のカラーテーマ
ヘッダーの例
{
  "version": 2,
  "width": 120,
  "height": 40,
  "timestamp": 1703462400,
  "duration": 3600.5,
  "title": "Claude Code Session",
  "env": { "SHELL": "/bin/zsh", "TERM": "xterm-256color" }
}

イベントコード

ヘッダーの後に続く各イベントは、3 要素の配列です。

[timestamp, event_type, data]
コード名前説明データ形式
o出力端末の出力(stdout)文字列
i入力端末の入力(stdin)文字列
mマーカーナビゲーション用の名前付きマーカー文字列(マーカー名)
rリサイズ端末のリサイズイベント"WIDTHxHEIGHT"
x終了カスタムデータ用の拡張可変
イベントの例
[0.5, "o", "$ ls -la\r\n"]
[1.2, "o", "total 48\r\n"]
[1.3, "o", "drwxr-xr-x  12 user  staff  384 Dec 24 10:00 .\r\n"]
[5.0, "m", "file-listing-complete"]
[10.5, "r", "80x24"]

タイムスタンプの動作

  • タイムスタンプは録画開始からの相対値です(最初のイベントは 0.0)。
  • ミリ秒単位の精度で秒数を表します。
  • 再生タイミングやナビゲーションに使用されます。
絶対時刻の計算
/usr/bin/env bash << 'CALC_TIME_EOF'
HEADER_TIMESTAMP=$(head -1 recording.cast | jq -r '.timestamp')
EVENT_OFFSET=1234.5  # From event array

ABSOLUTE=$(echo "$HEADER_TIMESTAMP + $EVENT_OFFSET" | bc)
date -r "$ABSOLUTE"  # macOS
# date -d "@$ABSOLUTE"  # Linux
CALC_TIME_EOF

解析の例

jq でヘッダーを抽出する
/usr/bin/env bash << 'HEADER_EOF'
head -1 recording.cast | jq '.'
HEADER_EOF
録画時間を取得する
/usr/bin/env bash << 'DURATION_EOF'
head -1 recording.cast | jq -r '.duration // "unknown"'
DURATION_EOF
タイプ別にイベント数を数える
/usr/bin/env bash << 'COUNT_EOF'
tail -n +2 recording.cast | jq -r '.[1]' | sort | uniq -c
COUNT_EOF
すべての出力イベントを抽出する
/usr/bin/env bash << 'OUTPUT_EOF'
tail -n +2 recording.cast | jq -r 'select(.[1] == "o") | .[2]'
OUTPUT_EOF
マーカーを検索する
/usr/bin/env bash << 'MARKERS_EOF'
tail -n +2 recording.cast | jq -r 'select(.[1] == "m") | "\(.[0])s: \(.[2])"'
MARKERS_EOF
特定の時刻のイベントを取得する
/usr/bin/env bash << 'TIME_EOF'
TARGET_TIME=60  # seconds
tail -n +2 recording.cast | jq -r "select(.[0] >= $TARGET_TIME and .[0] < $((TARGET_TIME + 1))) | .[2]"
TIME_EOF

大容量ファイルに関する考慮事項

100MB を超える録画の場合:

ファイルサイズ行数方法
<100MB<1Mjq のストリーミングで問題なく処理できます
100-500MB1-5M--stream フラグを使用し、ripgrep の利用も検討してください
500MB+5M+まず asciinema で .txt に変換してください
メモリ効率の高いストリーミング
/usr/bin/env bash << 'STREAM_EOF'
# Stream process large files
jq --stream -n 'fromstream(1|truncate_stream(inputs))' recording.cast | head -1000
STREAM_EOF
asciinema convert を使用する

非常に大きなファイルの場合は、まずプレーンテキストに変換してください。

asciinema convert -f txt recording.cast recording.txt

ANSI コードを取り除き、クリーンなテキストを生成します(通常、圧縮率は 950:1 です)。


TodoWrite タスクテンプレート

1. [Reference] Identify .cast file to analyze
2. [Header] Extract and display header metadata
3. [Events] Count events by type (o, i, m, r)
4. [Analysis] Extract relevant event data based on user need
5. [Navigation] Find markers or specific timestamps if needed

変更後のチェックリスト

このスキルを変更した後は、次の点を確認してください。

  1. イベントコードの表が asciinema v2 仕様と一致している
  2. 解析例で bash との互換性を確保するためのヒアドキュメントラッパーを使用している
  3. 大容量ファイルに関する指針が実際のパフォーマンス特性を反映している
  4. すべての jq コマンドをサンプルの .cast ファイルでテストしている

リファレンスドキュメント


トラブルシューティング

問題原因解決策
jq の解析エラー.cast ファイル内の NDJSON が無効各行が有効な JSON であることを jq -c . で確認します
ヘッダーに duration がない録画中録画が終了すると duration が追加されます
不明なイベントタイプカスタム拡張イベントx タイプのイベント(拡張データ)がないか確認します
タイムスタンプの順序が不正ファイルの破損イベントは単調増加している必要があります
大きなファイルで jq がタイムアウトファイルが大きすぎてメモリに収まらない--stream フラグを使用するか、先に .txt に変換します
マーカーが見つからない録画にマーカーがないマーカーは任意です。すべての録画に含まれるわけではありません
バージョン番号が不正古い cast フォーマットこのスキルが対象とするのは v2 フォーマットです(asciinema v3+)
tail の出力が空ファイルにヘッダーしかない録画が空、または1行のみの可能性があります

実行後の振り返り

このスキルの実行後、終了する前に確認してください。

  1. コマンドは成功しましたか? — 成功しなかった場合は、失敗の原因となった手順またはエラー表を修正してください。
  2. パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、使用例とパラメーター表を更新して合わせてください。
  3. 回避策が必要でしたか? — 別のフラグや追加手順など、工夫が必要だった場合は、次回の実行時に同じ回避策が不要になるよう、この SKILL.md を更新してください。

実際に再現できる問題がある場合に限って更新してください。推測だけでは更新しないでください。

コメント