🆕 Smalruby 独自 — upstream に存在しない、Smalruby のために新規追加された拡張機能
- Smalruby ランタイム対応: ❌(smalruby3 gem は未対応。Koshien サーバとの通信を含むためブラウザ専用)
- デフォルト表示: ✅(拡張機能ライブラリにデフォルトで表示される)
スモウルビー甲子園(Smalruby Koshien)競技用の拡張機能。プレイヤー(参加者の AI プログラム)がマップ上を移動し、アイテムを集めながらゴールを目指すターン制の競技。本拡張は競技ゲームへの接続、マップ情報取得、移動コマンド送信、ルート計算などのブロックを提供する。
- 競技参加者の小学生・中学生として、自分の AI プログラム (Smalruby スクリプト) を競技サーバに接続して動かしたい
- 教師として、生徒たちがチームでアルゴリズムを考えて競い合う題材として使いたい
- 大会運営として、競技用のサーバと共通の API でやり取りできる拡張機能を提供したい
- プログラミング学習者として、ターン制ゲームを通じて経路探索などのアルゴリズムを学びたい
- ブロックパレットの「拡張機能を追加」から Smalruby Koshien を選ぶ
- ブロックパレットに Koshien 専用ブロックが表示される
connectGameブロックで競技サーバに接続- ターンごとに
getMapAreaでマップ情報を取得し、moveToなどで移動 setItem,setMessageで行動・メッセージを送信
開発・デバッグ用の Koshien テストモーダル (koshien-test-modal) があり、競技サーバなしでローカルテストができる。
packages/scratch-gui/src/components/koshien-test-modal/koshien-test-modal.jsx— テスト用モーダル
packages/scratch-gui/src/lib/libraries/extensions/koshien/— 拡張機能登録(アイコン、descriptions)packages/scratch-gui/src/lib/ruby-generator/koshien.js— Koshien ブロック → Ruby 変換packages/scratch-gui/src/lib/ruby-to-blocks-converter/koshien*— Ruby → Koshien ブロック変換(要追加調査)
packages/scratch-gui/src/reducers/koshien-file.js— Koshien ファイル管理 state- AI 保存ステータス(rubytee からの自動保存と連動)
packages/scratch-gui/src/containers/ruby-tab/koshien-snippets.json— Monaco エディタの Koshien コード補完
packages/scratch-vm/src/extensions/koshien/index.js— 拡張機能本体(競技サーバとの WebSocket 通信、コマンド処理)
なし(Koshien 競技サーバは別リポジトリで管理)。
| opcode | 説明 |
|---|---|
connectGame |
競技サーバに接続 |
getMapArea, map, mapFrom, mapAll |
マップ情報の取得 |
moveTo |
指定位置への移動 |
calcGoalRoute, calcRoute |
ゴールまでの経路計算 |
setItem, locateObjects |
アイテム配置・検出 |
targetCoordinate, position, positionOf |
座標操作 |
turnOver |
プレイヤーの向き変更 |
setMessage, object |
メッセージ・オブジェクト送信 |
各ブロックの Ruby 表現は
docs/smalruby-language-spec-extensions.ja.mdを参照。
koshien-filereducer で Koshien プロジェクトファイルの状態を管理- 競技サーバとの認証情報や接続情報は別途管理
- VM 単体テスト:
packages/scratch-vm/test/unit/extension_koshien.js
docs/rubytee/— Koshien プロジェクトの自動保存連携docs/extension-smalruby-ruby/— 競技プログラム作成時に活用される Ruby 拡張
主要 PR は履歴を参照(feat:.*koshien で grep)。
