ミニゲーム: テスターツール

JSテスターは、ブラウザ環境でのJavaScript動作確認、CPUベンチマーク計測、そしてブロック式アドベンチャー作成を1つにまとめた開発者向けミニゲームです。タブを切り替えながら、環境調査からインタラクティブなデモ制作までを手早く行えます。

概要

画面構成と操作の流れ

画面上部のタブバーから各機能へ移動します。タブをクリックすると対応するセクションがアクティブになり、他のセクションは非表示になります。【F:games/tester.js†L706-L767】

  1. タブを選択して目的のツールを開く。
  2. 各セクション内の操作ボタンでテスト実行・計測・ストーリー編集を行う。
  3. 必要に応じてRestart(ゲームの再起動)を行うと全データが初期化されます。【F:games/tester.js†L2140-L2156】

タブ「機能テスト」

カード内に用意されたテストを個別、または「すべて実行」ボタンから連続実行できます。各テストは完了後に または 付きのメッセージを表示し、結果はメモリに蓄積されます。【F:games/tester.js†L808-L889】

  1. 「すべて実行」を押すと、定義済みテストを順番に走査します。途中で失敗したテストがあっても残りの項目は継続実行されます。【F:games/tester.js†L861-L888】
  2. 個別テストの「テスト実行」を押した場合は、その場で結果が更新されます。【F:games/tester.js†L820-L857】
  3. テスト結果は直近の実行内容が上書きされ、後から「すべて実行」を押したときにも利用されます。【F:games/tester.js†L861-L889】

テスト項目一覧

テスト名 検査内容 成功時の出力例 代表的な失敗要因
数値/BigInt BigInt演算や Math.froundMath.hypot の計算精度を確認します。【F:games/tester.js†L429-L444】 BigInt OK / fround=3.1416 のような計算結果が表示されます。【F:games/tester.js†L443-L444】 BigIntが誤った値を返す、または Math.hypot の結果に許容以上の誤差が出た場合に失敗します。【F:games/tester.js†L438-L443】
JSON & structuredClone ネストしたオブジェクトのJSONシリアライズ/復元と structuredClone のMap保持を確認します。【F:games/tester.js†L447-L468】 JSON長=123 のようにエンコード後の文字列長を返します。【F:games/tester.js†L467-L468】 JSON復元に失敗した場合や、structuredCloneMap を保持できない場合にエラーになります。【F:games/tester.js†L459-L465】
Intlフォーマット 現在ロケールを使用した日時/通貨フォーマットが期待どおりかを検証します。【F:games/tester.js†L471-L487】 例: 2023年5月1日月曜日 ... / ¥123,456.79 といったフォーマット結果を返します。【F:games/tester.js†L482-L486】 日付文字列に「5月」が含まれない、または通貨表記に「¥」が含まれない場合に失敗します。【F:games/tester.js†L483-L485】
Crypto API 暗号学的乱数の生成と SHA-256 ハッシュの計算を確認します。【F:games/tester.js†L489-L502】 SHA-256 head=1a2b3c4d のように計算したハッシュの先頭を表示します。【F:games/tester.js†L499-L501】 crypto.getRandomValues が利用できないなど、暗号APIが無効な環境ではエラーになります。【F:games/tester.js†L495-L499】
Storage API localStoragesessionStorage への書き込み・読み出し・削除をテストします。【F:games/tester.js†L504-L523】 localStorage / sessionStorage OK が表示されます。【F:games/tester.js†L523-L524】 Storageがブロックされている場合や読み書き結果が一致しない場合に失敗します。【F:games/tester.js†L510-L522】
Canvas & Offscreen Canvasへの描画とピクセル取得、OffscreenCanvas の存在を確認します。【F:games/tester.js†L526-L549】 中心RGB=(96,164,247) / Offscreen=YES のようなRGB値と対応状況を返します。【F:games/tester.js†L548-L549】 ピクセルデータ取得に失敗した場合にエラーとなります。【F:games/tester.js†L546-L548】

タブ「CPUベンチマーク」

「計測スタート (1秒)」ボタンを押すと、performance.now() を使って1秒間ループを回し、処理回数から「回/秒」を算出します。実行中は1秒間UIが固まる場合があるため、ログの注意書きを参照してください。【F:games/tester.js†L892-L1001】

タブ「ブロックアドベンチャー」

左ペインでブロックを並べ、右ペインでログ・変数・カスタムalertを確認しながらストーリーを再生します。ブロックの追加・削除・並べ替えはすべてUIボタンで行え、ブロック番号(#0, #1, ...)を指定して遷移先を制御します。【F:games/tester.js†L1004-L1340】

左ペイン: ブロックエディタ

ブロック種別と主なフィールド

種別 用途 主なフィールド
text テキストをログやカスタムalertに表示します。【F:games/tester.js†L1323-L1392】【F:games/tester.js†L1885-L1911】 text(本文)、delivery(log/alert/both)、next(次ブロック番号)。【F:games/tester.js†L1330-L1392】【F:games/tester.js†L1837-L1846】
choice 選択肢を表示し、選んだ値を変数に保存して分岐します。【F:games/tester.js†L1394-L1476】【F:games/tester.js†L1942-L1991】 questionstoreAs、選択肢ごとの label/value/target。【F:games/tester.js†L1394-L1466】
set flags 変数に固定値を書き込みます。【F:games/tester.js†L1478-L1509】【F:games/tester.js†L1806-L1814】 name(変数名)、value(保存値)、next(遷移先)。【F:games/tester.js†L1478-L1509】
jump 指定変数の値を比較し、一致/不一致で異なるブロックへジャンプします。【F:games/tester.js†L1511-L1534】【F:games/tester.js†L1815-L1834】 nameequalstargetelseTarget。【F:games/tester.js†L1511-L1534】
award 経験値(EXP)の付与や減算を試せます。【F:games/tester.js†L1536-L1551】【F:games/tester.js†L1835-L1846】 amount(付与量)、next。【F:games/tester.js†L1536-L1551】
control 確認ダイアログ(はい/いいえ)や入力プロンプトをログ上に生成します。【F:games/tester.js†L1553-L1684】【F:games/tester.js†L1912-L1991】 mode(confirm/prompt)、表示文、保存先、ボタン表示・遷移先などの詳細設定。【F:games/tester.js†L1553-L1684】【F:games/tester.js†L1949-L1991】

右ペイン: 実行支援

カスタムalertの活用

右ペイン上部でalert用のJavaScript関数を編集できます。関数は (message, context) を受け取り、context.flags(変数)、context.log(ログ出力)、context.awardXp(EXP付与)を利用できます。更新ボタンで適用し、テストボタンでサンプルメッセージを送信します。【F:games/tester.js†L1040-L1137】

デフォルトテンプレートではスタイル付きのDIVを生成してログに追加する例が示されています。エラーが発生した場合はステータス欄に 付きメッセージが表示されるため、修正して再適用してください。【F:games/tester.js†L1048-L1077】