Epic: #738 / 関連: Ruby v2 対応
ゴール
甲子園拡張機能は現在 Ruby v1 でしか動作しない。v2 でも動くようにする。
ユーザー指示により 2 段階 で進める:
- クライアントライブラリ (
tmp/smalruby-koshien/src/lib) の v2 対応 + パッチ作成 + ゲームサーバー開発者への改善依頼
- スモウルビー(editor / scratch-gui) の v2 対応
なぜ v1 でしか動かないか(調査済みの editor 側原因)
/design 調査で判明: 甲子園ブロックのうち リストを引数に取る 3 ブロック
(calc_route / calc_goal_route / locate_objects)のジェネレーターが
バージョン非依存で list("$名前") をハードコードしている。v2 では list() 構文は
禁止(「list() syntax is only available in Ruby version 1」エラー)で、グローバル配列変数
$名前($名前.push() / $名前[0])で表現する必要がある。他の甲子園ブロックは v2 でも
動作することを確認済み。
Phase 1: クライアントライブラリの v2 対応 + パッチ
src/lib/smalruby3/koshien.rb 等は v1 前提(list("$名前") が返す Smalruby3::List
オブジェクトを result.replace(...) する想定)。v2 では result に プレーンな Ruby Array
($名前) が渡る。Array も replace/[]/map に応答するため大半は動く見込みだが、
要検証:
Phase 2: editor (scratch-gui) の v2 対応
Definition of Done
依存
Epic: #738 / 関連: Ruby v2 対応
ゴール
甲子園拡張機能は現在 Ruby v1 でしか動作しない。v2 でも動くようにする。
ユーザー指示により 2 段階 で進める:
tmp/smalruby-koshien/src/lib) の v2 対応 + パッチ作成 + ゲームサーバー開発者への改善依頼なぜ v1 でしか動かないか(調査済みの editor 側原因)
/design調査で判明: 甲子園ブロックのうち リストを引数に取る 3 ブロック(
calc_route/calc_goal_route/locate_objects)のジェネレーターがバージョン非依存で
list("$名前")をハードコードしている。v2 ではlist()構文は禁止(「list() syntax is only available in Ruby version 1」エラー)で、グローバル配列変数
$名前($名前.push()/$名前[0])で表現する必要がある。他の甲子園ブロックは v2 でも動作することを確認済み。
Phase 1: クライアントライブラリの v2 対応 + パッチ
src/lib/smalruby3/koshien.rb等は v1 前提(list("$名前")が返すSmalruby3::Listオブジェクトを
result.replace(...)する想定)。v2 ではresultに プレーンな Ruby Array(
$名前) が渡る。Array もreplace/[]/mapに応答するため大半は動く見込みだが、要検証:
koshien.calc_route(result: $最短経路)等)を実際にライブラリへ流し、壊れる箇所を洗い出す(
List.new既定値、Sprite#list、クラス構造 等)notes/koshien/に保存Phase 2: editor (scratch-gui) の v2 対応
src/lib/ruby-generator/koshien.js: v2 ではlist("$名前")ではなく$名前を出力(calc_route / calc_goal_route / locate_objects)
src/lib/ruby-to-blocks-converter/koshien.js: v2 では引数の配列変数$名前をリストとして受理(data_variable をリスト化)
?ruby_version=2)で v2 でもエラーなくブロック化・Ruby 復元Definition of Done
notes/koshien/にある依存