RubyKaigi 20024 RubyKaigi 2024おつかれさまでした!
沖縄から帰ってきてはや一週間余り、ようやく今年のRubyKaigiが終わったという現実を受け入れられるようになってきました。
ありがたいことに、わたしは今回もsocketライブラリのHappy Eyeballs Version 2(以下HEv2)対応を題材に登壇の機会をいただきました。
また今年は勤務先のエス・エム・エスがブースを獲得したので、初めてスポンサーとしてブースに立つこともできました。
この記事ではRubyKaigi 2024に至るまでと、それからRubyKaigi 2024会期中の出来事について振り返ってみたいと思います。
※とんでもない長文ですがご容赦ください
Happy Eyeballs Version 2 対応socketライブラリ開発日誌
上記の通り、去年のRubyKaigiからこの一年socketライブラリのSocket.tcp
メソッドとTCPSocket.new
メソッドのHEv2対応を行なっていました(後者はまだ終わっていません)
RubyKaigi会期中何人かの方から、そもそもなぜこれをやろうと思ったのか、この課題をどうやって発見したのか、質問をいただきました。
実はHEv2との出会いは2021年に遡ります。
@coe401_ "ruby の標準ライブラリ Socket への Happy Eyeballs Version 2 (RFC8305) の導入"
— Kakutani Shintaro (@kakutani) 2021年5月17日
かねてからネットワークプログラミングに興味があったのですが、このときに角谷さんからこんなのあるよ、とメンションをいただいたのがmmasakiさんによる2020年度のRubyアソシエーション開発助成(以下Grant)プロジェクトであったruby の標準ライブラリ Socket への Happy Eyeballs Version 2 (RFC8305) の導入でした。
リンク先の最終報告書とメンター報告書を読むと、この時点では「socketライブラリへのHEv2対応の実装方針は一旦明らかになったが、まだ実装は完了していない」という状況であったことが伺えます。
このときはまだ当事者意識ゼロだったので、「socketライブラリにこんな課題があったんだ…?」くらいに受け止めていました。
時はすぎて翌2022年秋、RubyKaigi 2022で趣味のネットワークプログラミング(Packet analysis with mruby on Wireshark - dRuby as example - RubyKaigi 2022)について発表をしたその後のRubyWorld Conferenceの会場にて、しばたさんから「しおいさん、Happy Eyeballsって興味あります?」とお声がけいただきました。
聞くところによると、Rubyにとっての課題のうちひとつとして、このsocketライブラリのHEv2対応も挙げられているようでした。
Ruby の中にある解決できると嬉しい人が多分多いタフな問題 - HsbtDiary(2022-12-14)
えっこれを自分でやる…??これは自分のような趣味ネットワークプログラマが手を出していい代物ではないのでは…????とたじろぎつつ関連のissueをちょっと眺めたり、そもそもHEv2とは何なのかをちょっと調べたり、逡巡しているうちに年を越してさらに翌2023年春、RubyKaigi 2023がやってきました。
このRubyKaigi 2023ではネットワークからちょっと離れてRubyのパーサで色々遊んでみるという話(Implementing "++" operator, stepping into parse.y - RubyKaigi 2023)を発表しました。
この発表は自分にとってプログラミング言語Ruby(MRI)への解像度を上げるという意味ですごく勉強になる題材でしたし、発表自体もたのしくできたのでとても満足しています。
とはいえ実装中も頭の片隅に「もっとちゃんとネットワークにも向き合った方がいいのでは」という思いがずっとありました。
そこへ最終日の翌日、再び角谷さんから「本業のネットワークの方はどんな感じですか」と発破をかけていただいて、そこでやっとちゃんとHEv2に向き合う覚悟が決まったのでした。なお、わたしの本業はRailsアプリケーションプログラマです。
今回は想定外に沢山の人々に発表をたのしんでもらえて本当に嬉しかったのだけど、それと同時に今日、未来への宿題を頂けたのが一番良かったなと思う。
— Misaki Shioi (しおい) (@coe401_) 2023年5月14日
何から始めたら良いかさっぱりわからないので時間はかかるかもしれないけど、自分なりのたのしさに沿ってやっていきたいな。
RubyKaigi 2023が終わった後、 DNSの本を読んだり、IPv6の本を読んだり、RFC 8305を読んだり、2020年度のGrantの際のPRのコードなどを読んで実装に必要そうな情報を集めました。
また、2020年度のGrantのメンター報告書では状態遷移をベースにしたHEv2実装の方向性が示されているものの、なぜそれが必要になるのかを自分で理解するため、とりあえずSocket.tcp
メソッドにHEv2を実装してみることにしました。
RFC 8305では「HEv2には四つの段階がある」と説明されています。
This document defines a method of connection establishment, named the "Happy Eyeballs Connection Setup". This approach has several distinct phases: 1. Initiation of asynchronous DNS queries [Section 3] 2. Sorting of resolved destination addresses [Section 4] 3. Initiation of asynchronous connection attempts [Section 5] 4. Establishment of one connection, which cancels all other attempts [Section 5]
https://datatracker.ietf.org/doc/html/rfc8305#section-3
これを自分が読んで受け取ったままに実装した結果、こうなりました。
上記では名前解決を並行に行うためにThread
を使っていますが、せっかくなのでRactor
に置き換えた実装も作ってみました。
ソースコードを見ると分かる通り、RFC通りに素直に実装しようとすると、loop do ~ end
の中に大量の条件分岐が必要になります。
しかも、(発表中にも触れた通り)「名前解決を待っている間に接続が完了した場合」のようなケースですぐに接続済みのソケットを返すことができない、などの問題も解決できていません。
なのですがこの時点ではまだ、2020年度のメンターであったakrさんが提案されているように状態遷移によってHEv2を実装することでこの問題をどうやって解決できるのか、いまいちピンときていませんでした。
さらに、RubyのsocketライブラリでHEv2対応が必要なメソッドには上記のSocket.tcp
と、さらに広く利用されているTCPSocket.new
の二つがあります。
前者はRubyで実装されている一方、後者はCで実装されており、本格的に対応するとなると後者の実装難易度は前者よりもさらに高くなることは明らかです。
おまけに、わたしは過去にRubyにコントリビュートした経験がなく…というかそもそもOSSにパッチを送った経験自体も数えるほどしかなく、自分の実装したものをRubyの標準ライブラリであるsocketにマージしてもらうためにはどうすればいいのか検討もつきません。
…と、取り組み始めてはみたものの、現実的に開発を進めていくにあたって現状の自分一人でことを進めていくのに限界を感じ、識者の力を借りるべく2023年度のGrantに「socketライブラリへのHappy Eyeballs Version 2 (RFC8305)の導入」というプロジェクト名で応募しました。
この際、2020年度のmmasakiさんによるプロジェクトから得られた知見を生かして改めてSocket.tcp
およびTCPSocket.new
へHEv2を導入したい、と提案したところ、ありがたいことに採択の対象となりました。
socketライブラリをいい感じにする提案について、今年度のRubyアソシエーション開発助成に採択いただきました。がんばります!!
— Misaki Shioi (しおい) (@coe401_) 2023年10月31日
2023年度Rubyアソシエーション開発助成 公募結果https://t.co/wnw7OWPU75
こうしてGrantのメンターとなってくださった成瀬さんとは、Slackでのやりとりを中心にプロジェクトを進めることになりました。
Grantでのプロジェクトの進め方には特に決まり事はないようなのですが、わたしの場合は基本的には実装中の困り事などをSlackで相談し、そして実装できたものをレビューしていただく、という形で開発を進めていました。
また成瀬さんの他にも沢山のRubyコミッターの皆さんがSlackのチャンネルに参加して時に相談に乗ってくださり、ありがたい限りです…🙏
Slackで成瀬さんとやりとりをしていて理解できてきたのですが、わたしは当初HEv2アルゴリズムのことを「名前解決の段階と接続試行の段階に分けて処理を行う」かのように理解していました。
例
1. メインスレッドから子スレッドを二つ生成し、各スレッド内でそれぞれアドレスファミリ[a, b]の名前解決を開始
2. いずれかのアドレスファミリの名前解決を待機
3. 先に アドレスファミリaの名前解決が完了
4. aのアドレス宛に接続試行開始
5. aのアドレス宛の接続確立を待機
6. aのアドレス宛の接続に失敗
7. アドレスファミリbの名前解決を待機 -> 完了 -> bのアドレス宛に接続試行開始
8. bのアドレスで接続確立
なのですが実際には、「いずれかのアドレスファミリの名前解決が終わって接続試行を開始した時点で、まだもう片方のアドレスファミリの名前解決が終わっていない」ような場合、接続確立と同時にもう片方の名前解決も待つ必要があることがわかりました。
例
1. メインスレッドから子スレッドを二つ生成し、各スレッド内でそれぞれアドレスファミリ[a, b]の名前解決を開始
2. いずれかのアドレスファミリの名前解決を待機
3. 先にアドレスファミリaの名前解決が完了
4. aのアドレス宛に接続試行開始
5. aのアドレス宛の接続確立、もしくはbのアドレスの名前解決のいずれかを待機
5-1. ここでもしアドレスファミリbの名前解決が完了した場合は残り時間を待機し、bのアドレス宛に接続試行を開始した後、aかbの接続確立を待機する
6. aのアドレス宛の接続に失敗
7. アドレスファミリbの名前解決を待機 -> 完了 -> bのアドレス宛に接続試行開始
7-1. 5ですでにアドレスファミリbの名前解決が完了し、bのアドレス宛に接続試行を開始している場合、この行は不要。代わりにbの接続確立を待機する
8. bのアドレスで接続確立
上記では省略していますが、実際にはここにIPv6での接続を優先するなどの条件も含まれます。
これをまじまじ見つめていると、HEv2には
- 処理には段階があり、どの段階にいるかに応じて特定の処理を行う
- 名前解決の開始、接続試行の開始、接続試行・名前解決の待機など
- 処理を行った結果によって変化するリソースがある
- 接続未試行のアドレス一覧、接続中のアドレス(ソケット)一覧など
- 処理を行った結果、変化したリソースの状態から次の段階が決定する
- 例: 接続未試行のアドレスが残っている場合は接続試行を開始する段階に遷移する、など
- 処理の開始地点から何パターンかの道筋を辿り、最終的に成功か失敗かの段階に至る
という性質があることがわかります。ここへきて自分の中でも、これは状態遷移するアルゴリズムなんだな、と理解が追いついてきました。
そこで実装にあたっては、まずはakrさんのこの図を理解して実装に落とせるような疑似コードを作ることにしました。
https://www.ruby.or.jp/grant/2020/matsushita_mentor_report.pdf
実際にはこの作業は上記の図と最初の実装を踏まえてざっくり大枠を考えた上、実装と並行して進めていました。
当初はあまりの全体像の見えなさに「まともな人類が触っちゃダメなやつ」との評が挙がる場面もあったりしたのですが、進めているうちに扱うリソースがだんだん明らかになってきたことにより、あとは段階ごとにそれらの条件の組み合わせに応じて遷移先を考える、という作業へ収束していきました。
これは個人的に割と好きな作業でした。
そうして出来上がった疑似コードの全容はこちら
あとは実装の方をこれに合わせていくように修正していきました。
実際のSocket.tcp
の実装はこちらです。
そしてこの変更について発表すべくRubyKaigiにプロポーザルを提出したところ無事にこれがacceptされ、
> Your proposal for RubyKaigi 2024 has been accepted
— Misaki Shioi (しおい) (@coe401_) 2024年2月20日
がんばります…!!!!!!
そしてその5日後にSocket.tcp
への変更がmasterにマージされました。やったー!!!!
マージに至るまでSlackでのやりとりはもちろん、それ以外にもbugsやPRのコメントで識者の皆さんから沢山知見をいただきました。本当にありがとうございます。
Socket::tcpへのHappy Eyeballs v2対応がマージされました…!!
— Misaki Shioi (しおい) (@coe401_) 2024年2月26日
何か様子がおかしかったらお知らせください。ドキドキ
Socket::tcp now supports Happy Eyeballs v2.
Please try it out and let me know if you have any feedback🙏https://t.co/l9ADZWTx1k
ということで、HEv2対応のSocket.tcp
を携えて向かったRubyKaigi 2024の発表資料はこちらです。
今回の発表では上記したようなHEv2は状態遷移するアルゴリズムであることと、それをどうやって実装するかについてを中心にお話ししました。
これを紹介するだけで発表時間のほとんどを使ってしまったのですが、実際にはこの他にもおもしろ実装裏話が色々あったので、ご興味のある方はどこかで訊いてやってください…
さて残されたTCPSocket.new
の方については、Socket.tcp
の実装から得られた知見をもとに、MRIの内部実装固有の事情などを考慮しながらどうやって進めていくかについてRuby 3.3 リリースパーティーの場で成瀬さん、akrさんと話し合いました(といいつつ、実際はお二人の会話についていくだけでいっぱいいっぱいでした…)
この光景がめちゃくちゃよかったので勝手ながら送りますね pic.twitter.com/GL5cTb9LLZ
— tomog (@tomog105) 2023年12月26日
(tomogさん写真ありがとうございます!)
こちらについてはGrantの期間中に叩き台はできたものの、スレッドの後処理がちゃんとできていなかったりと詰めが甘い部分が残っているので、引き続き作業予定です。
なお、今回のプロジェクトの全体像については7/19(金)開催のRuby Association Activity Report(オンライン)で報告する予定なので、ご都合が合えば聴きにいらしてください。
最終報告書も後日Rubyアソシエーションの公式サイトに掲載される予定です。
はじめてのスポンサーブース
さて話はがらりと変わって、今年、所属先のエス・エム・エスはプラチナスポンサーとしてRubyKaigiに関わることになり、伴ってブースも出展する運びとなりました。
自分個人としてはRubyKaigiへの現地参加はこれで4回めだったのですが、スポンサーとしてブースに立つのは初めてだったため大変緊張しました…
ブース出展に向け、社内ではRubyKaigiに参加するメンバーで定期的に集まり、当日の配布物の内容、ブースでのだしもの、オペレーションについて考えていきました。
特にブースでのだしものについて、あまり背伸びせず自分たちらしいものを出すとしたらどんなものだろう?という発想から、やっぱり普段の開発の様子を見てもらうのが一番なのではないか、という話になり、実際に自分たちが普段書いているソースコードをそのまま会場で公開することになりました。
実際に会期中、ブースに立ち寄ってコードを見てくださった方々からは割と好評なフィードバックをいただいていたように記憶しており、これは大正解だったのではないかと思っています。
そういえばRubyKaigiでSMSのコードを読んで、DockerでRailsアプリを起動していないのセンスあるなぁと思ったのを思い出した。
— 神速 (@sinsoku_listy) 2024年5月22日
Mac上でDocker使ってRailsアプリを起動した時に増えるトラブルを考えると、dbやredisだけDockerで動かすのがコスパ良いんですよね。
あと、社内に缶バッジメーカーがあったことから参加者の皆さんのSNSアイコン缶バッジを作成する企画も開催しました。
こちらも多くの方から申し込みをいただき、ありがとうございました!
エス・エム・エスは RubyKaigi 2024のブースコンテンツとして、あなたのXアカウントのアイコンを缶バッチにしてプレゼントします! 申し込み(〆5/6)はこちらから👉https://t.co/EnOUV5qIxg※ブースにお越しいただける方が対象です ※応募数によっては抽選とさせて頂く可能性があります #rubykaigi pic.twitter.com/6zp0GvCC36
— SMS Tech | 株式会社エス・エム・エス (@BM_SMS_Tech) 2024年4月26日
締め切り後に社内で手作りしました。缶バッジメーカー自体は会社に一台しかないのですが、アイコンを印刷する、円形に切り抜く、缶バッジメーカーにセットする…といくつか工程があったので、並列化手法でいうところの専門家並列法で手分けして作業してました。
その他にも諸々の発注や買い出しや調整や打ち合わせを普段の業務の傍ら皆で手分けして取り組み、特にかとりえさん、st_1tさん、しんくうさん、takuyakodama39さんがいなければこんなに充実したブース企画を出すことは難しかったと思います。本当にお疲れ様でした。
また、RubyKaigiとブース設営に造詣の深いryopekoさんがアドバイザーとして関わってくださったのもとても心強かったです…!
会社でのRubyKaigiの準備、ついに一山越えた感がある。みんなすごい。
— Misaki Shioi (しおい) (@coe401_) 2024年5月9日
これは沖縄へ送る荷物を会社から一通り発送した後のつぶやき。
RubyKaigi 2024 参加日誌
さて、ここからはそうしていよいよ迎えたRubyKaigi 2024の様子です。
(以降、会期中のつぶやき多め。いくつか他の方のも引用していますので、もし問題がありましたらお手数ですがお知らせください。)
DAY 0 (5/14)
🛫 #rubykaigi pic.twitter.com/b8k1dcdunT
— Misaki Shioi (しおい) (@coe401_) 2024年5月14日
Haisai🌺 #rubykaigi pic.twitter.com/iUrtbZRzBG
— Misaki Shioi (しおい) (@coe401_) 2024年5月14日
皆が話題にしていた空港の看板。記念写真を撮ろう〜と近づいたらその周辺にRubyistたちが看板に吸い寄せられるように集まっていて面白かったです(自分もそう)
この後、たまたま合流した会社のメンバーで国際通りのA&Wへランチに行きました。この時は気づいていなかったのですが、このお店が入っていたビルの電光掲示板にRubyKaigiのCM(ぺんさんの書いたQuine)が流れていました。
#rubykaigi 🌴 pic.twitter.com/VMPkl1b3Jt
— Misaki Shioi (しおい) (@coe401_) 2024年5月14日
お昼ごはん後、会社のメンバーたちはブース設営のために会場へ。「しおいさんは発表準備をしてください」と言ってもらえたため、お言葉に甘えて一旦解散し、宿泊先でちょっと発表練習をしていました。
Pre-checkinしてきました #rubykaigi pic.twitter.com/3Lk0K4eQJi
— Misaki Shioi (しおい) (@coe401_) 2024年5月14日
その後Pre-checkinのために会場に行ったら、すでにブース設営は完了していた…
今年はこのPre-checkinの仕組みがあったため、DAY 0から会場でRubyistたちの熱気を感じることができ、翌日からはじまるRubyKaigiへの期待が否応もなく高まりました。
その晩は永和さん主催のESM Night Cruise at RubyKaigi 2024(ESM Night Cruise at RubyKaigi 2024 - 株式会社永和システムマネジメント | Doorkeeper)に参加しました。2019年のRubyKaigiの博多湾クルーズのときは参加できなかったのでありがたい…
#esm_night_cruise #rubykaigi 🚢
— Misaki Shioi (しおい) (@coe401_) 2024年5月14日
たのしいRubyKaigi前夜だった!
ありがとうございました!! pic.twitter.com/XMh5MXyyGB
船上では久しぶりの人々と色々お話しした他、初めましての人々とも知り合うことができました。
外は大雨でしたが、それはそれで面白かったです。
DAY 1 (5/15)
初日。
会場近くで朝ごはんをいただこうと入ったお店にて、ドアを開けると早速Rubyistたちがわいわいしていたので、一緒に朝ごはんをいただきました。
おはようございます (Rubyistたちとご一緒した朝ごはん) #rubykaigi pic.twitter.com/dEVC6lLUG0
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
おいしいコーヒーをいただけたのでDAY 2以降もお邪魔しようかな、と思っていたら何とこちらのお店、翌日から梅雨休みに入ってしまわれました…
たそかれ珈琲は梅雨休み☂️とのこと。初日に行けて楽しかった思い出が実は幻だったのではないかという気持ちになった。 pic.twitter.com/Y43BIyuExK
— igaiga (@igaiga555) 2024年5月17日
来ました! (with @kakutani ) #rubykaigi pic.twitter.com/rVBIIxH4xv
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
会場着。ogijun業をされている角谷さん。
今回の会場であった那覇文化芸術劇場 なはーとは3年前に開館したばかりの新しい会場とのこと。メインホールは沖縄の海の中を思わせるようなデザインで格好良かったです。
#rubykaigi 🙌 pic.twitter.com/WZeLSMh7X6
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
メインホールに松田さんが登場。ついに始まります。
この後はスポンサーLTの後、ぺんさんによるKeynote。
前半でWeirdなCodeの書き方を色々レクチャーしてくださっている時点ですでにう〜ん?となっていたのですが、後半でひとりTRICKが始まって爆笑してしまいました。
次々ととんでもないコードが出てくるばかりか、それに引っ掛けて他のトークの紹介もあり、これからはじまるRubyKaigiへのわくわく感が高まる素晴らしい基調講演でした…!!
ぺんさんの基調講演、あまりに素晴らしくて勇気が湧いてきてしまった#rubykaigi
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
この日の最後の時間帯が自分の発表の出番だったのですが、ぺんさんの発表を見てなぜかこんな精神状態に。
その後のLunch Breakでは、STORESさん主催のSTORES CAFE for Womenにて他の参加者の人々と一緒にランチをいただきました。
初めましての方々と一緒にテーブルを囲んでお話しできる機会はなかなかないので、こういった機会をいただけるのはとてもありがたいです。おかげで新しいrubyfriendたちができました。
が、この日は色々(?)あって休憩時間の方がぎりぎりになってしまい、写真を撮ったりするのを失念しておりました。ごはんは大変おいしかったです!!!!
この日はこの後、こんな感じで過ごしました。
- 金子さんのThe grand strategy of Ruby Parserを聴く
- タイトルの通りThe "grand" strategyによって描かれるLrama製パーサの未来への道のりのお話。しかもその未来は、金子さんとLramaに関わる人々の手によってもう割と近くまでやってきているというのを感じました
- 金子さんのLRパーサとparse.yへの愛情も垣間見えてよかったな〜。ちょっと齧っただけの身でこんなことを言うのは烏滸がましいですが、わたしもparse.y好きです。
- YokooさんのCross-platform mruby on Sega Dreamcast and Nintendo Wiiを聴く
- 前回登壇されたRubyKaigi 2022のときは聴けなかったのですが、TLが大盛り上がりだったので今年こそはと聴きに行ったところ、噂に違わぬ面白さでした…!!
- ゲーム機全然詳しくないのですが、Yokooさんの情熱が伝わってきました。mrubyでC APIをラップすることでそこにRubyを書ける世界を構築するの、夢が広がりますよね…
My “slides” for #rubykaigi2024 are here: https://t.co/KMRFeEWCyr please use a Dreamcast, Wii, or an emulator for them to view it #RubyKaigi
— Yuji Yokoo (@yujiyokoo) 2024年5月20日
please use a Dreamcast, Wii, or an emulator for them to view it
😂
- モリスさんのNamespace, What and Whyを聴く
- Afternoon Breakの時間は通訳打ち合わせへ。今年もお世話になりました🙏
- いまいずみさんのExploring Reline: Enhancing Command Line Usabilityを聴く
その後はいよいよ自分の出番でした。緊張で直前まで舞台袖で震えていました。何度やってもこの有様です。
#rubykaigiB にてこの後16:40よりお話しする「An adventure of Happy Eyeballs」の発表資料です。
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
This is a slide from my presentation at RubyKaigi 2024. https://t.co/ACPo6tHI0Z
よろしくお願いします! #rubykaigi
発表自体は前日の練習の成果か、デモを含めてスムーズに終えることができたような気がします。
クライアントソケットの接続性の改善という、ある種渋めの内容にも関わらず多くの方が聴きに来てくださっていたようで、本当にありがとうございました。
部屋に入れなかった、という方もいらしたようなので、もしよければ後日アーカイブなどをご覧いただけるととても嬉しいです。
無事に終わりました!!!!
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
ありがとうございました!!!!
Thank you for listening!! #rubykaigi https://t.co/gbgaKpqvBr
DAY 1終了後、Offical Partyのために波の上ビーチへ。
開放感がすごい #rubykaigi pic.twitter.com/SXVfLftSgN
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
発表が終わった解放感で解放感をtypo
今年初めて出会った人々、去年のRubyKaigiぶりに会った人々、自分が聴きに行った発表者の人々、Rubyコミッターの皆さん、自分にとっておなじみの大好きな人々と、日暮れていく海を見ながら沢山お話しできました。
Official Party後はmoroさんと一緒にこちらにお邪魔してました。
やってる pic.twitter.com/9LoRJ2tN5s
— ぷぽ (@pupupopo88) 2024年5月15日
時間の経過とともにどんどんお店の中のRubyist濃度が高まっていって、RubyKaigiを感じました。
は〜たのしいDAY 1だった…絡んでくださったみなさんありがとうございました!!!! #rubykaigi
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
DAY 2 (5/16)
朝からビーチを散歩していました。
おはようございます。DAY2!#rubykaigi pic.twitter.com/c5N5LaWjRE
— Misaki Shioi (しおい) (@coe401_) 2024年5月15日
帰り道、反対方向へビーチに向かう桐生あんずさんとすれ違ってご挨拶したのですが、どうもあんずさんはやんちゃクラブの収録の出待ち待機のためにビーチに向かっていた様子で、自分もあのまましばらくその場にいたら収録に立ち会うことができていたかもしれません。惜しいことをしました(?)
ここか!? pic.twitter.com/I8A9G02JXM
— 桐生あんず (@anzu_mmm) 2024年5月15日
この後は朝ごはんをいただいて会場へ。この日はこんな感じでした。
- 開場からKeynoteまでブースを担当。この日からスタンプラリーが始まるため、朝から盛況でした。
- SamuelさんのKeynote Leveraging Falcon and Rails for Real-Time Interactivityを聴く
- Real-Time Interactivityの歴史からsocketlyプロダクト群の活用例としてのFlappy Birdの実装の解説まで。
- Samuelさん、「Technology is fun」ととてもたのしそうにコードの解説をされていて、聴いているこちらもわくわくしました
- ydahさんのDoes Ruby Parser dream of highly expressive grammar?を聴く
- Lramaチームのydahさん。
- parameterizing rulesの導入によってあのparse.yが「たのしいparse.y」になっている様子が伺えて、ああ、これがLramaチームの目指したい世界なんだな、と感じました
- これまで「たのしいRuby」のたのしさを担保するためにparse.yがだいぶがんばっている側面があったと思うので、そのparse.yがこういう形で進化していくのはすごいことだなと思います
朝から強力なテックトークを浴びている…!! #rubykaigi pic.twitter.com/3NALPNZ07S
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
くらっている様子
この日は休憩時間を中心にブース当番だったので、ランチタイムはブースでスタンプ(シール)を押したり(貼ったり)、ノベルティを案内したり、ソースコード公開の様子を見守ったりしました。
わたくし、今日の休み時間は比較的ブースにおりますので、よかったら遊びに来てください! ( with @takuyakodama39と 、ストラップを間違えた実は撮影OKな @4keboshi ) #rubykaigi pic.twitter.com/udhCTyUfDH
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
ブースに寄ってくれる人々とお喋りするのがたのしくてうっかりお昼を食べ損ねるところだったのですが、かとりえさんが沖縄感溢れるいなり寿司を恵んでくれたおかげで事なきを得ました(写真撮影を失念)
@yukihiro_matz さんとブースにて一枚📸
— SMS Tech | 株式会社エス・エム・エス (@BM_SMS_Tech) 2024年5月16日
Afternoon Break中もソースコード公開中です!#rubykaigi pic.twitter.com/OWbvRrsulS
こんな場面も。
その後は
- はすみさんのUnlock The Universal Parsers: A New PicoRuby Compilerを聴く
- koicさんのRuboCop: LSP and Prismを聴く
- 最近使っていないのでキャッチアップできてなかったのですが、RuboCopをLSPで使えるのは革命的な気がします。とはいえリアルタイムにコードを解析することでこれまでになかった課題に取り組む必要もあるとのこと…
- koicさんのここまで362日の活動と、RubyKaigi 2024後の次の362日に向けた活動の一端が見えるご発表でした
- Afternoon Breakでは引き続きブースに立ちました。前職の人々が来てくれたのでこの辺りで記念撮影をしたような記憶がある。
- ahogappaさんのIt's about time to pack Ruby and Ruby scripts in one binaryを聴く
- sylph01さんのAdding Security to Microcontroller Rubyを聴く
- PicoRubyが「本物のIoT」を実現しようとしている…sylphさんの本領が遺憾無く発揮されていて、たのしそうに開発を進めている様子が伺えたように思います
- 個人的にRubyKaigiでsylphさんのお話が聴けたらいいなあとずっと思っていたので、それが叶ってうれしいです。参考: RubyKaigi 2024が終わったのでまずはクソデカ感情の処理をさせてください - そんなことはさておいて
- Team Protocol Implementersとしてうなすけさんと一緒に名前を呼んでもらいびっくりしました。いつもお世話になっております…
- DAY 2の〆にLightning Talksを聴く
- 今年も多様性に富んだ濃い味のラインナップでたのしかったです。chobishibaさんの「Enjoy Creative Coding with Ruby」やhachiさんの「Drive Your Code: Building an RC Car by Writing Only Ruby」はすごいいい話で心が洗われました。
- みっきーさんの「The test code generator using static analysis and LLM」、早速翌日廊下で有志によってcommits to omochi活動が行われている様子を目撃しました。すごい。
- あと個人的には豪快にタイムアウトして銅鑼が鳴るのもLTの醍醐味だと思うので、そういう点も含めて今年も金子さんのLTは最高でした。もちろん内容も。
RubyKaigiで舞台に立つ人々、みんな本物のハッカーで格好良いなあ。わたしは(末席に身を置いているとはいえ、)みんなのようにはなれないかもしれないけど、それでも、なお、「でもやるんだよ」なのだな。
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
DAY 2、おつかれさまでした…! #rubykaigi
皆やっていることがすごいのはもちろんですが、この「本物のハッカー」はどちらかというと自分のやりたいこと、やるべきことを実現しようとする心意気のことを指していました。
わたしは打たれ弱い人間ですが、それでも自分なりのやり方でそれをやりたいんだな、としみじみしていました。
Ruby 3.4.0 preview1 Releasedhttps://t.co/84kkAT7Ag8
— 成瀬 (@nalsh) 2024年5月16日
とか考えていたらRuby 3.4.0 preview1 がリリースされていた。おつかれさまです…!!!!
この後は会社のメンバーと、会社からの支援で参加されていた学生さんたちと一緒に晩ごはんへ。
学生さんたちお二人、RubyKaigiに上記のような「本物のハッカーたち」の熱気を感じ取ってRubyKaigiをたのしんでいらしたようなので嬉しいです。
"またみむらの話をしてる" "おい、みむらの話はやめろ" #rubykaigi
— 自分のために生きる (@ryopeko) 2024年5月16日
(飲み会の席でミームを教わったりしてました)
解散後はmoroさんと共に、何だかお酒が好きそうなメンバーの集まる席へ…
中田さんが最近書かれたweirdなcodeのお話を聞いてました #rubykaigihttps://t.co/RKdsmG5Yfq https://t.co/WrrzIZrZYI
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
誰かが「これが本物のWeirdなCodeだ」と仰っていたような、いなかったような記憶があります。
あとmoroさんとぷぽさんが共通の趣味の話題で仲良しになっていて何かよかったです。
今晩はRubyistたちがたのしそうにしている様子があまりにたのしすぎて声が枯れてしまった🏝️
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
もう明日でおしまいなの、寂しい #rubykaigi
DAY 3 (5/17)
DAY 3もよろしくお願いします🌊 #rubykaigi pic.twitter.com/GrnsCnSVm2
— Misaki Shioi (しおい) (@coe401_) 2024年5月16日
再び海へ。この日は、前日初日のOfficial Partyの会場近くまで足を伸ばしました。
会期中は三日ともいい天気で気持ちよかったです。
#rubykaigiで自分しか撮ってない写真展
— Misaki Shioi (しおい) (@coe401_) 2024年5月19日
KOBAN pic.twitter.com/jPPy33OOyD
帰り道に撮りました。可愛くないですか?
三日めはおなじみ、Ruby Committers and the Worldから始まりました。
今年はfrozen string literalの話だったり、GVLをやめる可能性の話の辺りが個人的に気になるところでした。
あとビルドシステムの改善に関する話題になった際、kateiさんが「コマンドファイルとしてもバッチファイルとしても実行できるようなファイルがあって、メンテが大変」と仰っていたと思うのですが、前の晩にそういうのを見た気が…ってなってました。
♥ #rubykaigi pic.twitter.com/NNRZmtPeXn
— Misaki Shioi (しおい) (@coe401_) 2024年5月17日
今年の司会のLeoさん、コミッターの皆さんがいきいきしている様子引き出していて素晴らしかったと思います。
その日のその後、
今日になってやっと #rubyfriends してる! pic.twitter.com/xqCKOiDC4J
— えんじぇる@STORES (@sweet_chiho) 2024年5月17日
実は個人的に今回のRubyKaigiでは「沖縄に来られなかった社内メンバーのためにとりいさんにサインいただく」というミッションを背負っていたのですが、かとりえさんのおかげで無事にとりいさんに会うことができて無事にミッションクリアできました。
その前後で一緒にいた人々と。皆いい笑顔。
会場に戻るのがちょっと微妙な時間だったので、かとりえさんと一緒にRuby開発さんのブースでマッサージを受けたりしてました。
マッサージやって〼 w/ @coe401_ #rubykaigi pic.twitter.com/mO6GeHOxsG
— 齋藤甚六 (@jimlock) 2024年5月17日
Lunch Breakの時間はぱんさん、ぱんさんのご同僚たち、sylphさん、大倉さんとお昼ごはんに行きました。
皆英語話者か日英話者で自分だけ全然英語が全く喋れないという面子だったのですが、仲良くしてくれてありがたや…
この辺りで記念撮影した記憶があるけど写真が見つからないので、きっと誰かのスマホの中、あるいはインターネットの海のどこかにあると思います。
(5/28 追記) sylphさんが写真を見つけてくださいました!
#rubykaigi #rubyfriends pic.twitter.com/aevnBME73b
— 大倉雅史(OKURA Masafumi) (@okuramasafumi) 2024年5月17日
ランチ後、のんびりしていたら次のセッションに間に合わず、次に聴いたのは咳さんのERB, ancient and futureでした。
去年のRubyWorld Conferenceで予習していたERBのお話を聞けてうれしかったです。
最後のブロックのローカル変数にlocal_variable_get
を呼んで、取得したオブジェクトを操作する技は、改めて観ていてとってもクールだなと思いました。
そしてERB & dRuby 25周年おめでとうございます。
dRuby 25周年ロゴ、格好いい…!! https://t.co/2gxTVFFskJ pic.twitter.com/PiFp3RUq3m
— Misaki Shioi (しおい) (@coe401_) 2024年5月23日
dRuby人口、Kaigi後に増えてそうでうれしい。
この後は聴こうと思っていたセッションが満席で入れなかったりしていくつかのトークを聴き損ねたのですが、その分会場にいたRubyistとじっくり話し込んでました。
特に島田さんとは、RubyKaigiで見られるようないきいきとしたプログラミング活動は一体何がいいのか、というお話をしていました。
例えばLramaの開発には大きなデザインがあって、それを構成する技術要素があって、関わる人たちは誰に強制をされるわけでもなく各々が自分のやりたいことをプログラミングで実現して、それに対してお互いに敬意を持って感謝をし合っているのが伝わってきて、それは素晴らしいことですよね…というやりとりをしました(自分の記憶)
RubyKaigiという場は、そんな野生のプログラミング活動にスポットライトが当たる場でもあるのだと思います。
その後はまつもとさんのKeynoteへ。
3日間の総括込みで色々とトピックがありましたがNamespaceが入ればメジャーバージョンが4になる(かも)、というお話で自分のことでもないのに心拍数が上がりました。モリスさん応援してます…!!
発表の中でまつもとさんは、「Rubyの改善のためにはコミュニティの力が必要」という旨のことを仰っていました。
RubyやRubyのエコシステムに直接関わるようなコードを書くことはもちろん、それ以外にも自分にとっての「たのしいRuby」のコードを書くことだったり、例えばRubyKaigiのような場が開かれることだったり、コミュニティを形作るような活動や、Rubyにお客さん以上の気持ちを持つこと(= Rubyistになること!)もまたその一助になるんだろうな、という気がしています。
そうしてたのしい時間には終わりが来るもので、まつもとさんの基調講演の後はとうとう閉会の時間がやってきてしまいました。
泣きそうになってしまった。最高のKaigiをありがとうございました…!!!!
— Misaki Shioi (しおい) (@coe401_) 2024年5月17日
来年は松山で!!!!#rubykaigi pic.twitter.com/RuWov7e5qi
今年のRubyKaigiをつくってくださった、格好良い運営チームの皆さんへ拍手を送りました。
皆さんのniceさのおかげで、RubyKaigi 2024も最高の三日間を過ごすことができました。本当にありがとうございました。
来年は松山。元気にお会いできるとうれしいです。
この後はmovさん主催のAfter Partyにて、咳さんと咳フリークの皆さんという何というか栄養価の高そうなテーブルで一緒にごはんをいただいたり(写真がないけど誰かに撮ってもらった気がする)、こういう感じの二次会に参加したり
小崎さんとkateiさんがそれぞれ我々の仕事は簡単ですよ、とか言い出して「そんな訳ないやろ」と全力で否定している空間が楽しい! #rubykaigi
— joker1007 (アルフォートおじさん) (@joker1007) 2024年5月17日
最終的にこうなってました(お店の方が撮ってくださった写真)(この後松田さんも加わってました)
www.instagram.com
皆「あと小一時間飲みたいな〜」と言いながら0時過ぎくらいにお店に入り、気づいたら4時を過ぎていたのでRubyKaigiすごいなって思いました。
このときに成瀬さんから聴いたLrama誕生前夜の秘話がよすぎた…
最高の夜だった……… #rubykaigi
— Misaki Shioi (しおい) (@coe401_) 2024年5月17日
夜更かししすぎでしょ
— がちゃぴん先生 (@gachacomplete) 2024年5月18日
それはほんとうにそう(※小崎さんは二次会で引き上げてらっしゃいました)
DAY -362 (概念) (5/18、5/19)
おまけ。
RubyKaigi後、翌日と翌々日の様子
RubyKaigi 2024が終わったの、まだ信じられないけどもうRubyKaigi 2025 DAY -362(概念)なのだな
— Misaki Shioi (しおい) (@coe401_) 2024年5月18日
5/18は午前中、斎場御嶽に向かう人々とご一緒し、Nature of Orderを感じて心の平穏を得たりしていました。
Inner Peace…🐢
— Misaki Shioi (しおい) (@coe401_) 2024年5月18日
(一応写真も撮ったものの、自分の腕ではあの圧倒的な光景の魅力を残せなかったので心の中に思い描いているの図)
その後は那覇市内をぶらっと散歩したり
なぜだかずっと夢みたいな気分が続いている(寝てないからでは) #rubykaigi pic.twitter.com/QZjNu61yQA
— Misaki Shioi (しおい) (@coe401_) 2024年5月18日
まだ那覇にRubyistたちがいそうな気配を感じたので、晩ごはん仲間を募ったところ、
どなたか今日の晩ごはんをご一緒できるRubyistいらっしゃいます…??(県庁前周辺にいます) #rubykaigi
— Misaki Shioi (しおい) (@coe401_) 2024年5月18日
最初10人だったのにすごい数集まりました! #rubykaigi #rubyfriends pic.twitter.com/ed8pTLSQvm
— Toshio Maki (@Kirika_K2) 2024年5月18日
こうなりました。にぎやか!
この晩は色んな人のKaigiEffectの話を聞くことができてわくわくしました。もしかすると来年のRubyKaigiではそんな発表を聴けるかもしれませんね…?
一生KernelとTCP/IPの話をしてる人たち#rubykaigi pic.twitter.com/KrddQwaMHN
— 𝙕𝙞𝙥𝙨𝙚𝙫𝙚𝙣 (@zipseven) 2024年5月18日
お邪魔してました🍻
— Misaki Shioi (しおい) (@coe401_) 2024年5月18日
RubyKaigiの余韻で数々の #kaigieffect が生まれている様子が味わい深くてよかった〜。
わたしも自分のやるべきことがたくさんあるけど、一つ一つ進めていくぞ。 #rubykaigi https://t.co/dAzp3LJ18r
さらに翌日。
そういえばなっちゃんさんが絶賛していた千日のぜんざいをまだいただいていなかったので、宿泊先をチェックアウトした後朝イチで向かうと、
今朝、念願の千日にて #rubyfriends したのだけど、こなれてなさすぎて自分が写真に写ってない(美味しかったですね〜🍵) #rubykaigi pic.twitter.com/axnAMBP2uH
— Misaki Shioi (しおい) (@coe401_) 2024年5月19日
こんなこともあろうかと撮っておいた3人バージョンがこちらです。 #rubykaigi #rubyfriends https://t.co/qUErnwwagO pic.twitter.com/0Qdu3u2Alb
— nagachika (@nagachika) 2024年5月19日
この後は国際通りで実家に送るお土産を買ったりとのんびりしていたら、
自分で予定を入れたカレンダーから今通知が来たことによって、帰りの飛行機の時間を間違えていたことが発覚した。到着時刻を出発時刻だと勘違いしていた。
— Misaki Shioi (しおい) (@coe401_) 2024年5月19日
無事に空港に着いたので今から帰ります。お世話になりました🍍#rubykaigi https://t.co/v7r23WNXvb pic.twitter.com/h94lNC9cwr
— Misaki Shioi (しおい) (@coe401_) 2024年5月19日
帰着しました🌺
— Misaki Shioi (しおい) (@coe401_) 2024年5月19日
引き続き来年に向けて362日のRubyist活動をやっていきます。#rubykaigi pic.twitter.com/Q4OWgVMkRs
あやうく飛行機に乗り損ねるところでしたが、無事に東京へ帰ってきました。
今年もMINSWANのおかげで、とてもたのしいRubyKaigi 2024でした。
一方、帰ってきてから体調を崩している人も多く観測しており、皆さんどうぞお体をお大事に…(わたしは今のところ元気です)
RubyKaigi 2025
— RubyKaigi (@rubykaigi) 2024年5月22日
🗓️ April 16..18, 2025
🍊 Matsuyama, Ehime, Japan #rubykaigi
来年もよろしくお願いします!
その他に書き残しておきたいこと① ちりとてちんとHEv2
話は変わるのですが、おすすめされて2007-2008年に放映されたNHKの連続テレビ小説「ちりとてちん」を観始めました。
朝ドラは観たことがなかったのですが、いざ観始めてみると物語にぐいぐい引き込まれてばっちりはまってしまいました。もうすぐ観終わってしまうので寂しいです。
発表時間30分でちりとてちんを2話分観ることができるな?(だから何)
— Misaki Shioi (しおい) (@coe401_) 2024年4月20日
(すべてがちりとてちんスケールになっている様子)
--- ここからちりとてちんの話 ---
ちりとてちんの主人公・喜代美ちゃんは(一般に朝ドラの主人公と言われてイメージされるような、明るく元気で人々から愛されるような人物像とは対照的に)、後ろ向きで心配性で不器用で未熟で、そしてそんな自分自身にしっかりコンプレックスを抱えているという人物です。
何というか、視聴者である自分自身の中にも確実に存在しているようなキャラクターです。
物語が進んで彼女が年齢や経験を重ねても、別人のように見違えて素晴らしい人物へと成長していくわけではありません。ベースは喜代美ちゃんのままです。
だけどそんな彼女が色んな人や自分自身に向き合ううち、世の中に自分の足掛かりを作って、これだけは自分の本領だと思えるものを自分の中に発見して、悩んだり落ち込んだりとんでもない大失敗を重ねたりしながらもそれに取り組み、決して完璧だったり格好良くはなくても自分の人生だと言えるものをやっていく…というのがこの物語の大枠です。
もう少し大きな視点でちりとてちんを観ると、これは喜代美ちゃん一人で完結する物語ではなく、彼女が取り組むことになる落語という、人から人へと伝えられてきた伝統芸能の大きな流れの中で、それを受け継いで次に引き渡していく小さな流れの一つとしての物語なのではないか、つまりこの物語自体がもっと大きな物語のフラクタルな構造の一部になっているのではないか、というのが個人的な見方です。
--- ここまでちりとてちんの話 ---
ちりとてちんナイズされた頭でこのRubyKaigiまでの数年を振り返ってみると、Rubyという大きな流れの中で、mmasakiさんakrさんが始められたsocketライブラリのHEv2対応という一つの流れがあり、それをしばたさんや角谷さんがわたしに渡してくださり、わたしはそれを成瀬さんやRubyコミッターの皆さんと一緒にRubyという大きな流れに還元する、という出来事だったのかなあ、と考えたりしました。
改めて助けてくださったり、見守ってくださったり、背中を押してくださった皆さん、ありがとうございました。
というかまだ終わっていなくてTCPSocket.new
対応が残っているので、引き続きよろしくお願いします。
その他に書き残しておきたいこと② 今年の#kaigieffect
RubyKaigiでいろんな人とお話しして、自分の本領としたい分野についてもっと広く深く向き合いたい、自分なりの世界観を持ちたい、という欲が出てきたのが自分にとっての今回の #kaigieffect なのかも。
— Misaki Shioi (しおい) (@coe401_) 2024年5月27日
引き続きこつこつがんばります。
いろんな人の発表を聴いて、そしていろんな人とお話しして、です。言葉足らず。
— Misaki Shioi (しおい) (@coe401_) 2024年5月27日
まつもとさんのキーノートもそうだったのですが、今回RubyKaigiに参加し、大きな世界観を持ってそこに向かっていく人々の姿を見て、それは途方もないけど格好いいことだなと改めて思いました。
いつか自分の中にもそんなものが生まれてくるような活動ができたらいいな。
がんばります。
その他に書き残しておきたいこと③ いろいろ
他にも塗り箸の話(ちりとてちん)とか中央総武線.rbの話とかハンナ・アーレントの話とか書き足りないのですが、いよいよ書き終わる気がしないのでこの辺りで筆を置きます。誰かどこか飲み会の場ででも訊いてください。