Skip to content

feat: 甲子園 Ruby v2 対応(クライアントライブラリのパッチ + editor 修正) #743

Description

@takaokouji

Epic: #738 / 関連: Ruby v2 対応

ゴール

甲子園拡張機能は現在 Ruby v1 でしか動作しない。v2 でも動くようにする。
ユーザー指示により 2 段階 で進める:

  1. クライアントライブラリ (tmp/smalruby-koshien/src/lib) の v2 対応 + パッチ作成 + ゲームサーバー開発者への改善依頼
  2. スモウルビー(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 に応答するため大半は動く見込みだが、
要検証:

  • v2 形式のコード(koshien.calc_route(result: $最短経路) 等)を実際にライブラリへ
    流し、壊れる箇所を洗い出す(List.new 既定値、Sprite#list、クラス構造 等)
  • v1/v2 双方で動くようライブラリを改良
  • パッチ(diff)を作成し、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 をリスト化)
  • roundtrip テスト(v1/v2 両方)
  • ブラウザ確認(?ruby_version=2)で v2 でもエラーなくブロック化・Ruby 復元

Definition of Done

  • クライアントライブラリが v1/v2 双方で動作(ローカル実行で確認)
  • ライブラリのパッチ + 開発者向け改善依頼ドキュメントが notes/koshien/ にある
  • editor が v2 で 3 ブロックをエラーなく入出力(roundtrip)
  • v1 の既存挙動が回帰しない
  • lint / CI green / ブラウザ確認

依存

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions