紙芝居DSL 3.2から4.0への変換ガイド
Copyright © 2026 Hiroya Kubo. この文書はCC BY-SA 4.0で提供します。
対象: DSL 3.1/3.2の既存台本をDSL 4.0へ移行する方
対象コマンド: tm-kamishibai convert-dsl4
文書状態: 固定実装基準を説明する変換ガイド(正式リリースの操作資料ではない)
調査基準: TM Kamishibai 29c0dea(4.0.0-rc.8)、2026年8月20日
このガイドは、すでに3.1/3.2の台本を持っている方のための移行手順です。初めてTM紙芝居を使う方や、 4.0で最初の作品を作る方は、先に大人向け概要と 「紙芝居を作る」チュートリアルをお読みください。
配布状態との区別: 2026年8月20日時点で
v4.0.0-rc.8はprereleaseとして公開されていますが、 正式なv4.0.0ではありません。convert-dsl4を含むパッケージのリリースを使用し、利用中のパッケージでpnpm exec tm-kamishibai --helpを 実行して、コマンド一覧にconvert-dsl4があることを確認してください。
convert-dsl4は、行ごとに命令を書く3.2の台本を、4.0のYAML台本へ一度だけ変換するコマンドです。
3.1の台本も読み込めますが、変換結果には確認が必要な箇所を「警告」として表示します。
元の台本は変更しません。変換に成功した場合だけ新しいYAMLを保存し、エラー時は書きかけの出力を残しません。 まず元の作品とは別のファイル名を指定し、警告と実行結果を確認してください。
このガイドの位置づけ
このガイドは、DSL 3.1/3.2の文法を説明し直す資料でも、4.0の全項目を説明する資料でもありません。 既存TXT台本を安全にYAMLへ変換し、4.0作者向けの作業へ引き渡すところまでを扱います。
元ファイルを保持→convert-dsl4
別ファイルへ変換→4.0のYAML
警告を確認→台本作成ガイドで確認→検査・画面確認・SB3作成
変換または検査に失敗した場合: 元ファイルを変更せず、表示された問題に対応する入力または生成YAMLを修正します。
変換前は本書の「自動変換を停止する入力」まで確認し、変換後は 紙芝居DSL 4.0 台本作成ガイドの最小台本、作品フォルダーの配置、エラー表示の順に読みます。 項目の型や必須条件を調べるときだけ、検索用のSchemaリファレンスを使用します。
基本コマンド
必要なパッケージを導入した作品フォルダーで実行します。
pnpm exec tm-kamishibai convert-dsl4 \
--input source.txt \
--output story.k4.yml
TMPoseURLは既定でlazy remote poseModelへ変換されます。内容を固定した自己完結SB3を作る場合だけ、
--pose-modelsでローカルのモデルディレクトリへ置き換えます。
pnpm exec tm-kamishibai convert-dsl4 \
--input source.txt \
--output story.k4.yml \
--pose-models pose-models.json
| option | 必須 | 内容 |
|---|---|---|
--input FILE |
必須 | UTF-8のDSL 3.1/3.2台本。BOM、CRLF、CRは読み込み時に正規化します。 |
--output FILE |
必須 | 生成するDSL 4.0 YAML。入力と同じpathは指定できません。 |
--pose-models FILE |
任意 | 内容固定時にTMPoseURLをローカルのポーズモデル素材へ置換するJSONファイルです。 |
相対パスは、コマンドを実行したディレクトリを基準に解決されます。新しいDSL 4.0のソースには短い.k4.yml suffixを
推奨しますが、互換の拡張子である.k4.yaml、.kamishibai.yml、.kamishibai.yamlも使用できます。
変換される内容
converterは、次の構造をDSL 4.0に対応する形へ変換します。
- backdrop、costume、sound、actor
- cover、runtime variable、Loading表示、ポーズ認識音
- SVG Text style、branch、scene
- DSL 4.0 coreに対応するglobal actionとactor action
次のように意味を決める必要がある変換は、元ファイルの行・列と、安定した診断コードを含む警告を 標準エラー出力へ表示します。
- DSL 3.1を3.2互換の文法として解釈した場合
- runtime variableのスカラー型を推論した場合
- costumeを論理的なactorへ付け替えた場合
- 旧DSLに秒数指定がないtransitionを0秒として明示した場合
対応表と各診断の分類は、実装リポジトリの DSL 3.1/3.2からDSL 4.0への移行仕様を 参照してください。
自動変換を停止する入力
意味を保てない入力ではエラーを返し、YAMLを部分出力しません。主な例は次のとおりです。
- 旧Text Asset、
TMPoseURL以外の検証情報を確定できないremote/cacheの素材 - 秒数なしの永続
say/think、style付きsay/think、hideなど同じ意味を保証できないaction - 4.0で必須のcharge soundがないpose recognition設定
TMPoseURLがないpose scene、不正または空のTMPoseURL、空のpose名- 要素数が異なるbranch/key/touch inputのparallel list、最後の無条件遷移がないbranch
- scene内の
setRuntimeVariable、1以外のstartSceneIndex - 非zeroの
poseIdle、独自action、不正なarity、曖昧なcolon区切り
旧Text Assetは、DSL 4.0移行仕様の手動移行例に 従ってSVG Text actorへ移します。独自のScratch blockやSB3のblock graphは入力台本から推測せず、 converterもblockを生成・変更しません。
ポーズモデルの配布方法を選ぶ
変換で一つだけ判断が必要なのが、ポーズモデルをどう配るかです。公開URLのモデルをそのまま参照するか、 モデルを作品へ取り込んで内容を固定するかを選びます。
既定: 公開URLのモデルをそのまま参照する
--pose-modelsを指定しない場合、converterはTMPoseURLを次の通常のremote poseModelへ変換します。
DSL 4.0のposeModelは、delivery: remoteとsource.urlだけの通常のTurboWarp TM directory参照に対応します。
converterはこの変換でネットワーク取得やキャッシュ参照を行わず、integrity等も要求しません。実行時には、URLで公開されている
その時点のモデルを読み込みます。
assets:
PoseModel1:
kind: poseModel
delivery: remote
source:
url: https://example.com/models/rescue/
loading: lazy
手軽な反面、公開元のモデルが差し替えられると作品の動作も変わります。教材として長く使う作品では、 次の方法で内容を固定することを検討してください。
内容を固定する
内容固定、オフライン実行、または自己完結SB3が必要な場合は、model directoryをproject内へ取得してから
--pose-modelsを指定します。JSONのkeyは台本に書かれたTMPoseURLとの完全一致です。
{
"https://example.com/models/rescue/": {
"id": "RescuePose",
"file": "rescue-pose",
"loading": "lazy"
}
}
idはDSL 4.0のasset IDです。Unicode NFCの有効な識別子を指定します。-
fileはプロジェクトルート基準の安全なPOSIX相対パスです。絶対パス、URI、バックスラッシュ、./..segmentは 使用できません。 loadingはeagerまたはlazyです。省略できます。- converterはURLを取得せず、指定したローカルパスだけを生成YAMLへ記録します。ビルダーがモデルのバイト列を SB3へ埋め込みます。
remoteのまま内容を固定する方法もあります。
Schemaリファレンスのremote asset sourceに
従い、単一archive URLとintegrity、contentType、sizeをすべて指定します。ただし、
モデルディレクトリをローカル素材として取得して埋め込む方法を推奨します。
元の3.2台本は保存し、変更後のYAMLを必ずvalidate-dsl4とpreviewで確認してください。
ポーズ関連の変換で起きること
sceneでActor:poseを使っているのにTMPoseURLがない場合はerrorです。
3.1/3.2のActor:poseは候補から1件を選ぶactionではありません。converterはpose名の順にすべて成立させる
Actor.pose.stepsへ変換します。pose数より少ないskin/soundは省略し、余分な要素はwarning付きで除外します。
Async Inputで候補から1件を選ぶ処理は、3.1/3.2テキストDSLのactionではなくSB3のblock graph側の
機能です。converterはこの処理を推測せず、poseInputToChangeSceneを生成しません。
headerのposeRecogはsequence.confidenceThresholdへ変換します。旧runtimeは0.1秒ごとに100を目標として
confidence × poseChargeを加えるため、poseChargeは
sequence.fullConfidenceHoldSeconds = 10 / poseChargeへ変換します。poseIdle=0は変換できますが、
非zero値は旧runtimeだけがconfidenceを乗算するためerrorです。
エラー表示と終了状態
正常時は生成先を標準出力へ表示します。警告とエラーは標準エラー出力へ
source:line:column: severity [code] message形式で表示します。
Converted /project/story.k4.yml
/project/source.txt:2:1: warning [K4-CONVERT-VARIABLE-TYPE] ...
| status | 意味 |
|---|---|
0 |
変換成功。警告がある場合も生成YAMLを出力します。 |
1 |
変換エラー。新規出力を作らず、既存出力を変更しません。 |
2 |
オプション不足や未知のオプションなど、コマンドの使い方が正しくありません。 |
変換後に確認する
生成YAMLを本番と同じフロントエンドで検証します。--max-source-bytesには作品で許容する有限上限を
指定してください。現行実装で指定できる最大値は262144 bytesです。
pnpm exec tm-kamishibai validate-dsl4 \
--input story.k4.yml \
--max-source-bytes 262144 \
--format pretty
次に紙芝居DSL 4.0 台本作成ガイドに従って作品フォルダーを配置し、プレビューで scene遷移、表示、音、ポーズ認識、作品固有blockとの関係を確認します。問題があれば生成YAMLと4.0成果物だけを 破棄し、元台本を3.2のランタイムで継続できます。
プログラムから変換する(JavaScript API)
副作用なしで文字列を変換する場合は、パッケージのexportを使用します。
import {convertDsl32ToDsl4} from '@kubohiroya/tm-kamishibai/converter';
const result = convertDsl32ToDsl4(sourceText, {
sourceId: 'source.txt',
poseModels,
});
if (result.ok) {
console.log(result.yaml);
} else {
console.error(result.diagnostics);
}
convertDsl32ToDsl4はファイル入出力を行わず、ok、正規化したsource、変換後のdocument/yaml、
diagnosticsを返します。ファイルを一括で変換するAPIが必要な場合は、同じexportの
convertDsl32File({inputPath, outputPath, poseModelMapPath})を使用します。
関連資料
- 紙芝居DSL 4.0 台本作成ガイド: 変換後の作品フォルダーの配置、プレビュー、ビルド、実行確認
- 紙芝居DSL 4.0 Schemaリファレンス: field、型、remote assetを含む制約
- DSL 3.1/3.2からDSL 4.0への移行仕様: 対応表、診断分類、rollback境界
convert-dsl4実装Issue #276: CLIとpure APIの受け入れ条件