表題の通りRactorを用いたproperty based testingの並列実行についてRubyKaigi 2024で発表してきました。かつスピーカーとしての参加は初めてで、いろいろ稀有な体験ができて総合的にはめちゃくちゃ楽しかった。
発表内容について
"Unlocking Potential of Property Based Testing with Ractor"という題で、property based testing(以下PBT)において発生する小さくて大量のタスクをRactorで並列実行させるというアイデアと仮説検証の結果を報告しました。
日本語のテキストで概要を知りたい方はTechouse社の記事をご参照ください。登壇者の自分が発信したどのテキストよりも丁寧にわかりやすくまとめてくださってます。この場を借りて感謝いたします!
発表に至った経緯
僕は普段から並行並列処理をガンガンやっているわけではないものの、Fintech事業従事者としてテスト設計や手法にはそこそこ関心があり。PBTに興味を持ったのは『実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう』を昨年に読んだのがきっかけです。他言語のライブラリを動かしたりコード読んだり、Rubyだったらどういうふうに書けるだろうかと試したりしていました。
2023年末頃、@osyoyuさん (前年のRubyKaigi 2023 speaker) が弊社SmartBankに入社して「探すぞネタ・書くぞプロポーザル」の会を自主的に開いてくれ、傾向と対策・新規性のありそうなトピックについて社内でディスカッションが行われました。巻き込みがすごいですね。
そこで交わされたトピックの1つに3.3.0から導入されたM:Nスケジューラーがあり、Rubyにおける並行並列処理・Ractorの現在地等に興味を持ちました。「Ractorのユースケースを見つけたり、実際に使ってみてのフィードバックができたら面白いと思う」という発言もあり、PBTとRactorを組みわせるアイデアが浮かび、1月に急いで初期実装とプロポーザルを書き上げました。
とにかく書かれたコードがなければRubyKaigiでは採択されないとは聞いていたのでrepositoryにはラフ実装とちょっとしたREADMEを置きつつ、プロポーザルで構想を語りました*1。
"Your proposal for RubyKaigi 2024 has been accepted" !
— ohbarye (@ohbarye) 2024年2月20日
メール見てから動悸と手汗が... がんばります
晴れてacceptedのメールを受け取ったときはマジで手汗と動悸がすごかった
自分とRubyKaigi
手汗と動悸の"理由-ワケ-"について。
僕が初めてRubyKaigiに行ったのは2015年12月、Ruby歴4ヶ月ぐらいで「そろそろRubyわかってきたかも!」と思い勇んで訪れたら「僕の知ってるRubyと違う...」と呆然とした記憶があります。そのときはスピーカーとして壇上に立てるとは夢にも思っていませんでした。
その後、Quipper (ohbaryeの前職) の同僚が過去のRubyKaigiに登壇していたことを知ったり、在籍中に同僚が登壇したり、身近に"本物"がいることがとても良い刺激となりました。彼ら/彼女らへの憧れもあり、RubyKaigiへの登壇を目標とすることに現実味が湧いてきました。
そして今年、上述のような経緯で提出することになったわけです。
社内でいろいろ教えてくれた@osyoyuさんもプロファイラトークでシュッと採択され、その後に@chobishibaさんもクリエイティブコーディングネタがLTで採択。2人とも「この人といえばコレ」っていう持ち味があるしトークではその武器で沸かせていて本当にすごい。余談ですが@osyoyuさん, @chobishibaさん, @ohbaryeはSmartBankでは同じチームで働いており、RubyKaigi 2024 speakersだけで構成されるドリームチームが爆誕しました。
以下は@chobishibaさんの記事からの引用ですが全く同じ気持ちです。
なんか勝手にRubyKaigiの登壇を自分から遠いところのものに置いてたので。環境が与える影響の大きさを身をもって感じてます。
もともとRubyKaigiに登壇する/した人だけが集まっているのではなくて、良い環境が人をRubyKaigiに登壇させている。SmartBankには良いピアプレッシャーが存在する。
宣伝: SmartBankはRubyistを積極採用中です
登壇のふりかえり
発表当日のDay 1、宿泊しているコンドミニアムの火災報知器が鳴り響いて朝を迎える。なんで?他の宿泊客がピザを電子レンジで燃やしたらしい。なんで?
通訳打ち合わせとキーノートの聴講を終えてのランチブレイクでは正直まったく余裕がなく、最後のリハーサルをしたり、少しでもカロリー摂るか...とバヤリースを飲む。キーノートでRactorに触れられていたので、折角なので内容に織り込みたい!と直前になって掴みに入れたりしてました。
発表中の記憶はあまりないけど、さすがに10回ぐらい通し練習をやったので詰まるシーンはほぼなかったと思います。たぶん。
発表中に計測していたストップウォッチでは練習よりも5-10%ぐらい速く進行しており、予定よりも早口になってしまっていたか、どこか飛ばしてしまったか...。いずれにせよ無事に終わり、直後には@ko1さん@hsbtさんや昔の同僚に挨拶してもらえて嬉しかったです。
朝はホテルの火災報知器が誤作動してめちゃ騒音で苦しんだところから始まったが、無事に #rubykaigi 1日目…登壇を終えられてよかった!! pic.twitter.com/fq11U9VcXy
— ohbarye (@ohbarye) 2024年5月15日
Small hall、収容人数300人だし立ち見もいたし、全然スモール感なかったよ
通訳さんとの打ち合わせ
今回5年ぶりぐらいに同時通訳がある発表を行うにあたり、以下の記事を読み返したりしてました。
まぁ普通の登壇と変わらない部分が多いのですが資料提出後の編集に若干気を使ったり、ふだん使わないスピーカーノートに通訳さん向けのメモや用語集を書いたりしてました。これはこれで思考が整理されて良いものですね。
これまでスピーカーノートを全く使わずに資料作成&発表してきたが今回は同時通訳がいるので共有用に書いてみた。
— ohbarye (@ohbarye) 2024年5月6日
すると、話の流れをイメージしやすくなり、スライド間の重複や過不足に気づきやすくなり、これはひょっとして思考を整理するのに優れたツールなのでは。
なぜオレはあんなムダな時間を...
通訳さんとの打ち合わせで面白かった会話・フィードバックとしては...
- けっこう喋るの速いですね(僕で速いなら某さんはどうなってしまうんだ...)
- 今回は30分の発表を6分割して交代しながら通訳します(やはり通訳は脳の負荷すごいんだ...)
- カタカナで表現できる英語はカタカナで発話してくれると助かります(並列という発話をparallelに訳すのは慣れないと大変。発表者がパラレルって言うほうが良い)
- 内容の英語が正しいかどうかは通訳者はほぼ見ていない、書いてあるものが100%正だと思って訳しています(そうなんだ)
もらったフィードバック
本当に色んな方からたくさんのフィードバックをいただきましたが、発表に関連してこの場で特に取り上げておきたいのは@hsbtさんから頂いたものです。スライドの最後で「Ractor非対応なコードが多いけどどうすればいいのか?」という疑問を表明したのに対し、クリアなヒントやアドバイスをもらいました。
- Ruby organizationのレポジトリにはたまにRactor対応のpull requestが来ており、良さそうならマージしている
- テストにおいてRactor対応していることを明示的に示す仕組みはtest-unitならすでにある(RubyKaigi Takeout 2021とtest-unit - Ractor対応とdebug.rb対応とCoreAssertionsの置き換え)。ruby/rubyのRactor関連テストの書き方が2通りあってどっちかに寄せるか?という話が最近でているらしい。
また、@ko1さんにもいろいろ教えてもらい、Ractorと対比されるThreadについて印象深い話も聞けました。今でこそ様々なgemがスレッドセーフということになっているが確実にセーフである保証はしてない。スレッド関連のバグが見つかって修正しただけにすぎず、今後起きない保証はない。という感じだったかと思います。
コミッターから直接フィードバックをもらうだけでなく、まだどこにも文書化されていないことやコミッターの頭の中にあること、進行中の話題について教えてもらえるのは本当にRubyKaigiならではで、得難い経験でした。
廊下や懇親会
話したことが多すぎてうまく消化できていない。とにかく言えるのはとても楽しかった。
これまでもRubyコミュニティの一員でいるつもりでしたが、今回のRubyKaigi登壇を経て、より強い結びつきを感じるようになりました。いろんな文脈が見えてきたことでスピーカーや来場者の言葉がよく"理解-ワカ-"るようになったのもあるし、発表という形で自分から何かを還元できたことで心境の変化があったように思います。
また、前職Quipper時代の同僚と集まり久闊を叙したのも心に残りました。前職ではテクニカルな領域で活躍できた記憶があまり残っておらず、このようなカンファレンスで壇上に立つ僕の姿はちょっと新鮮に見えたかもしれない。
沖縄のこと
滞在期間は会期に前後1日プラスした4泊5日。沖縄はだいぶ昔に家族旅行で来た以来でどうやら20年ぶりだったらしい。
那覇市近辺の飲食グランプリを発表…
— ohbarye (@ohbarye) 2024年5月18日
食部門はステーキヒカルと牧志そば、飲部門はrokkan Coffee CreatorsとA&W!! #rubykaigi pic.twitter.com/UCGj3UZqzC
鍾乳洞のつらら石や石筍は数万年かけて形成されるらしい
— ohbarye (@ohbarye) 2024年5月18日
20024年の #rubykaigi の頃に成長を見に来たいな pic.twitter.com/y4Kz2PZgWB
玉泉洞付近の施設でハブvsマングースを見た記憶があったのですが、今や動物愛護観点で終了になったとのこと。
時間の都合上すみずみまで満喫できたとは言い難いものの現地の風土や食に触れられて良かった。
沖縄にいた動物シリーズ
2ヶ月ほど前からプライベート・マインドシェアの大部分の時間をRubyKaigiに割いていたため、」終わったあとは空っぽだな、何しようかな」などとDay1の登壇直後には安寧の日々を想像していました。いざ終わってみると変わらずRubyに関するあれこれを早速やりたくなっており、これがkaigieffectか...と沁み入っております。
この情熱を忘れず、来年のRubyKaigiにも何かしらのハックを引っ提げて行くためにも、再び牙を研ぐ日々に戻ります。
*1:RubyKaigiまでには大部分実現できたのでセーフ