pockestrap

Programmer's memo

Meguro.rb#27 でFizzbuzzだけできるRuby to JavaScriptコンパイラを書いた

github.com

Meguro.rb#27のLTで、ライブコーディングでFizzbuzzができるRuby to JavaScriptコンパイラを書きました。 ライブコーディングだけをしたので、資料は↑のGitHubリポジトリのみです。

このコンパイラを使うと、次のFizzbuzzのコードがJavaScriptのコードに変換されます。

max = 20
i = 1

while i <= max
  if i % 15 == 0
    puts "fizzbuzz"
  elsif i % 5 == 0
    puts "buzz"
  elsif i % 3 == 0
    puts "fizz"
  else
    puts i
  end
  
  i = i + 1
end

LTの持ち時間で実装するために仕様はめちゃくちゃガバガバですが、それでも面白いものができたんじゃないかなと思っています。

目的

今回のライブコーディングの目的は主に次の2つです。

  • Fizzbuzzぐらいだったら簡単にコードの変換が書けてしまうのを知ってもらう
  • RubyVM::ASTとかPattern matchingがどう使えるのか知ってもらう

この発表で「こういうの楽しそうだな」と思ってもらえたら嬉しいです。

ぜひ試してほしい

今回LTで作ったコンパイラや、Fizzbuzzのコードや、コンパイラのテンプレートは全て前述のGitHubリポジトリに含まれています。そして実装していく簡単な手順もREADMEに書いてあります。 ぜひ試しに実装してみてください。

慣れれば結構簡単に実装できます。 実際発表の素振りをしていた時には10分未満で簡単に説明しつつ実装できていました。 本番では緊張するし説明も多めにやったしタイポも多かったので、多分時間オーバーしてましたが。。(すみません)

経緯とか

  • Meguro.rbには「RubyVM::ASTでなんか話します」という雑な宣言でLT登録した
  • 最初はちゃんと実用的なツールを作って発表を考えていたけど、ゲームをやってたら実装する時間が取れなかった
  • fallbackとしてRoppongi.rbで話したRuby to Whitespaceコンパイラのライブコーディングを考えていたけど、Whitespaceとはなにかとか色々前提に話すことが多そうで大変だった
  • JavaScriptならば比較的Rubyistの共通言語としては話しやすいのではと思ってJavaScriptをターゲットに選んだ
  • Fizzbuzzコンパイルできるぐらいの雑コンパイラを10分で作れるかなーと不安だったけど、やってみたら案外できた

発表を楽しんでもらえたらなによりです。発表中にタイポを教えていただいた方は本当にありがとうございました🙏🙏