2024-12-12 (Thu)
_ ruby.wasmを使うのをやめた
Ruby Advent Calendar 2024の12日目の記事です。
RubyKaigi 2023のLTで紹介したBINGOアプリケーションだが、去年の忘年会で表示(おそらくruby.wasmのダウンロード)に時間がかかったり、一部動かない人がいたりしたので、ruby.wasmを使うのをやめた。
Rubyだとカードの初期化が↓の3行だったのが、
srand(<%= @seed %>)
CARD = (1..75).each_slice(15).map { |i| i.sample(5) }.transpose
CARD[2][2] = ""
Randomクラスの定義を除いても↓くらいになってしまった。
let rand = new Random(<%= @seed %>);
let cardValues = Array.from(Array(5).keys()).map(i =>
Array.from(Array(15).keys(), j => 1 + 15 * i + j)
).map(nums =>
nums.map(i => [rand.next(), i]).sort().map(i => i[1]).slice(0, 5)
);
cardValues = cardValues[0].map((col, i) => cardValues.map(row => row[i]));
cardValues[2][2] = "";
ふだんJavaScriptを書かないので私が下手なだけかもしれないが、ブロックや範囲式があって、Array#sampleやEnumerable#sort_by、Array#transposeなどのコレクションを操作する機能が豊富なRubyは便利だなと改めて思った。 フルセットのRubyがいらない場合はpicoruby.wasmとかあると便利かもしれない。
↓のコメント欄にJavaScriptでもっとかっこよく書けるというスレッドが続く(かも)。