ScrapboxでRubyを動かす
ruby-head-wasm-wasiを使ってScrapboxでRubyを動かしてみる
お試し
以下のコードを開発コンソールに貼り付けてる
/rubyonbrowser/マインスイーパ風に文字をランダムに並べるのコードを拝借した
code:js
await (async () => {
const { run } = await import("/api/code/villagepump/ScrapboxでRubyを動かす/script.js");
const result = await run(
`9.times do |x|
9.times do |y|
print "⬜", "🚩", "💣".sample
end
puts
end`
);
alert(result);
})();
動かないもの
/rubyonbrowser/File APIのサンプルコードがそのまま動く
code:script.js
import { DefaultRubyVM } from "../../takker-dist/ruby-head-wasm-wasi-min/mod.js";
const wasmURL = "https://scrapbox.io/files/625bbaf10357fa001dfe6e98.wasm";
// Fetch and instntiate WebAssembly binary
const response = await fetch(wasmURL);
const buffer = await response.arrayBuffer();
const module = await WebAssembly.compile(buffer);
export const run = async (code) => {
// この辺 Rudy on Browserの真似
const outputBuffer = [];
const stdout = (line) => outputBuffer.push(line);
const { vm } = await DefaultRubyVM(module, {
consolePrint: true,
consoleHandler: { 1: stdout, 2: stdout },
});
vm.printVersion();
try {
const result = vm.eval(code);
if (outputBuffer.length === 0) return result.toString();
return outputBuffer.join("");
} catch(e) {
if (e instanceof Error) throw e;
return e;
}
};