Kaede Script — kaedevn のスクリプト言語
kaedevn で物語を動かすための独自スクリプト言語です。1 つの言語に、作者の書きやすさに合わせた 2 つの記法を用意しています。どちらを使っても同じ実行結果が得られ、同じ作品の中で自由に混ぜて使えます。
「Kaede Script」という呼び方について
本プロジェクトは TyranoScript(.ks ファイルをタグ記法で書き、
[iscript]で JavaScript を埋め込む)の系譜を踏襲しています。そのため「スクリプトの総称は 1 つ、記法が 2 つ」という構造にしています。用途によって記法を選ぶだけで、別言語を学び直す必要はありません。
2 つの記法
🏷️ タグ記法(.ks)

@コマンド 属性="値" のシンプルな記法でシーンを宣言的に描写します。TyranoScript / KAG 系の書き味に近く、シナリオライターにとって自然です。ブロックエディタで作った内容は自動的にタグ記法(.ks)へ双方向同期されます。
@bg id="classroom" fade=1000
@ch name="sakura" pose="smile" pos="C"
#sakura
「おはよう!」
#
@choice text="返事する" target="*reply"
@choice text="黙っている" target="*silence"
特徴:
- 1 行 = 1 アクション。読み下しやすい
- 条件分岐やジャンプもタグで書ける(
@jump/@if) - コンパイラ方式で一度命令列に変換してから実行 — ランタイムは軽量
- 向いているのは シーン描写・台詞主体のノベル本編
💻 コード記法(.ksc)

TypeScript 風の 手続き的な構文で、複雑なロジックを書けます。関数・配列・オブジェクト・while ループ・プロパティアクセスまで対応。KSC 専用のエディタで直接編集・実行できます。
// 恋愛イベントのフラグ管理
if (affection >= 50 && flags.firstDate == false) {
call("*date_event")
flags.firstDate = true
} else if (affection >= 30) {
#sakura
「もう少し…」
#
}
// パーティーメンバーを順に回復
while (i < party.length) {
heal(party[i], 100)
i = i + 1
}
特徴:
- プログラマの直感がそのまま通じる
- インタプリタ方式で行単位に逐次実行 — デバッグ時にブレークポイント・変数ウォッチが効く
- 向いているのは ミニゲーム・ステータス管理・動的シナリオ分岐
どちらを使うか
| やりたいこと | おすすめ記法 |
|---|---|
| セリフとキャラ表示、素直に進む物語 | タグ記法(.ks) |
| シーン転換・BGM・立ち絵の演出 | タグ記法(.ks) |
| 条件分岐(フラグ 1〜2 個で完結) | どちらでも可 |
| 複雑なフラグ管理・ステータス計算 | コード記法(.ksc) |
| ミニゲームやパズル的な処理 | コード記法(.ksc) |
| ループや配列・オブジェクト操作 | コード記法(.ksc) |
混在も OK: 1 作品の中でページごとに .ks と .ksc を使い分けられます。例えば「本編シナリオ = タグ記法、戦闘ロジック = コード記法」という構成が一般的です。
同じ処理を 2 つの記法で
例:ヒロインの好感度が 10 以上なら告白イベント、そうでなければ「また今度」。
タグ記法
@if exp="affection >= 10"
@jump target="*confess"
@else
#hero
「また今度でいいかな…」
#
@endif
コード記法
if (affection >= 10) {
jump("*confess")
} else {
#hero
「また今度でいいかな…」
#
}
どちらも同じ VM 上で動き、結果も同じです。好きな書き味を選んでください。
実行モデルの違い
内部的には、2 つの記法は別の経路で実行されますが、最終的に同じエンジン API(IEngineAPI)を叩きます。作者はこの違いを意識せずに書けます。
タグ記法 (.ks)
↓
[Compiler] → 命令列
↓
Runtime ──→ プラットフォーム共通 API ──→ Web / Switch / ...
コード記法 (.ksc)
↓
[Interpreter] ────────────────↑
逐次実行(Tokenizer → Parser → Evaluator)
重要: どちらの記法も同じ共通 API 経由でプラットフォームに描画を委譲するため、Web と Switch で同じスクリプトが動作します。
ファイル拡張子と略称
| 拡張子 | 略称 | 記法 | 実行方式 |
|---|---|---|---|
.ks | KS | タグ記法 | コンパイラ方式 |
.ksc | KSC | コード記法 | インタプリタ方式 |
- 「Kaede Script」 は両方を含む総称
- 「KS / KSC」 はファイル形式を指すときの略称(例:「この処理は KSC ファイルに書こう」)
よくある質問
Q. どちらの記法から始めればいい?
まずは タグ記法(.ks) から始めるのをおすすめします。シンプルで、ノベル作品の大半はタグ記法だけで十分です。ロジックが複雑になったら必要なページだけコード記法に切り替えれば OK です。
Q. タグ記法の中に少しだけコードを混ぜたいときは?
現状はページ単位で記法を分ける設計です。タグ記法ページから @call target="*logic_page" でコード記法のページ(.ksc)を呼び出し、戻ってくるパターンが実用的です。
Q. エディタのブロック編集との関係は?
ブロックエディタで作った内容は自動的にタグ記法(KS)に変換されます。つまり ブロック ↔ タグ記法 は双方向同期で、コード記法 は「ブロックでは表現しきれない処理を書くための手書き領域」という位置付けです。
Q. Switch 移植で両方動く?
はい。Switch 移植ゾーンでは KS / KSC のいずれも同じ Core コマンドセットしか使わない前提で設計されています。プラットフォーム共通 API の Switch 実装が両記法を受け取ります。
関連資料
- タグ記法(KS)仕様書 — 全タグの属性・挙動一覧
- コード記法(KSC)仕様書 — 構文・組み込み関数・評価モデル
- ハイブリッド・エディタの仕組み — ブロック編集と KS の双方向同期
- エンジン内部の仕組み — Op[] / IEngineAPI / プラットフォーム抽象