RubyKaigi 2022に現地参加 & 登壇しました

しおいです。
みなさまRubyKaigi 2022お疲れ様でした!
わたしはありがたいことに去年に続き、DAY2に登壇する機会をいただきました。

rubykaigi.org

今年は3年ぶり2回目となる現地参加となり、本当に楽しいあっという間の3日間を過ごすことができました。

この記事では、今回のテーマを選んだきっかけ、実際に作ったもの、登壇本番のことや会期中のあれこれを振り返ります。

Wireshark + mruby + dRubyのお話をするに至ったきっかけ

今回は「Packet analysis with mruby on Wireshark - dRuby as example」というタイトルにて「mrubyを組み込んだWiresharkdRubyパケットを解析する」という内容でお話をしました。
こうした登壇テーマを選ぶに至ったのは、去年2021年のRubyKaigi Takeout 2021「Ruby likeなアプリケーションプロトコルを作る」という内容のお話をした際、何人かの方から「dRubyっぽい」との感想をいただいたのをきっかけにdRubyの勉強を始めたことに端を発します。

dRubyはとにかく面白く、またそのときちょうどWiresharkに入門したばかりでもあったため、その年のRuby Advent Calendarのネタとして「dRubyパケットをWiresharkでキャプチャする」という試みを思いつきました。
そうして出来上がったのがこの記事です。

coe401.hatenablog.com

結論を書くと、

  • WiresharkdRubyパケットをキャプチャしようと思ったが、WiresharkdRubyを解析可能なアプリケーションプロトコルとしてサポートしていないので、トランスポートプロトコルまでしか解析できなかった
  • と、いうのは誤解で、後日気がついたところによると実はWiresharkに最初から組み込みのdRubyディセクタをONにすれば解析できた (後日追記)

という内容の記事です。

なお、Wiresharkにおいてはディセクタなるプラグインによってプロトコルごとにパケットを解析できる、そしてそのディセクタは自作することができる、ということは「ネットワークプロトコルハッカーズガイド - キャプチャ、解析、エクスプロイトの理論と実践」を読んでいて初めて知りました。
(ちなみにこの本は良い本なのですがわたしには難しく、一応通読しましたが何ひとつ理解できてません)

ところで、たまたまこのとき同時並行でudzuraさんの「Webで使えるmrubyシステムプログラミング入門」を再読していました。
(こちらも良書です。今回めちゃめちゃ勉強になりました)

この本の中に、Apache HTTP Serverの拡張モジュールにmrubyを組み込んでApacheの中でRubyを扱う、という面白い例が登場します。
ApacheはCで書かれており、そしてわたしが入門したばかりのWiresharkもCで書かれています。
これは、もしかするとWiresharkにmrubyを組み込めばWiresharkの中でもRubyを使うことができるのでは、つまりmrubyを組み込んだWireshark + Rubyで書いたWiresharkディセクタでdRubyパケットを解析できてしまったりするのでは…!?(???)と夢が広がっていきました。Ruby大好きなので。

mruby on Wireshark

ということで実装したのがこちらです。

github.com

Wiresharkにmrubyを組み込むため、Wiresharkリポジトリの中にmrubyのリポジトリをGitサブモジュールとして置いておいて、ビルド時に力技でmrubyをリンクさせるような方法を取りました。
ホストマシンにmrubyをインストールさせてリンクさせる方法も考えたのですが(登壇後にもそのような指摘をいただきました。実際、同じくWiresharkに組み込まれているLuaはそういう方法を取っているようです)、mrubyは柔軟にカスタマイズすることができるため、ユーザーが「Wiresharkに組み込むためのmruby」を常に持っていてくれる保証はないかもしれないと考え、このような方法を選びました。

が、mrubyのリポジトリを丸ごとWiresharkの中に置くのではなく、ビルド済みのlibmruby.aを直接リンクさせる方が良いかもしれない…
この辺りは自分に知見がないために難しく、ぜひ詳しい方にお話を伺ってみたいです。

また何せネットワークもソフトウェア組み込みもdRubyも初心者なので、実装にあたってはC、mruby、Wireshark、CMake、dRubyRubyのMarshalフォーマットの勉強が必要でした。
参考にした書籍・記事・ドキュメント・ソースコードは以下のようになります。

あとmrubyをCに組み込む勉強をしていたときの副産物として、Fukuoka.rb 0x100 回 LT 大会 (#256)でこんなLTをしました。

speakerdeck.com

当初やりたかったことを実現するため結果的にWireshark、mruby、dRubyと話題が発散しすぎてしまったような気がしていたので、登壇前はどれだけの人に楽しんでもらえるかなとちょっと不安だったのですが、登壇後には予想以上の反応、温かい感想をいただきました。
本当に嬉しいです。

RubyKaigi 2022!!

こんな感じで出したプロポーザルが無事通り、準備期間中必死に書いた160枚超の発表用スライドを携え、(ついでにRubyKaigiとは全然関係ないのですがKaigi直前に行っていた転職活動も成功し、そして現職場への引き継ぎも何とか無事終えて、)RubyKaigi本番に臨みました。
(以降、会期中のツイート多め)

会場に着くと、当たり前ですがそこには沢山のRubyistたちが集っていました。
久しぶりに会う人や、初めてin personで会う人や、憧れの人までも。
3年ぶりに人々と顔を合わせ、おしゃべりをし、一緒に難しい話を聴く(そしてその難しさにスッと置いていかれる)、そして現地の美味しいものをいただく、というのはこんなに楽しいことだったのだな、と胸がいっぱいになりました。

初日の休憩時間中、現職の上司と同僚そして先に退職された先輩と同僚と一緒に撮っていただきました。

DAY2はわたしの登壇日でもありました。

本番でお話しした「Packet analysis with mruby on Wireshark - dRuby as example」の資料はこちらです。

speakerdeck.com

RubyKaigiの会場でお話しするのはこれが初めてだったために緊張で震え上がっていたのですが、何とか発表が始まりスライドを進めてちょうど中盤あたりに差し掛かったところで、何とフレッツ光の故障によるネットワーク障害が発生。
オンライン参加の方向けの中継が停止してしまい、わたしの発表はそこで一旦中断となりました。

中断中、不測の事態の発生にわたし自身は内心激しくアワアワしていたのですが、後でTwitterを見ると、会場にいた方にはその動揺っぷりはあまり伝わっていなかったようで安心しました。
また会場スタッフの方が舞台の裾に捌けるための準備をしてくださっている間に、観客席の方から

など続々と質問の声が上がり、それにわたしが答えるという思いがけないコールアンドレスポンス(????)が発生していました。
そのやりとりや、やりとりへの反応も含め、会場のMINSWANから温かく見守っていただいているのだな、と思うとじわじわ気持ちも落ち着いていきました。

その後一旦舞台の裾に捌けたものの、すぐにネットワークが回復する目処が立たなさそう、とのことでオンラインでの中継を中断したまま発表を再開。
このときにはだいぶリラックスできていたため、最後のデモまで無事に完走することができました。何なら普段の発表よりも良かったのでは。

(最終的に次の時間帯のセッションまでネットワーク回復せず…↓)

オンライン参加の方には中断時点で発表が終わってしまった形になっており心苦しいのですが、後日アーカイブYoutubeのRubyKaigiチャンネルにアップロードされるとのことなので、もしよければそちらで楽しんでいただけると幸いです。

(2022年11月4日追記: 動画が公開されました!)

www.youtube.com

またRubyKaigi運営チームの皆さん、あと会場スタッフの方がこうした事態に対応するために色々と手を尽くして下さっていたことに感謝しています。本当にお疲れ様でした。

発表前にツイートで資料を案内するも、下書き状態だったという痛恨のミス。

発表後、沢山労いのお声をいただいたのもありがたかったのですが、それに加えて途中のトラブルのことだけではなく発表の内容そのものについても「この機能はこういう場面で使えそうかも」「ここはもっとこうするといいのでは」「これって〜ということ?」「面白かった」などなど感想や質問をいただけたのは本当に嬉しかったです。

MatzさんにRubyとmrubyを作ってくださったことへの感謝を伝えることができました!

3日目にもなるとだいぶ体力の残量が減ってきているものの楽しすぎてテンション収まらず

最後は松田さんのクロージングトークを聴き、思わず涙ぐみながら夢のような3日間を終えました。
来年はもっと安心して、人々がRubyKaigiに参加できるような世界になっていれば良いなと思います。

松本で無事にお会いできますように!

その他に書き残しておきたいこと① 会場で聴いた発表について

今年も刺激を受けるトークが目白押しでした。個人的には

あたりが刺さっていますが、現地で聴けなかった気になるものもまだ沢山ある!!

その他に書き残しておきたいこと② #rubyfriends

わたしにとっての初めてのRubyKaigiは3年前、2019年に福岡で開催されたRubyKaigiで、当時の自分はまだ仕事を始めたばかり、Rubyコミュニティに顔を出し始めたばかりのプログラマ1年生でした。
その際も会場や懇親会の場で沢山の参加者の人々とお話できて感激していたのですが、それから3年経ち、今回のRubyKaigiではその時よりも更に更に、もっと沢山の人々と一緒にRubyKaigiを楽しむことができました。
この3年を過ごすうちに、自分はこんなに沢山の人々と交流し、あるいは新たに出会い、お世話になっていたのだな、と思うと何だか込み上げてくるものがありました。

今回会場で初めてお会いできた方、あるいは会場でお話しする機会がなかった方、そしてオンラインで参加をされていた方とも、来年のRubyKaigiもしくは別の場所でまたお会いできると嬉しいです。

その他に書き残しておきたいこと おまけ

自分の登壇の中断中、「いやー逆に緊張がほぐれてきました」などと口走っていた記憶があるのですが、実はその時が緊張のピークでした。嘘ついてすみません…
あまりの緊張に壇上で余計なことを言っていなかったか、今更ながらかなり心配しています。