- VS Code のターミナルで拡張をビルド:
cd tyranodev npm run compile - VS Code をリロード:
Ctrl+Shift+P→Developer: Reload Window test-game/data/scenario/first.ksを開く(これで拡張が自動起動します)- VS Code の設定で以下が有効になっていることを確認:
editor.inlayHints.enabled→onoronUnlessPressededitor.semanticHighlighting.enabled→trueeditor.codeLens→true
- [☑] 確認手順:
first.ksを開く。タグ名(title,bg,jumpなど)、属性名、属性値、コメント(;行)がそれぞれ異なる色で表示されていること - [☑] 確認箇所:
first.ksの 8行目[title name="TyranoScript Test Game"]でtitleがタグ色、nameが属性色、"TyranoScript Test Game"が文字列色になっている
- [☑] 確認手順:
first.ksの末尾[s]の後に新しい行を追加し、[を入力する - [☑] 期待結果: タグ名の一覧が補完候補として表示される(
bg,jump,if,chara_showなど多数) - [☑] 確認手順2:
[bまで入力してみる →bg,bgmovie,buttonなどbで始まるタグに絞り込まれる - [☑] 確認手順3:
@を行頭で入力 → 同様にタグ候補が表示される
- [☑] 確認手順:
first.ksの 8行目[titleのtitleにマウスカーソルを乗せる - [☑] 期待結果: タグの説明(英語/日本語)がポップアップで表示される
- [☑] 確認手順2:
scene1.ksの 11行目[bg storage=...のbgにホバー → 背景変更タグの説明が出る - [☑] 確認手順3: 属性名
storageにもホバー → 属性の説明が表示される
- [☑] 確認手順:
first.ksの適当な場所に[invalid_tag_xyz]と入力する - [☑] 期待結果: 下の Problems パネル (
Ctrl+Shift+M) に「Unknown tag: invalid_tag_xyz」等の警告が表示される - [☑] 確認手順2: 入力した行を削除して元に戻す → 警告が消える
- [☑] 確認手順3:
scene1.ksを開くと、到達不能コード等の正当な警告のみが表示される
- [☑] 確認手順:
scene2.ksの 88行目@jump target="*after_choice"の*after_choiceにカーソルを置く - [☑] 操作:
F12を押す - [☑] 期待結果: 同ファイル 155行目の
*after_choiceラベル定義にジャンプする - [☑] 確認手順2:
first.ksの 124行目@jump storage="scene1.ks" target=*startの*startでF12→scene1.ksの*startにジャンプ
- [☑] 確認手順:
scene2.ksの 155行目*after_choiceにカーソルを置く - [☑] 操作:
Shift+F12を押す - [☑] 期待結果:
*after_choiceを参照している箇所(88行目、116行目、150行目の3つの@jump target="*after_choice")が一覧表示される
- [☑] 確認手順:
scene2.ksを開いた状態で、左サイドバーの Explorer アイコンを選び、下部にある OUTLINE パネルを展開する - [☑] 期待結果: ラベル名が一覧表示される(
*start,*choice_cafe,*choice_play,*choice_haunted,*after_choice,*continue_talking,*go_home,*go_ending) - [☑] 確認手順2:
macro.ksを開く →talk,scene_change,fade_text,end_fade_text,show_pairのマクロ定義がOutlineに表示される - [☑] 確認手順3: Outlineの項目をクリック → エディタ上でその位置にジャンプする
- [☑] 確認手順:
scene1.ksを開き、116行目あたり(*middleラベルの後のコード)にカーソルを置く - [☑] 期待結果: エディタ上部のパンくずリスト(ファイルパスの横)に現在のラベル名
middleが表示される
- [☑] 確認手順:
first.ksの 14行目@call storage="tyrano.ks"を見る - [☑] 期待結果:
tyrano.ksの部分が 青い下線付きリンク になっている - [☑] 確認手順2:
Ctrl+クリックでそのリンクをクリック →tyrano.ksファイルが開く - [☑] 確認手順3:
first.ksの 17行目storage="macro.ks"→ Ctrl+クリック →macro.ksが開く - [☑] 確認手順4:
scene1.ksの 282行目@jump storage="scene2.ks"→scene2.ksがリンクになっている
- [☑] 確認手順:
first.ksの 66行目[deffont size=26 color=0xffffff ...]を見る - [☑] 期待結果:
0xffffffの左横にカラースウォッチ(白い小さな四角)が表示される - [☑] 確認手順2:
scene1.ksの 63行目[font size=32 color=0xff6699 bold=true]→ ピンクのスウォッチ - [☑] 確認手順3:
scene1.ksの 69行目color=0x99ccff→ 水色のスウォッチ - [☑] 確認手順4:
scene1.ksの 76行目color=0xffff00とedgecolor=0x000000→ 黄色・黒のスウォッチ - [☑] カラーピッカー: いずれかのカラースウォッチをクリック → VS Code のカラーピッカーが開き、色を変更できる
- [☑] 確認手順:
scene1.ksの 120行目[if exp="sf.play_count > 1"]の行番号の左にカーソルを移動する - [☑] 期待結果: 折りたたみ矢印(▼)が表示される
- [☑] 操作: 矢印をクリック →
[if]...[endif](120-128行)が折りたたまれる - [☑] 確認手順2:
macro.ksの 18行目[macro name="talk"]→ 折りたたみ矢印をクリック →[macro]...[endmacro](18-26行)が折りたたまれる - [☑] 確認手順3:
first.ksの 1-5行目(連続コメント行;===...)→ コメントブロックとして折りたためる - [☑] 確認手順4: 折りたたまれた行をクリックして再展開できる
- [☑] 確認手順:
first.ksの末尾付近で新しい行に[bgと入力する(bgの後にスペース) - [☑] 期待結果: パラメータヒントがポップアップ表示される。
storageパラメータの型、説明、必須/任意の情報が見える - [☑] 確認手順2:
[jumpと入力 →storage,target等のパラメータヒントが表示される - [☑] 確認手順3:
[chara_showと入力 →name,left,top,time等のパラメータが見える - [☑] 後片付け: 入力したテスト行を削除
注意: この機能はプロジェクト内に実際のリソースファイルが存在する場合にのみ動作します。test-game の data/bgimage/ 等にファイルがない場合は空の候補リストになります。
- [☑] 確認手順:
[jump storage="まで入力する - [☑] 期待結果:
data/scenario/内の.ksファイル名(first.ks,scene1.ks,scene2.ks等)が補完候補に表示される - [☑] 確認手順2:
[bg storage="まで入力 →data/bgimage/内の画像ファイルが候補に出る(画像ファイルが存在すれば) - [☑] 確認手順3:
[playbgm storage="→data/bgm/内の音声ファイルが候補に出る(音声ファイルが存在すれば) - [☑] 後片付け: 入力したテスト行を削除
- [☑] 確認手順:
Ctrl+Tを押す(ワークスペースシンボル検索を開く) - [☑] 操作:
startと入力する - [☑] 期待結果: プロジェクト全体から
*startラベル(scene1.ks, scene2.ks, ending.ks など)が検索結果として表示される - [☑] 確認手順2:
talkと入力 →macro.ksのtalkマクロ定義が見つかる - [☑] 確認手順3: 結果をクリック → そのファイル・行にジャンプ
- [☑] 確認手順:
first.ksの適当な位置に[my_custom_tag]と入力する - [☑] 期待結果: 黄色い波線(警告)が表示される。Problems パネルに「Unknown tag」警告が出る
- [☑] 操作:
my_custom_tagにカーソルを置き、左端に表示される 電球アイコン 💡 をクリック(またはCtrl+.) - [☑] 期待結果: 「Define as macro」というクイックフィックスが選択肢に表示される
- [☑] 確認手順2:
[jump target="*nonexistent_label"]と入力 → 未定義ラベルの警告が出る → 電球から「Create label」が選べる - [☑] 後片付け: テスト行を削除
設定:
editor.inlayHints.enabledがonになっていること
- [☑] 確認手順:
first.ksの 124行目@jump storage="scene1.ks" target=*startを見る - [☑] 期待結果:
scene1.ksの後(閉じ引用符の右)に薄いグレーの文字でdata/scenario/scene1.ksとパス情報が表示される - [☑] 確認手順2:
scene1.ksの 17行目[chara_show name="sakura" ...]を見る →sakuraの後に(Sakura)と表示名ヒントが出る - [☑] 確認手順3:
first.ksの 22行目[eval exp="f.player_name = 'Player'"]→exp=の値の前にgame var:というスコープヒントが表示される - [☑] 確認手順4:
first.ksの 28行目[eval exp="sf.play_count = ..."]→system var:ヒント - [☑] 確認手順5:
first.ksの 31行目[eval exp="tf.current_mood = ..."]→temp var:ヒント
設定:
editor.semanticHighlighting.enabledがtrueになっていること
- [☑] 確認手順:
first.ksの 22行目[eval exp="f.player_name = 'Player'"]を見る - [☑] 期待結果:
f.player_nameが通常の文字列色とは異なる「変数」専用の色でハイライトされる - [☑] 確認手順2:
scene1.ksの 120行目[if exp="sf.play_count > 1"]→sf.play_countが変数色でハイライト - [☑] 確認手順3:
scene1.ksの 120行目ifタグ名 → 通常のタグとは異なる「キーワード」色で表示される - [☑] 確認手順4:
scene1.ksの 128行目endif、126行目elseも同様にキーワード色 - [☑] 補足: カラーテーマによっては差が見えにくい場合があります。Dark+, Monokai 等のテーマで確認するのがおすすめです
- [☑] 確認手順:
scene2.ksを開く - [☑] 期待結果: 各
*label行(例:*start,*choice_cafe等)の 上の行 に薄い文字で「N references」と表示される - [☑] 確認手順2:
*after_choice(155行目)の上に「3 references」と表示されていること(88行目、116行目、150行目で参照されている) - [☑] 操作: 「3 references」をクリック → 参照元の一覧がポップアップ表示され、クリックでジャンプできる
- [☑] 確認手順3:
sub.ksを開く →*festival_commentの上に参照数が表示される
- [☑] 確認手順:
first.ksの末尾で新しい行に移動し、行頭でsceneと入力する([は不要) - [☑] 期待結果: 補完候補に「scene — TyranoScript: Full scene template...」が表示される
- [☑] 操作: Enter で選択 → ラベル、背景、キャラ、ダイアログのテンプレートが挿入される。Tab でプレースホルダー間を移動可能
- [☑] 確認手順2:
choiceと入力 → glink 選択肢テンプレート - [☑] 確認手順3:
ifblockと入力 → if/else/endif テンプレート - [☑] 確認手順4:
macroと入力 → macro/endmacro テンプレート - [☑] 確認手順5:
chara→ キャラクター定義テンプレート、bgm→ 音楽再生、transition→ シーン遷移 - [☑] 後片付け: 挿入されたテスト行を Ctrl+Z で元に戻す
- [☑] 確認手順:
scene2.ksの 65行目*choice_cafeにカーソルを置く - [☑] 操作:
F2を押す - [☑] 期待結果: リネームダイアログが表示され、現在のラベル名
choice_cafeが入っている - [☑] 操作:
choice_coffeeに変更して Enter - [☑] 期待結果:
*choice_cafeの定義と、57行目のtarget="*choice_cafe"の参照が同時にchoice_coffeeに変更される - [☑] 確認手順2:
macro.ksの 18行目[macro name="talk"]のtalkで F2 → マクロ名をdialogueに変更 →scene1.ksとscene2.ksの[talk ...]使用箇所も同時に更新される - [☑] 後片付け:
Ctrl+Zを複数回押して変更を元に戻す(ファイルを保存しないこと)
- [☑] 確認手順:
sub.ksの 11行目*festival_commentにカーソルを置く - [☑] 操作: 右クリック → コンテキストメニューから 「Show Call Hierarchy」 を選択
- [☑] 期待結果: 下部のパネルに Call Hierarchy ビューが表示される
- [☑] 確認手順2: Incoming Calls(左矢印アイコン)に切り替え →
scene2.ksから[call storage="sub.ks" target="*festival_comment"]で呼び出されていることが表示される - [☑] 確認手順3:
scene1.ksの*startで同様に操作 →first.ksの[jump storage="scene1.ks" target=*start]からの着信が表示される
- [☑] 確認手順:
scene1.ksの 120行目[if exp="sf.play_count > 1"]のifにカーソルを置く - [☑] 期待結果: 対応する
[if]・[elsif]・[else]・[endif]がすべてハイライト(背景色変更)される - [☑] 確認手順2: 128行目の
[endif]にカーソルを置く → 同じブロックの[if]・[elsif]等がすべてハイライトされる - [☑] 確認手順3: 123行目の
[elsif]にカーソルを置く → 同様にブロック全体がハイライトされる - [☑] 確認手順4:
macro.ksの 18行目[macro name="talk"]にカーソル → 26行目の[endmacro]がハイライトされる
- [☑] 確認手順: 左サイドバーの Explorer アイコンをクリック
- [☑] 期待結果: Explorer ビューの下部に 「TyranoScript Variables」 というセクションが表示される
- [☑] 確認手順2: セクションを展開 →
f. (Game Variables),sf. (System Variables),tf. (Temporary Variables)のスコープ別カテゴリが表示される - [☑] 確認手順3:
f. (Game Variables)を展開 →f.player_name,f.affection,f.route,f.scene_count等の変数名が一覧される - [☑] 確認手順4: 各変数の横に「N write, M read」と使用回数が表示される
- [☑] 確認手順5: 変数名を展開 → 使用箇所(ファイル名:行番号)が一覧される
- [☑] 確認手順6: 使用箇所をクリック → エディタでその行にジャンプする
注意: 変数一覧はプロジェクトのインデックスに基づきます。
.ksファイルを何か開いた状態でないと表示されない場合があります。Ctrl+Shift+P→TyranoCode: Refresh Variablesで更新もできます。
- [☑] 確認手順:
scene1.ksを開いた状態でCtrl+Shift+P→TyranoCode: Preview Sceneと入力して実行 - [☑] 期待結果: エディタの横に WebView パネルが開く
- [☑] 確認箇所: パネル内にモックアップが表示される:
- 背景:
classroom.jpgの名前が表示される(実際の画像がなくてもプレースホルダーが出る) - キャラクター:
sakura,takeshiの配置位置が表示される - ダイアログ: セリフテキストが表示される
- ラベル:
*start,*middle,*endがセクション区切りとして表示される
- 背景:
- [☑] 確認手順2:
scene1.ksを編集(例: セリフを変更)→ Preview パネルがリアルタイムで更新される - [☑] 確認手順3:
scene2.ksに切り替え → Preview の内容もそのファイルに更新される(アクティブエディタ連動) - [☑] 後片付け: 編集した内容を Ctrl+Z で戻す
- [☑] 確認手順:
scene1.ksの[bg storage="classroom.jpg"]のclassroom.jpgにマウスカーソルを乗せる - [☑] 期待結果: ホバーポップアップにファイル名、パス、画像サムネイルが表示される
- [☑] 確認手順2:
[chara_new storage="chara/sakura/normal.png"]の画像パスにホバー → サムネイル表示 - [☑] 確認手順3: 存在しない画像ファイル名にホバー → 通常の属性ドキュメントが表示される(エラーにならない)
VS Code のロケール切替が必要:
Ctrl+Shift+P→Configure Display Language→ja/en
- 確認手順: VS Code の表示言語を日本語 (
ja) に設定し、再起動する - 期待結果(日本語):
- タグホバーのパラメータ表ヘッダー: 「名前 / 型 / 必須 / 既定値 / 説明」
- 診断メッセージ: 「不明なタグまたは未定義のマクロ: [xxx]」
- CodeLens: 「N 参照」
- 変数トラッカーのスコープ: 「f. (ゲーム変数)」「sf. (システム変数)」等
- スニペットの説明文が日本語
- コマンドパレット: 「TyranoCode: シーンプレビュー」等
- 確認手順2: 表示言語を英語 (
en) に戻す → 全て英語表示に戻ること
- [☑] buildGraph() のノード/エッジ抽出ロジック(ユニットテスト済)
- [☑] LABEL_REF_TAGS 経由の jump/call/button/glink エッジ検出
- [☑] cross-file jump/call エッジ抽出
- [☑] if ブロック・マクロ定義内のエッジ抽出
- [☑] 動的ラベル(&prefix)のスキップ
- [☑] fallthrough エッジ(シーン先頭→最初のラベル)
- [☑]
Ctrl+Shift+P→TyranoCode: Show Flow Graphを実行 - [☑] Webview パネルが開き、ノード(シーン=緑、ラベル=青)とエッジが表示される
- [☑] ノードクリック → 該当ファイル・行にジャンプ
- [☑] パン(ドラッグ)とズーム(スクロール)が動作する
- [☑] 凡例(Scene / Label / jump / call / choice)が表示される
- [☑]
+/−/⊞ボタンでズーム・フィットが動作する
- [☑] DAP デバッグアダプタの登録(extension.ts で registerDebugAdapterDescriptorFactory)
- [☑] package.json の debuggers 設定(type: tyranoscript, configurationAttributes)
- [☑] breakpoints 設定(language: tyranoscript)
- [☑]
.vscode/launch.jsonに TyranoScript デバッグ設定を追加できる - [☑]
.ksファイルの行番号クリックでブレークポイントが設置できる(赤い丸が出る) - [☑] F5 でデバッグセッションが起動する(WebSocket サーバーが立ち上がる)
- [☑] ※ ランタイム接続テストは TyranoScript ゲームが実行中の環境が必要
注意: デバッガはゲームランタイムに
debug-bridge.jsを注入して WebSocket 接続する設計。完全テストにはブラウザで TyranoScript ゲームを実行中の環境が必要。
- [☑] 選択肢検出ロジック(button/glink + [s] パターン)(ユニットテスト済)
- [☑] ルート探索 BFS(選択肢の組合せ生成、MAX_ROUTES=500 制限)
- [☑] 未到達ラベル検出ロジック(ユニットテスト済)
- [☑] LABEL_REF_TAGS 経由の参照ラベル収集
- [☑]
Ctrl+Shift+P→TyranoCode: Run All Routesを実行 - [☑] Output パネル(
TyranoCode Test Runner)にルート解析結果が表示される - [☑] カバレッジレポート(ファイル数、ラベル数、選択肢数)が表示される
- [☑] エラーがある場合、Problems パネルに diagnostics が表示される(30秒後に自動消去)
- [☑] 未到達ラベルがあれば一覧表示される
- [☑] タグ数・ラベル数・リソース数カウント(ユニットテスト済)
- [☑] トランジション検出(bg, chara_show, trans 等)
- [☑] eval/iscript カウント
- [☑] 選択肢ポイント検出
- [☑] 複雑度分類(low/medium/high/critical 閾値)
- [☑] if ブロック内の再帰的走査
- [☑]
Ctrl+Shift+P→TyranoCode: Profile Sceneを実行 - [☑] Output パネル(
TyranoCode Profiler)にプロファイル結果が表示される - [☑] プロジェクト概要(合計シーン/タグ/ラベル/リソース)が出る
- [☑] リソース種別(image/audio/video 等)の内訳が出る
- [☑] シーン複雑度ランキング(○/△/▲/● + LOW〜CRITICAL)が表示される
- [☑] 警告(高トランジション密度、多 eval、多画像ロード、長 wait 等)があれば表示される
- [☑] LicenseManager の初期化・ステータスバー表示(extension.ts のコード確認済)
- [☑] PRO コマンド実行時の
licenseManager.requirePro()ゲート
- PRO コマンド実行時にライセンスキー入力ダイアログが表示される
- ステータスバーに「$(code) TyranoCode」(Free)が表示される
- ステータスバークリック → ライセンスアクティベーション画面が出る
- ※ ライセンス検証は未実装(Phase 2 最後のタスク)
- 確認手順: VS Code のターミナルで以下を実行:
cd tyranodev npm run test:unit - 期待結果:
681 tests passedと表示される(テストファイル 2つ:tag-database.test.ts587件,providers.test.ts94件)
-
npm run compileがエラーなしで完了する
Ctrl+Shift+P→Developer: Reload Windowでリロード- Output パネル(
Ctrl+Shift+U)のドロップダウンで「TyranoCode」を選択し、エラーが出ていないか確認 npm run compileでビルドエラーがないか確認
VS Code 設定(Ctrl+,)で以下を検索して有効にする:
editor.inlayHints.enabled→onに変更editor.semanticHighlighting.enabled→trueに変更
editor.codeLensがtrueになっていることを確認
- Explorer サイドバーの一番下までスクロールする
- ビューが折りたたまれている場合がある
Ctrl+Shift+P→TyranoCode: Show Variablesで直接開ける
Ctrl+Spaceで手動で補完を呼び出してみるeditor.quickSuggestionsが有効になっていることを確認