RubyKaigi 2022に現地参加 & 登壇しました
しおいです。
みなさまRubyKaigi 2022お疲れ様でした!
わたしはありがたいことに去年に続き、DAY2に登壇する機会をいただきました。
今年は3年ぶり2回目となる現地参加となり、本当に楽しいあっという間の3日間を過ごすことができました。
この記事では、今回のテーマを選んだきっかけ、実際に作ったもの、登壇本番のことや会期中のあれこれを振り返ります。
Wireshark + mruby + dRubyのお話をするに至ったきっかけ
今回は「Packet analysis with mruby on Wireshark - dRuby as example」というタイトルにて「mrubyを組み込んだWiresharkでdRubyパケットを解析する」という内容でお話をしました。
こうした登壇テーマを選ぶに至ったのは、去年2021年のRubyKaigi Takeout 2021で「Ruby likeなアプリケーションプロトコルを作る」という内容のお話をした際、何人かの方から「dRubyっぽい」との感想をいただいたのをきっかけにdRubyの勉強を始めたことに端を発します。
次はわたしの2つ目の #kaigieffect であるところの「dRubyによる分散・Webアプリケーション」をこつこつ読む。 pic.twitter.com/ZsFk0NPH6e
— しおい (Misaki Shioi) (@coe401_) 2021年9月16日
dRubyはとにかく面白く、またそのときちょうどWiresharkに入門したばかりでもあったため、その年のRuby Advent Calendarのネタとして「dRubyパケットをWiresharkでキャプチャする」という試みを思いつきました。
そうして出来上がったのがこの記事です。
結論を書くと、
- WiresharkでdRubyパケットをキャプチャしようと思ったが、WiresharkはdRubyを解析可能なアプリケーションプロトコルとしてサポートしていないので、トランスポートプロトコルまでしか解析できなかった
- …と、いうのは誤解で、後日気がついたところによると実は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
ということで実装したのがこちらです。
Wiresharkにmrubyを組み込むため、Wiresharkのリポジトリの中にmrubyのリポジトリをGitサブモジュールとして置いておいて、ビルド時に力技でmrubyをリンクさせるような方法を取りました。
ホストマシンにmrubyをインストールさせてリンクさせる方法も考えたのですが(登壇後にもそのような指摘をいただきました。実際、同じくWiresharkに組み込まれているLuaはそういう方法を取っているようです)、mrubyは柔軟にカスタマイズすることができるため、ユーザーが「Wiresharkに組み込むためのmruby」を常に持っていてくれる保証はないかもしれないと考え、このような方法を選びました。
が、mrubyのリポジトリを丸ごとWiresharkの中に置くのではなく、ビルド済みのlibmruby.aを直接リンクさせる方が良いかもしれない…
この辺りは自分に知見がないために難しく、ぜひ詳しい方にお話を伺ってみたいです。
また何せネットワークもソフトウェア組み込みもdRubyも初心者なので、実装にあたってはC、mruby、Wireshark、CMake、dRuby、RubyのMarshalフォーマットの勉強が必要でした。
参考にした書籍・記事・ドキュメント・ソースコードは以下のようになります。
- Head First C
- 詳説 Cポインタ
- Webで使えるmrubyシステムプログラミング入門
- 入門mruby Cからmruby APIを使いこなす
- 実践 パケット解析 第3版
- 9.2. Adding a basic dissector (Wireshark Developer's Guide)
- packet-drb.c (WiresharkのdRubyディセクタのソースコード)
- Step 2: Adding a Library (CMakeチュートリアル)
- 勝手に作るCMake入門 その1 基本的な使い方 (かなりお世話になりました)
- 勝手に作るCMake入門 その4 外部ライブラリを利用する (同上)
- dRubyによる分散・Webプログラミング
- ruby/drb (dRubyのソースコード)
- Marshalフォーマット (るりまのMarshalフォーマットの紹介)
あとmrubyをCに組み込む勉強をしていたときの副産物として、Fukuoka.rb 0x100 回 LT 大会 (#256)でこんなLTをしました。
当初やりたかったことを実現するため結果的にWireshark、mruby、dRubyと話題が発散しすぎてしまったような気がしていたので、登壇前はどれだけの人に楽しんでもらえるかなとちょっと不安だったのですが、登壇後には予想以上の反応、温かい感想をいただきました。
本当に嬉しいです。
RubyKaigi 2022!!
こんな感じで出したプロポーザルが無事通り、準備期間中必死に書いた160枚超の発表用スライドを携え、(ついでにRubyKaigiとは全然関係ないのですがKaigi直前に行っていた転職活動も成功し、そして現職場への引き継ぎも何とか無事終えて、)RubyKaigi本番に臨みました。
(以降、会期中のツイート多め)
つ #rubykaigi pic.twitter.com/lLFuTp3oHv
— しおい (Misaki Shioi) (@coe401_) 2022年9月8日
来ました!!!! #rubykaigi pic.twitter.com/G8pR49djHJ
— しおい (Misaki Shioi) (@coe401_) 2022年9月8日
Rubyistが沢山いて楽しい!!!!
— しおい (Misaki Shioi) (@coe401_) 2022年9月8日
会場に着くと、当たり前ですがそこには沢山のRubyistたちが集っていました。
久しぶりに会う人や、初めてin personで会う人や、憧れの人までも。
3年ぶりに人々と顔を合わせ、おしゃべりをし、一緒に難しい話を聴く(そしてその難しさにスッと置いていかれる)、そして現地の美味しいものをいただく、というのはこんなに楽しいことだったのだな、と胸がいっぱいになりました。
いやー難しい話を沢山聴くことができてだいぶ頭がほかほかになったし、久しぶりの人や初対面の人や憧れの人と沢山お話できて最高のDay1でした。
— しおい (Misaki Shioi) (@coe401_) 2022年9月8日
明日発表がんばるぞ!! #rubykaigi
(ビビッドガーデンさんのブースで同窓会みたいになった図↓) pic.twitter.com/9bOAaECMVd
初日の休憩時間中、現職の上司と同僚そして先に退職された先輩と同僚と一緒に撮っていただきました。
今日もSMSさんのシャトルバスで会場まで(ありがたや〜) #rubykaigi pic.twitter.com/Xp2euhbkb0
— しおい (Misaki Shioi) (@coe401_) 2022年9月8日
DAY2はわたしの登壇日でもありました。
#rubykaigiB にてこの後14:50よりお話しする「Packet analysis with mruby on Wireshark - dRuby as example 」の発表資料です。
— しおい (Misaki Shioi) (@coe401_) 2022年9月9日
This is a slide from my presentation at RubyKaigi 2022. よろしくお願いします!https://t.co/nCcF7QLqGI #rubykaigi
本番でお話しした「Packet analysis with mruby on Wireshark - dRuby as example」の資料はこちらです。
RubyKaigiの会場でお話しするのはこれが初めてだったために緊張で震え上がっていたのですが、何とか発表が始まりスライドを進めてちょうど中盤あたりに差し掛かったところで、何とフレッツ光の故障によるネットワーク障害が発生。
オンライン参加の方向けの中継が停止してしまい、わたしの発表はそこで一旦中断となりました。
中断中、不測の事態の発生にわたし自身は内心激しくアワアワしていたのですが、後でTwitterを見ると、会場にいた方にはその動揺っぷりはあまり伝わっていなかったようで安心しました。
また会場スタッフの方が舞台の裾に捌けるための準備をしてくださっている間に、観客席の方から
など続々と質問の声が上がり、それにわたしが答えるという思いがけないコールアンドレスポンス(????)が発生していました。
そのやりとりや、やりとりへの反応も含め、会場のMINSWANから温かく見守っていただいているのだな、と思うとじわじわ気持ちも落ち着いていきました。
その後一旦舞台の裾に捌けたものの、すぐにネットワークが回復する目処が立たなさそう、とのことでオンラインでの中継を中断したまま発表を再開。
このときにはだいぶリラックスできていたため、最後のデモまで無事に完走することができました。何なら普段の発表よりも良かったのでは。
(最終的に次の時間帯のセッションまでネットワーク回復せず…↓)
The network at the venue is still dead, and so currently running sessions "Caching With MessagePack" and "Create my own search engine." are not available online. We're recording all the talks, and the videos will soon be uploaded on YouTube. #rubykaigi
— RubyKaigi (@rubykaigi) 2022年9月9日
We diagnosed our fibre connection got broken. #rubykaigiA stream is now back using a wired link used as free Wi-Fi at the venue. #rubykaigi
— RubyKaigi (@rubykaigi) 2022年9月9日
オンライン参加の方には中断時点で発表が終わってしまった形になっており心苦しいのですが、後日アーカイブがYoutubeのRubyKaigiチャンネルにアップロードされるとのことなので、もしよければそちらで楽しんでいただけると幸いです。
(2022年11月4日追記: 動画が公開されました!)
またRubyKaigi運営チームの皆さん、あと会場スタッフの方がこうした事態に対応するために色々と手を尽くして下さっていたことに感謝しています。本当にお疲れ様でした。
発表終わりました!!
— しおい (Misaki Shioi) (@coe401_) 2022年9月9日
おいしい思いをさせていただきました & 途中お待ちくださったみなさんに感謝します!!!!
そして資料を公開しました!!!!(発表中Draftになっておりすみません🙏) https://t.co/jSJ4hSET4g
発表前にツイートで資料を案内するも、下書き状態だったという痛恨のミス。
発表後、沢山労いのお声をいただいたのもありがたかったのですが、それに加えて途中のトラブルのことだけではなく発表の内容そのものについても「この機能はこういう場面で使えそうかも」「ここはもっとこうするといいのでは」「これって〜ということ?」「面白かった」などなど感想や質問をいただけたのは本当に嬉しかったです。
今日も楽しかったー!!
— しおい (Misaki Shioi) (@coe401_) 2022年9月9日
わくわくするようなRubyの可能性を広げる話を沢山聴いて、会場の温かい雰囲気のおかげでわたしの発表も何とか終わり、Matzさんともお話できて、退職前の最後の機会に現職メンバーと津で結集することができました。
素晴らしいDAY2をありがとうございました!!!! #rubykaigi pic.twitter.com/hIIsaK7zFy
MatzさんにRubyとmrubyを作ってくださったことへの感謝を伝えることができました!
昨日の発表中、オンラインでご覧のみなさんには配信が止まったままだったということを失念しており、発表後の一連のツイートは思慮が足りていなかったなと一晩明けて反省しております…
— しおい (Misaki Shioi) (@coe401_) 2022年9月9日
後日アーカイブがアップロードされるとのことなので、もしよければ続きからお楽しみ頂けると幸いです! #rubykaigi
#rubykaigi 3日目もよろしくお願いします!! pic.twitter.com/UcmkpJT0d5
— しおい (Misaki Shioi) (@coe401_) 2022年9月10日
3日目にもなるとだいぶ体力の残量が減ってきているものの楽しすぎてテンション収まらず
RubyKaigi、ちょっと歩くと各所でおしゃべりが始まって楽しすぎる🥷
— しおい (Misaki Shioi) (@coe401_) 2022年9月10日
#rubykaigi 3日間おつかれさまでした!!!
— しおい (Misaki Shioi) (@coe401_) 2022年9月10日
めちゃめちゃ楽しかったです。
運営のみなさんありがとうございました!!また来年!!! pic.twitter.com/4h8rdITB7D
最後は松田さんのクロージングトークを聴き、思わず涙ぐみながら夢のような3日間を終えました。
来年はもっと安心して、人々がRubyKaigiに参加できるような世界になっていれば良いなと思います。
RubyKaigi 2023: May 11-13, 2023; See you in Matsumoto! #rubykaigi
— RubyKaigi (@rubykaigi) 2022年9月10日
松本で無事にお会いできますように!
その他に書き残しておきたいこと① 会場で聴いた発表について
今年も刺激を受けるトークが目白押しでした。個人的には
- kateinoigakukunさんの「Ruby meets WebAssembly」
- すごすぎる
- 技術的難易度の高い課題に対するアプローチの技術的難易度の高さよ…
- _ko1さんの「Making *MaNy* threads on Ruby」
- 難しかったけどMaNyのびしろは伝わってきました
- ユーザーがスケジューラを書かずに済むユーザーに優しい仕組みを提供しようと下さっているのかなと理解し、ありがたいなと思いました(素人感想)
- うなすけさんの「Do Pure Ruby Dream of Encrypted Binary Protocol?」
- ご苦労お見受けしました
- それでも一歩ずつQUIC実装のために前進されているのがすごいなあ
- m_sekiさんのCreate my own search engine.」
- hsbtさんの「Why is building the Ruby environment hard?」
- 自分のチーム内でも話題になったような事例から世界でまだ数人しか踏んでいないレア事例まで、さながらビルドエラーの展覧会のよう
- 「ソフトウェアは何もしないと壊れる」名言…
- nay3さんの「The Better RuboCop World to enjoy Ruby」
- 自分の中で初心者の気持ちとちょっと脱初心者した気持ちがせめぎ合って大変でした
- わたしの近くに座っていらした角谷さんとmoroさんが「そうなんだよなー」とうんうんされていたのが印象的でした
- ima1zumiさんの「String Meets Encoding」
- すごく丁寧に課題にアプローチされていて勉強になりました
- きっかけがすとうさんのツイートの読み間違えだった、というお話が良すぎる & 経済効果すごい!!
あたりが刺さっていますが、現地で聴けなかった気になるものもまだ沢山ある!!
その他に書き残しておきたいこと② #rubyfriends
わたしにとっての初めてのRubyKaigiは3年前、2019年に福岡で開催されたRubyKaigiで、当時の自分はまだ仕事を始めたばかり、Rubyコミュニティに顔を出し始めたばかりのプログラマ1年生でした。
その際も会場や懇親会の場で沢山の参加者の人々とお話できて感激していたのですが、それから3年経ち、今回のRubyKaigiではその時よりも更に更に、もっと沢山の人々と一緒にRubyKaigiを楽しむことができました。
この3年を過ごすうちに、自分はこんなに沢山の人々と交流し、あるいは新たに出会い、お世話になっていたのだな、と思うと何だか込み上げてくるものがありました。
今回会場で初めてお会いできた方、あるいは会場でお話しする機会がなかった方、そしてオンラインで参加をされていた方とも、来年のRubyKaigiもしくは別の場所でまたお会いできると嬉しいです。
その他に書き残しておきたいこと おまけ
自分の登壇の中断中、「いやー逆に緊張がほぐれてきました」などと口走っていた記憶があるのですが、実はその時が緊張のピークでした。嘘ついてすみません…
あまりの緊張に壇上で余計なことを言っていなかったか、今更ながらかなり心配しています。