Ruby on Browser に続いて Ruby WASM/WASI で電卓っぽいものを作りました。 ongaeshi.hatenablog.com
テキストボックスの内容を入力としてRubyスクリプトに渡して評価し実行結果を出力します。つまり入力→変換→出力するRubyアプリケーションがブラウザ上で簡単に作れます。コードはURLに記録されるので簡単に共有することができます。
基本
Rconv.set()
メソッドに渡したブロックの中身が変換プログラムになります。ブロック引数に渡されるのはテキストボックスの内容がevalされたものです。Always string = true
のときは常に文字列になります。ブロックの戻り値、もしくは標準出力に何か出力されたときはその内容が、そうでないときはブロックの戻り値が出力されます。
例えば irb 風の挙動を作りたいときはこんな感じ。(入力途中で出てくるエラーメッセージも大変分かりやすくてここはCRubyの蓄積が効いているなぁと思います)
Rconv.set(title: "Rconv", default: 1) do |e| p e end
自分はRubyでいくつかのキーワードをまとめて置換するテキストフィルターみたいなやつをよく書くのですが、そういうのも得意です。
Rconv.set(title: "テキスト置換", default: 1) do |e| e.gsub(/\bProgress\b/, "Progressssss") .gsub(/@color\b/, "@colorrrr") .gsub(/@tty\b/, "@ttyyyyyy") end
応用
10進数を16進数、2進数に変換したり、
def to_hex_bin(num) puts num puts "0x" + num.to_s(16) puts "0b" + num.to_s(2) end Rconv.set(title: "10進数を16進数、2進数に変換", default: 4660) do |e| to_hex_bin(e) end
byteからKiB, MiB, GiBに変換とか。
def b2k(byte, n) (byte / (2 ** n).to_f).round(2) end def puts_b2k(byte, n, unit) v = b2k(byte, n) puts "#{v} #{unit}" if v != 0 end def byte_to_kib(byte) puts "#{byte} byte" puts_b2k(byte, 10, "KiB") puts_b2k(byte, 20, "MiB") puts_b2k(byte, 30, "GiB") puts_b2k(byte, 40, "TiB") puts_b2k(byte, 50, "PiB") puts_b2k(byte, 60, "EiB") end Rconv.set(title: "byteからKiB, MiB, GiBに変換") do |e| byte_to_kib(e) end
またRuby/WASMはCRubyなのでちまたにあるRubyスクリプトを移植することができます。自分は昔作ったcaseninjaというgemを移植しました。(変数名を任意のケースに変換することができるプログラム) 結構愛用しています。
(これは長いのでリンク貼ります) Caseninja -rconv
おわりに
rconv/sample.ja.md at main · ongaeshi/rconvにここで紹介したサンプルコードも置いてあるので是非遊んでみてください。よいものができたら #rconv とかで教えてくれると喜びます。