← ドキュメント一覧

KS(タグ記法)仕様書

作成日: 2026-03-06 / 更新日: 2026-06-09

Kaede Scriptタグ記法(KS、.ks の詳細仕様書です。TyranoScript / KAG 系の書き味に近い、@コマンド 引数 形式でシーンを宣言的に描写します。

Kaede Script 全体像

kaedevn のスクリプト言語は 1 つ(Kaede Script)で、2 つの記法を提供します:

  • タグ記法(KS、.ks — 本仕様書。宣言的でシーン描写向き
  • コード記法(KSC、.kscKSC 仕様書。手続き的で複雑なロジック向き

概要は Kaede Script 概要 を参照してください。

処理方式: コンパイラ

KS は コンパイラ方式 で動作します。スクリプト全体を事前に Op[](命令配列)に変換してから実行します。

.ks スクリプト
    |
    v
Tokenizer ── 字句解析(行を分類)
    |           lineClassifier で COMMAND / TEXT / LABEL 等を判定
    v
Parser ───── 構文解析(コマンドレジストリ参照)
    |           commandRegistry.ts が全コマンドの定義源
    v
Transformer ─ 変換(テキスト内の @l/@p/@r 展開など)
    v
Finalizer ── 検証 + Op[] 出力
    |           プラットフォーム非依存の命令列
    v
OpRunner ─── 1命令ずつ実行、描画エンジンに委譲

コンパイル済みの Op[] はプラットフォームを問わず共通です。同じ命令列が Web ブラウザでも Nintendo Switch でも実行されます。

1. 構文の基礎

コマンドの書き方

コマンドは行頭の @ に続けて、引数をスペース区切りで並べます。属性はクォートで囲みません。位置引数と key=value 形式の両方が使えます。

@bg room
@bg room fade=500
@ch 赤音 smile C
@bgm theme vol=80 fade=1000

旧仕様にあった id="room" のようなクォート属性形式や [bg id="room"] のブラケット形式は 使いません。実際の区切りはスペースで、値はクォートしません。テキスト内に埋め込めるのは @l @p @r の 3 つだけです(後述)。

行の種別

コンパイラはまず各行を以下に分類します:

  • COMMAND@ で始まる(例: @bg room
  • LABEL* で始まる(例: *scene_01
  • COMMENT// または ; で始まる(例: ; メモ
  • SPEAKER# で始まる(例: #赤音# 単独で話者リセット)
  • VAR_SET変数 = 値(例: flag_a = 1love += 10
  • CHOICE / IFchoice { / if (条件) { で始まるブロック(後述)
  • TEXT — 上記以外(地の文・セリフ)

2. メッセージと話者

テキスト表示

コマンド以外の行はそのままテキストとして表示されます。改行・クリック待ち・改ページ はテキスト末尾に @r @l @p を付けて指定します。

今日もいい天気だ。@l
  • @l — クリック待ち(テキストを消さずに次を追加表示)
  • @p — 改ページ(メッセージをクリアして次を表示)
  • @r — 改行

これら 3 つだけはテキスト行の途中・末尾に埋め込めます。それ以外のコマンドは必ず独立した行に書きます。

話者の指定

話者名は 2 通りで指定できます。

方法 A: #名前 を直前の行に置く

#赤音
おはよう!今日もいい天気だね。@l

方法 B: 全角コロン で名前とセリフを区切る

赤音:おはよう!今日もいい天気だね。@l

半角コロン :名前「セリフ」 のカギ括弧形式は話者として解釈されません(そのまま本文に表示されます)。話者抽出に使えるのは #名前 行か、全角コロン です。

3. コマンド・リファレンス

KS で使用可能なコマンドは現在 約 60 種 です(commandRegistry.ts が単一の定義源)。カテゴリ別に示します。

基本(ノベル)

  • @bg id [fade=N] [x= y= s=] [slide_left/slide_right=N] — 背景を変更
  • @ch name pose pos(L/C/R) [fade=N] — キャラ(2D 立ち絵)を表示
  • @ch_hide name [fade=N] — 特定キャラを消去
  • @ch_clear [fade=N] — 全キャラを消去
  • @ch_move name pos [time=N] — キャラの立ち位置を移動
  • @overlay id [fade=N] / @overlay_hide [id] — オーバーレイ画像の表示/消去
  • @bgm id [vol=N] [fade=N] / @bgm_stop [fade=N] — BGM 再生 / 停止
  • @se id [vol=N] — 効果音を一度再生
  • @voice id / @wait_voice_end — ボイス再生 / ボイス終端まで待機
  • @wait sec — 指定秒数待機
  • @scroll_text "テキスト" [speed=N] — スタッフロール等のスクロール表示
  • @text_style [bgColor=#xxxxxx] [nameColor=#xxxxxx] — メッセージ枠 / 名前枠の色

キャラ表現(2D / Live2D / VRM 共通)

表情・口パク・モーションは 3 系統横断で同じコマンドが使えます。

  • @ch_expr name expression [fadeMs=N] — 表情変更
  • @ch_lip name mode(auto/off/voice) [audioUrl] — リップシンク
  • @ch_motion name motion [index] — モーション再生
  • @ch_param name param value [durationMs] — パラメータ操作
  • @ch_state name layer state — レイヤ状態切替
  • @ch_anim name pose pos — アニメ立ち絵

Live2D

  • @live2d modelId [path= motion= index= x= y= scale=] — Live2D モデル表示
  • @live2d_hide modelId — 非表示
  • @live2d_motion modelId motionGroup [index=N] — モーション
  • @live2d_expression modelId expression — 表情

VRM / 3D キャラ(開発中・Web のみ)

  • @sceneMode 2d|vrm — 2D / 3D シーンの切替
  • @vrmShow id [pos= x= y= s= rotY= fade=] / @vrmHide [fade=] — VRM モデルの表示 / 非表示
  • @vrmExpression name [weight= dur=] — 表情
  • @vrmPose aPose|idle — ポーズプリセット

演出・エフェクト

  • @camera [x= y= zoom= pivotX= pivotY= time= easing= shake=] [reset] — カメラのパン / ズーム / 揺れ
  • @shake [intensity= duration=] — 画面揺れ
  • @flash [duration=] — フラッシュ
  • @fade_black / @fade_white [duration=] — 黒 / 白フェードアウト
  • @black_in / @white_in [duration=] — 黒 / 白からのフェードイン
  • @filter(別名 @screenFiltertype [intensity] [options...] — 画面フィルター
  • @filter_mix type1 i1 type2 i2 ... [target=scene/bg/ch] — 複数フィルターの合成
  • @filter_clear(別名 @screenFilterClear)— フィルター解除
  • @color_adjust [brightness= contrast= saturation= temperature= target=] — 色調補正
  • @particle preset [x= y= s= duration= intensity= blend=] / @particle_stop [preset] — パーティクル
  • @effect id [wait=true] [scale= intensity= x= y=] — JSON 宣言型エフェクト(effect.json を再生)
  • @slash [x= y= angle= length= duration= color= blend= width=] — 斬撃トレイル

制御・フロー

  • @jump *ラベル名 — ラベルへ移動
  • @call *ラベル名 / @return — サブルーチンの呼び出し / 復帰
  • @call_template templateId — コモンイベント(テンプレート)呼び出し
  • @layout_set name — レイアウト切替

インラインコマンド(テキスト内に埋め込み可)

  • @l — クリック待ち
  • @p — 改ページ
  • @r — 改行

開発中(RPG レイヤー — クリエイターには未公開)

RPG(データベース / マップ / イベント / コマンドバトル)は開発中で、現時点ではクリエイターに公開されていません。記法上は以下が定義されています。

  • @map_load id [x y direction] / @map_exit — マップの読込 / 退出
  • @player_move direction steps / @event_move eventId x y [durationMs] — 移動
  • @item_add id amount / @item_remove id amount — アイテム増減
  • @battle troopId [onWin=*ラベル onLose=*ラベル] — コマンドバトル開始

4. 選択肢

選択肢は choice { ... } ブロックで記述します。各選択肢は "テキスト" { ... } で、if (条件) を付けて出現条件を指定できます。

*crossroad
choice {
    "一緒に帰る" {
        @jump go_home
    }
    "デートに誘う" if (love > 50) {
        @jump date_event
    }
}

*go_home
#赤音
じゃあ、一緒に帰ろう!@l
@jump day_end

*date_event
#赤音
えっ、デート!? 喜んで!@l
@jump day_end

*day_end
; こうして一日が終わった。

5. 条件分岐

if (条件) { ... } else { ... } で記述します。

if (love > 50) {
    #赤音
    大好きだよ!@l
} else {
    #赤音
    またね。@l
}

6. 変数と演算

フラグ管理などに使用します。代入は =、加減算は += / -= が使えます。

flag_a = 1
love += 10
hp -= 5

乗除や複雑な式・関数・ループが必要な場合は KSC(コード記法) を使ってください(KSC 仕様書)。

Op 型(コンパイル出力)

コンパイラが出力する主な命令の種類です。同じ Op 配列が全プラットフォームで共通して実行されます。

  • テキストTEXT_APPEND(話者 + 本文), TEXT_NL, PAGE, WAIT_CLICK
  • 背景 / キャラBG_SET, BG_CLEAR, CH_SET, CH_HIDE, CH_CLEAR, CH_MOVE, CH_EXPR, CH_LIP, CH_MOTION, OVERLAY_SET, OVERLAY_HIDE
  • Live2D / VRMLIVE2D_SET, LIVE2D_MOTION, VRM_SHOW, VRM_EXPRESSION, SCENE_MODE
  • 演出CAMERA_SET, SHAKE, FLASH, FADE_BLACK, FADE_WHITE, BLACK_IN, WHITE_IN, SCREEN_FILTER, FILTER_MIX, COLOR_ADJUST, PARTICLE_EMIT, EFFECT_PLAY, SLASH_EMIT
  • 音声BGM_PLAY, BGM_STOP, SE_PLAY, VOICE_PLAY, WAIT_VOICE_END
  • 制御CHOICE, JUMP, JUMP_IF, CALL, RETURN, CALL_TEMPLATE, VAR_SET, VAR_ADD, VAR_SUB
  • 待機WAIT_MS, WAIT_CLICK, WAIT_VOICE_END

サンプルシナリオ

; === 学園シーン ===
*scene_01

@bg classroom
@ch 赤音 smile C
#赤音
おはよう!今日もいい天気だね。@l

@ch_expr 赤音 thinking
放課後、どうする?@p

choice {
    "一緒に帰る" {
        @jump go_home
    }
    "図書館で勉強" {
        @jump library
    }
}

*go_home
@ch_expr 赤音 smile
やったー!一緒に帰ろう。@l
love += 5
@jump day_end

*library
@ch_expr 赤音 sad
そっか…じゃあまたね。@l
@jump day_end

*day_end
@ch_hide 赤音 fade=500
@bg sunset
; こうして放課後が過ぎていった。

さらに詳細なロジックを組むには

TypeScript に近い構文で、より複雑なゲームシステム(バトル、インベントリ等)を構築したい場合は、KSC(Kaede Script Code)仕様書 を活用してください。KSC ではユーザー定義関数、型チェック、for/while ループなどの高度な機能が使えます。

関連ドキュメント

Ad: inContent (336x280)
Ad: stickyBottom (728x90)
kaedevn - ノベルゲームを作れるプラットフォーム