ウォンテッドリーの原 将己です。 RubyKaigi 2024 に参加してきました。
ここでは今回のイベントについて、時系列で一通り、だらだらと記録に残しておこうと思います。
RubyKaigiについて
RubyKaigiは、プログラミング言語Rubyに関する国際会議です。1年に1回、日本国内の都市で開催されています。
RubyKaigiの特徴は大まかに言うと以下の通りです。
- CRubyのコミッタが招待され、プログラミング言語の本体や処理系に関するトピックが多く取り扱われること。
- 逆に、Ruby on Railsなどの応用に関する話題は最小限に留められていること。
RubyKaigiとウォンテッドリー
ウォンテッドリーはRubyKaigi Takeout 2021からスポンサーを続けています。また、過去にRubyKaigi 2014から2016までの間もスポンサーを行っていたようです。
今回はウォンテッドリーはプラチナスポンサーとして協賛し、以下のようなメンバーで参加しました。
- ソフトウェアエンジニア 4名
- うち2名: メインセッションでスピーカーとして採択
- うち1名: LTでスピーカーとして採択
また、カンファレンスによっては、スポンサーになること自体が難しかったり、スポンサーになってもブースなどの十分な露出機会を得るのが難しいパターンもあるようです。噂によると、今回のRubyKaigiでは無事に希望するスポンサー全員にブースが割り当てられたようです。
Proposal提出と採択
ここ数年間、ウォンテッドリーはRubyKaigiのスポンサーになった上でエンジニアを派遣していますが、今回は内々の参加要件として以下が設定されました。
- 発表のプロポーザルを提出すること (結果として通らなくてもスポンサーとして参加できる)
- スポンサーブースの運営に協力すること (出展する冊子の制作も含む)
ただ、プロポーザルを書くのは中々にハードルが高かったようで、参加希望者が思ったよりも増えなかったようです。私は1月12日に鴛海さんから個人的に参加を打診されたところ、たまたまよいネタがあったのでその場でProposalを書き上げて提出して要件を満たしました。
その後、2月21日に採択の通知が来たので、スポンサーの準備と並行して発表の準備も進めることになりました。
Proposalの書き方
なお、Proposalを書くにあたっては、まず前年の内容に軽く目を通しました。 (実は私は今回がRubyKaigi初参加でした) その結果、RubyKaigiにはおそらく以下のような傾向があるように感じました。
- Rubyの言語仕様や処理系にまつわる話題が好まれていること。
- Ruby on Railsの話題やサービス作りなど、より応用に近い内容はそれほど見られないこと。
- 発表者自らが手を動かした発表がほとんどであること。
このようなコンセプトに合う内容で、2024年1月時点で発表できるものを検討した結果、以前に作ったgemの話を提案することにしました。これは残念ながらRubyそのものの話ではありませんが、比較的そのレイヤに近いハッカー好みの内容であり、自分が手を動かして作ったものだと自信を持って言えるものなので、この会議には比較的フィットすると判断しました。
準備
全般
スポンサーブースについては、参加経験のある鴛海さんが基本的には受け持ってくれることになりました。また、RubyKaigiを盛り上げるためのプレイベントは @fohte が準備してくれたため、細かい手伝いを除くと発表準備に集中することができました。
航空券と宿泊についてはHRの中辻さんが手配していたため、こちらで特にするべきことはありませんでした。むしろ、格安チケットのため日程を変更できない点が若干あだとなってしまっていましたが、ブースの運営や発表の観点からは何とかなると判断してそのまま進めることになりました。
RubyKaigiでは、RubyKaigi本体以外にも各社が企画する周辺イベントも見所の一つです。過去の参加者から、そういったイベントへの参加も重要とのアドバイスを受け、最終的に以下の3つに参加することにしました。
これらの大部分はSpeaker/Committer向け参加枠が設定されていたり、Speaker/Committerの申し込みが不要だったりして、プチVIP気分を味わうことができました。
頒布物の準備
弊社は技術書典の経験をもとに、各種イベントでも技術書を制作して頒布しています。従来、以下の3種類の刊行物が候補としてありました。
今回、従来のようにTech Book Miniを制作する余裕がなく、いっぽうでWantedly Engineering Handbookがぶ厚くなりすぎて沖縄での頒布には向かないということで、Wantedly Engineering Handbookの縮小版を作って頒布することにしました。
発表の準備
発表は(勢い余って)英語で申し込んでいました。通訳のための事前提出がなく締切が緩い反面、十分に準備しないと英語の負担もあわせてグダグダなセッションになる可能性があり、より緊張感をもって臨む必要がありました。
まず、スライドは日本語で作ってから英語で作り直すという手順を踏みました。英語ではじめから作ったほうがよりネイティブになるという考え方もありますが、何も無いところからスライドを作る部分の心理的負担を減らして取り組みやすくするために今回はこの方法をとりました。
その後、スピーカーノートにスクリプトを書き込んで練習をしたのですが、ここで大坪くんから以下のような指摘がありました。
- トーク中で早口になる場所があり、その部分が聞き取れない。
- 構成についての指摘
- 元々の構成では、WHAT→WHY→HOWという王道的な順序になっていたが、今回の事例ではWHY (なぜこのライブラリを作る必要があったのか) は一般論として納得されやすいので後回しでいいのではないか。
- また、WHAT部分でHOWに近い詳細な話が混在していてわかりにくい。
これらの指摘を踏まえて、以下のように大幅な変更をほどこすことにしました。
- WHAT → HOW → WHY の順序に入れ替える。
- スクリプトを思い切って単純化し、非常に重要なキーワードのみを話すようにする。
- 1文はなるべく5単語程度、多くても10単語以内。
- 1スライドはなるべく1文、多くても3文以内。
発表のうまい人の中には、スライドを非常に単純化した上で口頭での説明に集中させるタイプの人もいて、これはこれで良い発表の類型であると思います。ただ、私はスライドは「後で見返す人のためのもの」でもあると思っているので、スライドには比較的情報を詰め込むようにしています。そこで、上記のような制約も踏まえ、今回は役割を逆転させることにしました。つまり、音声では核心だけを説明し、周辺情報は視覚情報から伝えるという形にしました。
余裕を持って準備していたつもりが、思わぬ指摘や割り込みにより当日まで頑張るはめになってしまいました。
出発前の準備
ブース出展の準備
弊社にはスポンサーブース出展用のキットがあり、基本的にはこれらのキットをそのまま会場に送ればブースを設営できるようになっています。中には幟やスタンド、机に敷くためのロゴ入りの布、汎用のスケッチブック、マーカーペン、人数カウント用のシールなどが入っています。
加えて、今回のイベントに合わせた内容のスチレンボードを事前に準備しました。これは、冊子の頒布時に来場者の皆さんにアンケートをお願いするためのQRコードと、人数カウント用のアンケートボードの2種類でした。
また、今回はソフトウェアを展示する予定があったため、ディスプレイも会場に送ることにしました。このあたりは運営側の指示に従う形で、人事の側で手続きを行ってもらえます。
発送してしばらくした後、運営から連絡があり、沖縄での宅配便(ヤマト運輸)の輸送の遅延が発表されていることがわかりました。我々は少し余裕を持って発送していたため、それほど不安なく当日を迎えることができました。
個人の準備
個人で持っていくものとして、以下を準備しました。
- 社名をむっちゃ宣伝するための、ロゴ入りTシャツ
- 万が一仕事をする必要があったときのために、ノートPCの目隠し用のフィルター
- 名刺
また、江草くんはデモのために必要な機材一式を準備していました。
前日
前日はやや遅めの飛行機で那覇に向かいました。
到着時はちょうど土砂降りで、バス停からホテルまでの間でスーツケースが部分的に浸水してしまいました。
さいわい宿泊先は一種のコンドミニアムのような形態で、最近の住宅向けにあるようなお風呂で浴室乾燥を行うことができたため、濡れた衣服は何とかすることができました。
近場に夕飯を食べにいこうと話していたのですが、もう1度雨の中に繰り出す気力がなかったため、Uber Eatsを頼むことになりました。
1日目
ブース運営
本来は前日にブースの設営をするのですが、スケジュールが判明した時点で飛行機のチケットが確定してしまっていたため、1日目の午前中に設営を行いました。
入場時に名札とシャツをもらえたのですが、このシャツは「かりゆしウェア」という沖縄のアロハシャツで、通常のTシャツよりも凝ったものでした。個人的にはTシャツは余らせがちなので、(おそらく少しコストをかけて)グッズをアップグレードしてくれるのはありがたいです。名札とシャツには色があり、Staff枠は緑、Committer枠は黄、Speaker枠は青、一般は赤といった感じになっていました。これにより存分にSpeakerアピールをすることができました。
ブースは、事前に動線設計をした上で設営したのですが、そこまで想定通りにはいきませんでした。そもそも、会場全体として順路が指定されているわけではなく参加者は自由に動けるので、そこまで決まった動きを想定できるものではありませんでした。なお、今回アサインしていただいたブースは「小スタジオ」という、本来は舞台の練習などを想定した部屋の側面を解放した空間にありました。ブースはこの空間に入ってすぐのところで、2階に向かう人の目に留まりやすく非常にいい立地でしたが、反対回りもできてしまう構造なので、それも多少影響していたかもしれません。
考えてみると、そもそもコンテンツ過多なのかもしれません。今回は以下のようなコンテンツを用意していました。
- Tech Book既刊と各種ノベルティ (無料)
- Handbook Mini (アンケートに答えて入手)
- 人数カウント用の来場者アンケート
- 江草くんの発表の展示
お昼
公式からはお弁当は十分数ないとのアナウンスがありました。これは単にキャパシティーの問題だけではなく、みんなで集まって地元のお店を楽しんできてほしいという意図もあるのかなあとは思ったのですが、ちょっと忙しくてやってられなかったのでお弁当を何とか確保させてもらいました。お弁当のグレードはなかなか高く、おいしかったです。
2日目も同様、運営の意図はわかりつつも頑張ってお弁当を確保させてもらいました。
セッション
Marshalの話を聞きました。Marshalオタクとしては普通の話でしたが、SafeMarshalはなかなか偉いなと思いました。なお、私も過去RenovateのGitHub Packages対応のためにMarshalパーサーを導入する必要があり、RubyGemsがMarshalを使っているという話には聞き覚えがありました。
公式パーティー
公式パーティーは少し離れた会場で行われていました。そのため、運営側でチャーターしたバスがありましたが、荷物をどうするかは悩ましいところでした。メンバーのうち2人は荷物をホテルに置いてからタクシーで移動していました。
バーベキュー会場を貸し切るような形だったのですが、RubyKaigi参加者のグループがそれぞれに机を確保できるほどの余裕はなかったので、確保できなかったグループは他のグループのお世話になるような形でした。いい機会だと思う反面、若干気まずくも感じました。
このパーティーではコミッタの方や他の著名なスピーカーの方とも話す機会があり、なかなか面白い話ができました。
ホテル
ホテルに戻ってからは、自分の発表の準備の大詰め……のつもりでしたが、 @fohte のLTのスライド修正をお願いされたので付き合うことにしました。実際に相談に乗ってみると、結構英語のrephrasing案を思いつくし、そのrephrasingを説明するための文法用語もパッと出てきたので、自分って案外英語得意かも? と思ったりしました。
自分の分も何とかしたいところでしたが、体力が限界だったので潔く寝ることにしました。
2日目
ブース運営
他のメンバーは少し遅めの設営でもいいんじゃないかと言っていましたが、個人的にそれはどうかと思ったので勝手に早めに出て設営しました。
2日目はスタンプラリー企画が開始されました。これはスポンサーブースを回ることでオリジナルグッズ(ピンバッジ)が貰えるという仕組みになっていました。スポンサーにとっても出展の価値があるイベントにするための工夫としてよくできていて、2日目から開始するというのも凝っていると感じました。他にも、Afternoon Breakなんかもスポンサーとコミュニティーとを結びつけるための工夫だと感じました。
結果としては、開場からキーノートセッションまでの間にブースを訪れる人はそれなりに居て、この時間は比較的余裕があるためしっかり滞留してくれる人が多かった印象です。
その後、キーノートセッションが始まるくらいのタイミングで他のメンバーも来てくれたため、ブースは他のメンバーに任せて自分は作業用スペースに移動し、自分の発表の大詰めを行いました。
セッション
自分の発表の1つ前のDatadogの話を聞いていました。とはいえ、自分の発表のほうが大事だったので話半分でしたが。
自分の発表
先にお昼に接続確認を済ませておきました。会場 (C会場) では以下のような構成になっていました。
- ケーブルを接続すると、手元に用意されたディスプレイに画面が映る。
- 上記ディスプレイに移された画面が、音響・映像エンジニア側の判断でスクリーンにも複製される。スクリーンは発表者の両側に1つずつ。
- 休み時間中はRubyKaigiの案内スライドが映されていて、セッションの開始時に一瞬スピーカーを映してからスライドがフェードインする。
動画や音声を流す場合はもう少し詳細な打ち合わせが必要なようですが、今回はこれには該当しなかったので比較的シンプルに対応できました。
先述のように、私の今回の発表はなるべく単語数を減らして核心だけをはっきり伝えることを意図していました。そのため、今回の発表では Loud, Clear, Confident の3つの点を意識しながら話しました。
また、スライドをじっくり読みたい人のために、あらかじめスライドをSpeakerDeckにアップロードして共有しておきました。会場ではDiscordの発言が流れるようになっていたので、Discordにも流すようにしました。
実際の発表ですが、皆さんがとてもマナーよく聞いてくださったことで逆に反応の善し悪しがわからず若干不安でした。また、スクリプトを簡略化した結果、かなりゆっくり話しても時間が余ってしまい、スタッフの皆さんには予定外の対応を強いてしまってちょっと申し訳なかったです。一方で、質疑応答の時間を取ることができて、皆さんの疑問に色々答える機会になったので、この点では時間に余裕があったのも悪くなかったかなと思っています。
その後の懇親会などで、発表内容についてわかりやすかったというフィードバックを何人かからいただけたので、少なくとも一定伝わったと思って安心しました。
なお、自分の発表スライドはこちらです。
内容は、「YAMLを操作するライブラリの多くはコメントの情報を捨ててしまっている。そこで、RubyのYAMLライブラリであるPsychを拡張して、コメントを扱えるようにしてみた」というものです。
後日、公式ページにも内容が掲載されるのではないかと思います。
LTセッション
@fohte の発表があったため参加しました。ちょうどいい高さのやや左寄りの位置を確保できました。
LTは5分という短い時間ではあるものの、参加者の大部分が集まる中での発表となるのでインパクトは大きいなと感じました。
ここでの私の仕事は @fohte の勇姿を写真に収めることだったので、それだけは忘れないようにしました。
LTは非常に早口な人が何人かいて、自分の発表とは対極的だと感じました。 (もちろん持ち時間が全然違うのである意味当たり前なのですが)
焼き肉パーティー
2日目は各社で様々なアフターイベントが企画されていました。私は他のメンバーとともにLeanerさんの焼き肉パーティーに参加しました。
ここでは何箇所か席を回ったあと、最終的にコミッタやスピーカーが集まる強そうな机に何とか割り込んで自分の話をしてみたらjunk0612さんと話が盛り上がったので、行って良かったかなと思っています。
ホテル
この日はもうヘトヘトでしたが、何とかやることを済ませて寝ました。
3日目
ブース運営
3日目のブースの運営は2日目とほぼ同じですが、スタンプラリーは2日目に済ませてしまう人が多いこともあってか2日目ほどの忙しさはありませんでした。それでも立ち寄ってくれたありがたい方々には一通りブースの案内をしました。
スポンサーブース巡り
3日目になると多少暇ができたので、スポンサーブース巡りをすることにしました。
こちらもスポンサーを設営している都合上、やはり他のブースでも真面目に話を聞かねば……という気になってしまい、20個集めるのにも結構時間がかかってしまいました。
普段お世話になっているJetBrainsさんのところや、退職者がいるところ、ウォンテッドリーと業務上連携しているところ、お互いにサービスを利用しているところなど色々と関係のある会社もいて、いい機会でした。
沖縄そば
この日は @S_H_ さんのお誘いがあり、 @fohte を含め3人で沖縄そばを食べに行くことにしました。ブースで待機してくれるメンバーのために先に弁当を確保してから出発しました。
帰りは @s01 さんらのグループと合流しました。
セッション
前日にお話したjunk0612さんの発表を聞いていました。これは江草くんの発表の前なので、座席の確保も兼ねていました。
江草くんの発表は大盛況でした。会場Bが満員になってしまい、知り合いが入場できなかったりもしました。座席確保できてよかった。
一番ちょうどいい高さのど真ん中を確保できたので、写真撮影に徹しました。もちろん内容も面白かったです。あとで周りの話を聞くと、カセットについて気になっている人も多かったようです。これは様々な誤解を避けるため「念のため」オフィシャルな場では言及しなかったとのことです。実際に使った技術はやましいものではないので、本人に直接聞けば詳しく教えてもらえると思います。
基本的にはブースを見守る係をしようかと思っていましたが、Matzのセッションはみんな聞く流れだったので聞きに行きました。次回は松山でした。ちなみに私は一瞬松山と松本を混同してました。
ブースの撤収
最後のレギュラーセッションが終わってからMatzのセッションが始まるまでの間にブースの撤収を行っていました。このタイミングで運営が荷物発送用のブースを設営してくれているので、伝票に記入して荷物を準備していきます。
この段階で、荷物のうちのひとつのファスナーが壊れてしまって大変だったのですが、たまたまメンバーのひとりがFastlyのブースで手に入れていたドライバーを使ってファスナーをこじ開けて一時的に事なきを得ました。Fastlyさん、ありがとうございました。
アフターパーティー
アフターパーティーはmovさんが主催するものが事実上の公式パーティーに近い位置づけになっていたので、そちらに参加しました。これは国際通り内の商店街を模したフードテーマパークを丸ごと貸し切るという大胆なものでした。
フードテーマパークの2階にはカラオケ居酒屋形式のお店もいくつかあり、そこでは実際にカラオケを歌うこともできました。ここではリョクシャカならOK理論を駆使してアニソンを1曲熱唱しました。
ここでも適当にフラフラしていたら、私の発表を聞いてくださった方に何人か声をかけていただいて、話が色々盛り上がりました。
その後、宿泊先の近くだったpixiv主催のクラブイベントにも立ち寄りました。光と音で身体感覚を麻痺させて楽しむ空間はそれはそれで楽しそうでしたが、イベントを通してずっと体調がよくなかった身にはきつかったので早めに切り上げました。こういった、素人からするとちょっと怖そうでなかなか足を伸ばしにくい空間に「見知ったコミュニティーの人が集まっている」という保証つきで入れる機会自体はいいものだと思うので、もし来年以降もあるようならぜひ参加してみるといいと思います。
4日目
会期は3日で終わりですが、我々は土曜日の夜遅くの便だったため、4日目も沖縄を見て回りました。
国際通り観光
午前中は国際通りでお土産探しをしました。
- 沖縄アロハシャツのお店で服GET
- 紅芋タルトのお土産GET
- 観光センターの目の前にあったカルビーのお店でご当地お菓子GET
加えて、私は昔小学校の先生が持ってきてくれた塩せんべいこそが沖縄のお土産No.1だと信じて疑わないため、これを売っているお店も探しました。とはいえよくわからなかったのでとりあえず観光センターの人に聞いたら、多分地元の小売店に売っているとのことで、ドンキかマックスバリュにあるだろうと紹介してもらえました。結局ドンキにあったので目的は達成できました。
ステーキ
会期中は忙しくて食べに行けなかったステーキを食べに行きました。会場のすぐ近くなこともあってRubyistがずっと出入りしていたようでした。
DMMかりゆし水族館
ステーキを食べたあと、松山地区に別れを告げて那覇空港に向かいました。モノレールに乗りました。
那覇空港で預け入れ手荷物を手放したあと、バスでDMMかりゆし水族館に向かいました。
DMMだけど艦これではなくアズールレーンとコラボしてました。
中は水族館+チームラボ要素のあるメディアアートみたいな感じで、それがうまく融合できているかできていないのかわからない絶妙具合が良かったです。また、アズールレーンのキャラクターの看板が唐突に出てくるのもちょっと面白かったです。
ウミカジテラス
バスでウミカジテラスという場所に向かい、海と空港を眺めました。
猫がいました。猫はお店のまわりをうろついていて、耳に切れ込みがあったのでおそらく処置済みの野良だと思います。
ハンバーガーのお店でハンバーガーを注文したら、量がなかなかでちょっときつかったです。
東京へ
時間が近付いてきたので空港に戻り、ラウンジで少し時間をつぶしたあと搭乗しました。
搭乗ゲートでも明らかにRubyKaigi勢っぽい人が結構いました。
羽田から京急に乗ったあともRubyKaigi勢っぽい人がいました。
最後に
RubyKaigiに参加しようと思い立ったのは半分はノリでしたが、結果としては参加できてとても良かったと思っています。というのもRubyKaigiは、いかに言語の開発者とコミュニティー、そしてスポンサーを結びつけるかという部分について非常に工夫を凝らしていたからです。
RubyKaigiのプレイベントから本番に至るまでに何度か聞いたのが、「RubyKaigiの発表は全然わからなくてもいい」という話です。これは以下の2つのことを含意しているととれます。
- RubyKaigiの内容は難しいので、これをきっかけに勉強してほしい
- RubyKaigiの内容自体がわからなくても、コミュニティーイベントに参加することで得られることは色々ある
私はプログラミング言語のオタクの一人なので、別にRubyKaigiの発表は割とわかる方ではありますが、このようなアピールが随所で行われているというのは注目に値します。つまり、自然にしていたら言語処理系開発になんか全然興味がなかったかもしれない人と、もしかしたら言語を作るのに精一杯でそれらの利用者とは接点がなかったかもしれない人を繋げることに成功しているのです。
加えて、すでにいくつか例を説明したように、スポンサーに対するサービス精神にも大いに感銘を受けました。これが成熟したイベントの知恵なのだと感じました。他にもネットワーク運用などイベントの様々な側面が滞りなく進んでいる様子を目撃して、大変な努力の成果だと感じました。
私は将来、最強のプログラミング言語をもって世界を支配したいと考えていますが、そのためにコミュニティーを取り込む戦略を考える上で大いに参考になると思いました。 (ここは半分くらい与太話だと思ってもらって結構です)
今回は見事Speakerに採択されましたが、これは必ず再現性のある出来事ではないと思うので、来年参加する機会にそなえて気を引き締めて色々成果物を準備しておきたいなと思いました。
また、最後に何人かの方々に感謝の意を表明します。まずRubyKaigiの運営およびスポンサー、参加者の皆さん、そして地元の方々、ありがとうございました。次に、弊社で一通りの準備を手伝ってくれたのに( の都合で)沖縄に来れなかった中辻さん、ありがとうございました。また、一緒に来てくれた3人のメンバーもありがとうございました。体調が優れなかったり、発表の準備で忙しかったりする僕の状況に合わせて色々配慮してもらったことを感謝しています。また、鴛海さんははじめからリーダーとして雑務の多くを引き受けてくれていて、鴛海さんのおかげでブースのことをあまり気にせずに行動できたと思っています。それから、RubyKaigiで席を外している間、増えたであろう負担を受け止めてくれたチームの皆さんもありがとうございました。
関連記事