RubyKaigi2023に行ってきたのは別エントリにしたのでこのエントリでは LT で話しした内容の説明などをしていこうかと思います。

Presentation

LT申し込みまで

RubyKaigi2023 松本でやるし発表もしたいが、ネタがないなとおもってたら本編の方の CFP1 が閉じられてた2。 とはいえ今年は COVID-19 の制限も無くなるから LT あるとおもうので LT 出せたらいいなあと考えてた。 そうこうしているうちに Ruby30th で今はまだないものだけど…って matz がいったものを造ろうとなりました。

LT の応募サイト開くまでにネタが幸い見つけることができ、実装をはじめることにした。

実装

ということで、通るかどうかわからないですが、発表できるように準備をはじめました。 準備といっても実際は実装どこまでできましたーというような発表にする予定だったので そのまま実装をしています。

実装予定は発表にもあった通り、以下の予定ですすめて、最後に fiddle で読み込めるように実装していました。

  1. 四則演算: Integer の計算ができること
  2. 変数: 変数が使えること
  3. 制御構文: forif などの基本的な制御構文が使えること
  4. メソッド: メソッドが定義でき、利用できこと

を目標に実装をすすめていましたのでそれぞれの進捗を

四則演算

とくに詰まる点もなく、AST をもとに assembler へ変換するだけでいけた。

変数

これが一番大変だった。教科書cherry-picking しながら進めてたために、 実装でわからん部分が出てきたのでインターネット介して gdb リモートデバッグの講習を受けながら実装。 もともとここか制御構文までで終わるだろうなあと予想してたが、SEGV 出しながらもなんとかくりあ。

制御構文

はじめは素直に if 文を実装。ここも上記の理由によりなんもわからんとなり、別の人の実装 を参考に実装。 if 文だけじゃつまんないというか、とくになにもできないのでループ文を追加しようとしました。 はじめは for 文を実装しようと考えましたが、なんとここで重大なことに気がつきました。 Rubyfor のことはなにもしらない。ということに。そういえば for x in 1..10; puts x;end とか書けるけど そもそも Range クラスや Array 作る必要あるよな?ということで一旦 for はやめに。

ということでここは while 文を実装して、fibonacci を求めることができるようになりました。

メソッド

ここは変数、制御構文ができれば作るだけなら問題はなかったように思えます。 ただほんとうに作るだけだったので、引数なし、定数を返すだけのメソッドの確認しか行なっていないです。 ここの実装にたどり着くとは思っておらず、最後のRubyKaigi直前の6連休に入ってから実装できてしまったので あんまりブラッシュアップできていないです。 引数の扱い、変数の利用、などなど確認をとれておらずにいますが動いたので fiddle で読み込めるように。

Fiddle で利用できるようにする

定義したメソッドを C言語 の関数として見えるようにしてあげればいいので、 そうしたら、あっさりとうごいてしまった3。この時点で連休の終わりの方だったのは覚えている

発表準備

もともとGW前の連休には実装を終らせてGWの連休中に発表資料作成とできたところまでの実装のブラッシュアップを 行なう予定でしたが、目標の実装が見えてるとなるとどうしても実装したくなって実装の方を進めてました。

もともと発表は Rabbit を利用して英語で行う予定でしたが、LTはとくに うちあわせのために資料を先に出すとかなかったのでとりあえず日本語で作成しました。 実装おわっていないというか実装に時間掛けすぎたのと、RubyKaigiへ持っていくPCをあたらしくしたので 冒険はできずに素直に Google スライド 利用して作成、 後日 Rabbit で清書するということにしました。

発表資料自体は 5/8 or 5/9 ぐらいに作成し終っていました。デモなしで発表練習するとちょうど時間通りに おわるのでこの資料作成完了時点ではこれでよしとしてました。 この時点でも資料はすくたなくとも英語にしようとは考えて資料は作成していました。

当日

当日の朝、資料作成というか資料の英語変換をやっていて、やっているうちに 実際発表してなにができてなにができてないみたいなこと言ったとしても なにがなんだかわからんよなとなったので急遽デモをやって、実行できること示すように少し変更しました。

当日はセッションききながらかなり緊張していました、直前のセッションのトラブルもあったので。 聞いた人はわかるとおもうのですが、発表が途中でおわったのはこういった事情があったのでああいう発表になりました。

後日

発表当日の昼飯時に、 @ukstudiocookpad のイベントとして 手を動かして振り返る RubyKaigi 2023 が5/18にあるからきてよと誘われたのでいくことにしました。 この会では、デキテイナカったデモを最後までやりきっています。

書き直し

手を動かして~ のあとに Rabbit への清書を行ないました。 いままでもいくつかの発表は Rabbit でやってたのですが、 Rabbit テーマ を作りたい作りたいと思っていたので今回は時間もあるのでつくることにしました。 とはいってもほぼ @yu_suke1994リポジトリをコピーしただけなんでうが……

まとめ

RubyKaigiLT で話ししたことをまとめました。 実装の話はもうちょっと詳しく書きたいけど、そもそも実装もすすめたいしでなかなか書けていないですね。

次回作もご期待ください 完


  1. Call For Proposal。ずっと Call For Paper だとおもってたので知ったときえってなった。 

  2. 2023-01-31 締切で完全にネタない状態だった。 

  3. もともとの発表予定ではここまでしかできなかったんですよーって濁す予定でしたが思っている以上に実装がすすんでしまった。