共沸

思うところがない

Ruby知識ゼロから初参加したRubyKaigi 2024レポート

TL;DR

楽しかった!

本編

おはようございます。手札事故(twitter:@hand_accident)と申します。

Ruby知識ゼロから初参加したRubyKaigi 2024レポート、略してルゼロ*1という感じでやっていきたいと思います。

< Day 0

自己紹介でもしとくか。生まれ育った愛媛県松山市*2に帰って非IT企業でパソコン係をやっている過程で、すべてが個人開発の労働環境で趣味全ブッパ技術選定をした結果HaskellとNimを書くようになりました。すこしSvelteもします。

Rubyは名前を聞いたことがあるしちょっとニッチなPythonライブラリ探そうとしたら時々検索にgemが引っかかってそちらにはあるのねえという感想を抱くなどしていましたが何の因果か触ってみるには至らず、沖縄に来て初めてコードを見たまであります。

愛媛県松山市で趣味の音楽ゲーム(DDR)に高じていたところ、ちょうど移住してきた sylph(https://x.com/s01) さんとゲーセンで知り合い、RubyKaigiの存在を認識したのが去年のこと、今年はめでたくsylphさんがspeakerやるということで、speakerやるなら聞きに行くかァと有給休暇を申請してチケットを取りました。流石にRuby一切触ったことないので有給休暇で行くつもりだったのですが上司のおかげで出張扱いになりました。やりましたわ。ありがてえ。帰ったのでレポート書かなきゃ……マークダウン版は帰ってきた月曜に書き上がってんだよなああああああMicrosoft Wordが憎い!*3

飛行機とKaigiチケットは取ったものの、この時点で宿泊先は一切決めておらず、快活クラブかなあとぼんやり思っていました。快活好きだし。

Day 0

今のうちに目に焼き付けといてもいいと思います。松山空港のめちゃくちゃ目立つ位置にある"やってる"オブジェです。

sylphさんと合流して飛びました。

僕全然飛行機乗らないんですよね。前に乗ったのが修学旅行とかだったので実にン年ぶりというかほぼ10年でありませんこと?時の流れくん……?

それだけのブランクがあると蓄膿持ちなので耳抜きが地獄になるということを完全に失念していて、ちょうど風邪をこじらせて治ってんのに蓄膿だけ長引いてるタイミングで気圧差を浴びたため、内耳がとんでもないことになり、

離陸!そして空港でソーキそばを流し込んでいる間もほぼ行動不能になっていました。

午後はotoge.rbと称して宜野湾のラウンドワンで集まると聞いたのでノコノコ着いていきました。

いま思うと"濃いメンツ"だったなと思います。yui-knkさんいらっしゃったし。

メモ: タクシー代などを愛媛県松山市でsylphさんにお返しする。*4sylphさんありがとうございます。

Day 0のdrink upは何もかも予約が間に合わなかったので、流れでクルーズの受付まで来たところキャンセル待ちにも失敗しました。

ここで駄弁っていたところ宿の話になり、快活の予定というとめちゃくちゃ驚かれ、ちょうど欠員埋めを募集していたやんちゃハウスにお邪魔させていただくことと相成りました。まじで感謝です。

Asakusa.rbのdrink upは席に余裕があるということで途中参加しました。

各テーブルに泡盛据えてあるのが面白かったです。あと生活の中で英語喋る機会が本当にないと自分の英語力について過信おもってた1000倍言葉が出てこないですね。

帰りめっちゃ雨で足が滑って縁石につんのめって左腿を軽肉離的傷(かるにくばなれてきいた)め、ずぶ濡れでやんちゃハウスに帰りました。

10人入っても5LDKは広くてすごい。めちゃくちゃ快適。

これが快活だと始まる前から終わっていた可能性がある。本当に感謝です。

Day 1

起きました。起きるのって難しいですからね。

起きるのが難しくて大学辞めたまである。

Ruby一切書いたことないけど1日くらいセッション聞いてたらシンタックスとか雰囲気把握できるかなと本当に情けない準備で過ごしていたら、初っ端のキーノートがtompngさんで異常シンタックスを山程浴びることになり、"顔"になってしまいました。%%顔%かも。

というかクワインってそんなにポンポン出てくるものではなくて……Showクラスがあるからクワインが安い言語使っといてなんだけど……解説されたら意図はわかるけどその発想に至る過程がなおわからない……自分で消したソースコードを誤り訂正してeval?????……わぁ綺麗……という感じでした。

放心してたらバイソンキラー・パーサーモンスターことyui-knkさんが出てきて、これまた圧倒的でした。昨日ひたすらDDRやってたこの人喋るとこうなるんだという感嘆ですね。むしろRubyistのみなさんが知ってるyui-knkさんはこっちなのかという感慨。

パーサジェネレータについては勤怠管理エクセルにコピペする用のCSVを吐き出すDSLを書こう!!!!と思い立ってLark*5を触って、でもなんか動かせた範囲で作ったものが(セミコロンが嫌いでPythonやNimやHaskellをやっているのに)あろうことかセミコロンまみれになった絶望でTrifecta*6で書き直すなど、なんかおれが至らないゆえにままならんものという印象が強くて、ぶっちゃけ苦手意識がものすごいです。なおさらそれを作る側となれば想像も及ばない。

そんななかでもまあ他のセッションもそうですけど、人がその好きなものについて全力で熱弁している姿というものは感じ入るものがあります。バトル漫画が概念バトルに傾いてきてわけわかんねえことを全員が真剣に喋ってるのを読む気持ち。西尾維新とか好きそう。好きですよ!?みんな好きじゃん!クールに熱いやつ!

タイトルにある通りのthe grand strategyがドーーーンと出てきたときなんかまじでドーーーーンって書き文字が見えましたね。

午前中2個聞いただけで脳みそからめちゃくちゃ汗がかかれ、昼飯をモリモリ喰らい、午後を聞きました。

黒曜さんのセッションを聞きながら急いでRBSについてググりました。Pythonのタイプヒントがバージョン上がるたびにブチブチ仕様が変わって結局書きづれえのを経験していたので、TypeScriptのdファイルみたいに別ファイルなのは一理あるなあという気持ちと、ファイル数膨れるの大変そうという気持ちが両方あります。HM型推論最高!やっぱ型って書きたくないですからね。Nimみたいに変数宣言時に型のデフォルト値を既に入れてもらえるとか、そういうリターンが相当無いと基本的にストレスという気持ちがある。

人間がやりたくないことは機械がやるべきなんだよなあと再確認しました。LLM元年から数年経ったのでそのうちなんとか……

gooseギャグ連打まじでよかったです。

脚が痛いのもあるが異様に濃密な話を聞き続けるのは思ったより体力を使うものですね、マルチスレッドで動くぐらいプロファイラーのオーバーヘッド削る話(マルチスレッドで動くぐらいプロファイラーのオーバーヘッド削る話!?)とかASTをパターンマッチングにかけて最適化する話(ASTをパターンマッチングにかけて最適化する話!?)とかがメモには残っているが意識が曖昧です。まじでもったいないことをした。スライド読んで復習しています。

オフィシャルパーティーは流石に予約できたので、そこそこに酒を飲みながら海風に紙皿を吹き飛ばされながら肉を食い、ハウス(テラ)へ……

普段無料宴会と聞いたら学生みたいな飲み方になってしまうのですが、さすがに自制心が働きました。午前様でこの勢いでセッション聞けねえよアドレナリンが足んねえ

Day 2

起きました。起きるのって難しいですからね。

通信まわりは全然わかんないのでキーノート観て「なんかヤバそうなことしてんねえ、あっ音が良い」というような感想を抱きながらボケーっとしていましたが、Time.nowを書き換えるのがオーバーキルなことはなんとなく雰囲気でわかりました。毎フレームHTML吐かせて安定して60FPS出すの多分すごい。

ydahさんの「parse.yの開発体験を上げる」というセッション、最初は「parse.yの開発体験とは……?????」と聞いていましたが、なるほどここまでリッチになると別物ですね。pcreとオニグモくらい違う。構造化という鉾を突き刺すとかなり良くなりそうというのは門外漢なりに納得しました。

ブース全然回ってなかったのでこの日はそこそこセッションを休んで回りました。スタンプラリーという言い訳があると話しかけやすいですね。天才。

これは3日目に撮ったBeingさんのブースの様子ですが、結構Haskell書き(しかも業務で)が居て嬉しかった。NimはRubyやる人が触る導線上にないからしかたないですね。まあNimにたどり着くルートが他にあるかというと疑問ですが……。

私はPython触って速度が足りなくなってNimに行きましたが、大抵の人はPythonで満足してしまうし、Pythonで満足できない人は大抵Pythonシンタックスもろとも嫌いなのでみためかなりPythonっぽい構文の言語やりたくなさそう。 UFCS*7のおかげで書き味はだいぶ違うとはいえそもそも見向きもされなければそこまで体験できないし……。

APL遣い居たんですね(APL遣い居たんですね??????????)

StoresさんのとこのEnbuggingクイズ難しくて面白かったです。「ソースコードをなるべく短い編集距離で書き換えて指定されたバグを出すパズル」でのバグ起こしが生まれて初めて書いたRubyになりました。それでいいのか?

動的言語だけあって未定義変数のnilとかpの返り値とかかなり勉強になりました。ゲーミフィケーションされていると全力でリファレンス読みますねこれ。ほんで公式日本語リファレンスの読みやすいこと読みやすいこと本当に素晴らしい。

結構アグレッシブにカッコ省略できるのいい書き味ですね。パーサーに負担が行ってるのも宜なるかな

udzuraさんのmrubyからwasm書かせるやつを聞きました。ベンチとか現状厳しいらしいですけどバイナリサイズちっちゃくてインポート・エクスポートが楽というのはすっげえなあという気持ちで聞いていました。今(5/27)思うとこれってブラウザをマイコン扱いしてるってことですよね(判断が遅い)。すご

mametterさんのTypeProfのセッションは、TypeProfのデモ、特に行間に推論された型がブワッと浮き出てくるやつはとても感動しました。というのもHaskellのLSPがHSLになってから……なので結構最近なんですが、シグネチャ書いてないtop bindに対して浮かび上がるようになって、かつクリックすると具現化するようになり、開発体験がまじでよくなったからですね。多分Purescriptのほうが早かった。型って書きたくないですからね。本当に嬉しい。これがRubyでも同じようにやれるとなるとRuby書いてみよっかなあとなりますね。

そしてこれを聞きに松山から飛んできた、sylphさんのAdding Security to Microcontroller Ruby略してASMRですね。この掴み大好き。ラズパイにもっとちっちゃいやつがあるというのをフワッと聞いたことがある程度の事前知識でしたが、聞けばなるほど過酷な計算資源で過酷なことをやっていることですね(詠嘆)。RSAに使う冪乗剰余はまだしも疑似乱数すらしんどいとはちょっと普段やってるプログラミングと前提が違いすぎて圧倒されました。

LTは全然メモできてなくて、この記事を書いている今からすると1週間前ちょいなので振り返りが厳しいです。yui-knkさんがめちゃくちゃいい顔で「Bisonだとできないんですねえ~~~~」って言ってたのは覚えてます。あとテストコードジェネレーターのテストが足りてない話も。

夜はちゅらデータさんのdrink upでした。社員さんのシェフが作ったイタリアンプレート美味でした。爆音を浴びながらさんぴんハイを飲むと気持ちがいいことを発見しました。

そしてRubyKaraokeですね。B1Fまるごと貸し切って混沌というべき空間が仕上がっていました。そのなかでもしっとりとカラオケに向き合っている部屋を拠点として過ごしていましたが、朝まで歌うにはちと体力が……。

深夜くらいにハウスして、ソーシャルゲームをやって、そのまま泥のように寝ました。

Day 3

起きました。起きるのって難しいですからね。

さすがに3日湿布を貼り続けているとかなり痛みが引いてくることで、体調が整いめの3日目です。

(そして執筆日時について前章から丸1週間程度ぶっ飛んでいるので記憶がどんどん曖昧になっています。)

Day 3のキーノートは珍しく撮ってました。他全然写真撮ってないのに……。

シグネチャやイミュータビリティに対するみなさんそれぞれの愛憎や複雑な立場が垣間見えて面白かったです。

Aaronさんの赤黒木のセッションについて。赤黒木自体は名前だけ聞いたことある程度でしたが、自分のユースケースにことごとく合わなかったのでついぞ実装したことがありませんでした。インスタンス変数が削除できないなら綺麗に当てはめられるんですねえ……美しい。

junk0612さんのIELRのセッションこれ本当に難しかった覚えがあります。とにかく状態を管理しないとRubyの文法は複雑すぎて曖昧が生じてしまうが状態管理自体が膨れ上がっていて、それを解決するためにはレキサーとパーサーがもはや分かれていてはどうにもならない、という話でしたっけ??????これに限らず言ってること怪しかったら忌憚なく言ってくださいまじですみません。なんせRu:by知識ゼロから始めるKaigi生活だったので……

makenowjustさんの正規表現エンジン作る話も、正規表現は普段使いまくってるし行けるっしょと思って座ってたらどんどん話が混沌に踏み入っていってすごかったですね。普段Parsec系パーサコンビネータを使っているので何気なしにtryを書いてバックトラックしているのですが、パフォーマンスを取りながらバックトラックしたりマッチ結果の束縛をやったりが結構大変なことなんだなあと思いました。

Matzさんの話で、そこまでの要求が本当に必要かどうかは置いといてRubyは遅いという偏見があって敬遠している人がいる現状をなんとかするためにパフォーマンスに力をいれる、というくだりがあったのを覚えています。お恥ずかしながらどこで聞きかじったか、あるいは動的型付け言語なのでという類推か、完全にその偏見を抱いていたので……

コンパイルしてVMバイトコード渡すなら確かにパキパキになりそうだし、JavaScriptとかいう動的言語の雄*8もおるしまじでどこで形成された偏見かわからないですね。

業務でCSVを3TB分pandasに突っ込んだらさすがに爆発して処理に丸数日かかったことがNimを触ったきっかけなくらいにはパフォーマンス厨ではありますが、一方でセミコロンが嫌すぎるのとコーディング中にメモリのこと考えたくなさ過ぎる*9のでCやC++やRustをやっていないという中途半端な立ち位置なので、このシンタックスがナイスな言語が結構速い*10というふうになるとかなりモチベになります。新規構文の導入とかもパーサー周りの整理のために先送りされるということで今がまじで初めどきなんですね!!!!!

このあたりでかなり帰宅即Rubyをインストールするぞという感じになっていました。

そんなこんなで異様に濃密な話を聞いて曖昧になっているうちに3日間が終わりかけていましたが……

OH WHEN THE RUBYISTS GO MARCHING IN

I WANT TO BE IN THAT NUMBER

all capsが出てしまい失礼しました。

次回は愛媛県松山市です!!!

コンパクトな中心市街地を有する街なので会場がどこになってもリアルおうちハウスから徒歩で参戦できて、三半規管や航空性中耳炎の心配をしなくていいのが個人的にはブチ上がりポイントです。

After Partyではとにかく手当たり次第に愛媛情報を喋りまくりました。鯛めしを名乗る別々の食べ物が県内に2種類あって道後あたりに食べ比べできる店があったようなきがするとか、道後温泉本館がずっと工事していたところ2025年春には確実に間に合うとか。4月中旬の松山は暑くもなく寒くもなく桜はちょっと残ってないかもしれないけど多分晴れるし最高の季節であることとか。

泡盛とさんぴんハイを交互にぶちこんで高らかになっている状態でMIXINへ直行!!

しようと思ったのですが思ったより体力がアレだったのでやんちゃハウスで休憩し、入ろうとしたら人多すぎて笑いました。

"川"をアフターパーティー後の人の塊を分散させるために復活させてもいいかなという話がなされました。愛媛県松山市にも石手川があり……。

ラウンジの方に居たら、ジャンプ禁止されるくらい沸きました。

ワンドリンクのさんぴんハイはどっか行きました。

朝まで踊りたかったのですが体力がやっぱアレで、締めステーキをやって寝ました。

Day 4

起きました。起きるのって難しいですからね。

荷物をまとめようとしたらノベルティで膨れ上がっていてナップサック問題ならぬスーツケース問題を解くことになりました。

やんちゃハウスを解散したあと流れで人生初A&W、初ルートビアをやりました。

多分Kaigi中は観光にならないだろうなあと思って帰りの飛行機をDay 5に取ったのでこの日はとにかくゆっくりしていました。

まず国際通りの快活の鍵付き個室をコインロッカーとして確保しました。

ナイトパックがない代わりに異様な席数*11の鍵付き個室があってビビりました。さすが観光地ですね。

愛媛県松山市で生活してるとほんとうに全国共通の交通系ICカードを使う用事に恵まれなかったのでスマホカバーに珍しくICOCAを挿し、これでゆいレールを乗り回していました。

JR四国の県内の駅でICカード使えるところは存在せず、地元私鉄(伊予鉄道)は長らく独自規格のICを振り回していたので……。

ただ朗報があって、使えるようになります!

www.iyotetsu.co.jp

郊外線対応がKaigiに間に合うかどうかわからないですが主に使うことになる路面電車は既に対応しているので、だいぶ良くなりました。

ゆいレールってモノレールなのに爆速で面白いですね。部分的に伊予鉄より速い。

首里城を見に行きました。コンビニの色がそういう感じになっていて既に良かったです。

oki-park.jp

継世門が工事中だったのでぐるっと大回りして首里城公園に入ったのですが結果的に守礼門から順番に回れたので正解だったかもしれません。

写真

正殿は2016年の火災からまだ直ってないと聞いていたので今しかみれない光景だろうなと思ってワクワクしていたのですが、想像の100倍本気の"見せる復興"をやっていたことですね。

なんかめちゃくちゃ神妙な気持ちになって色々買いました。非破壊検査文化財の染料・顔料を分析する本とか。

那覇で働いている高校時代の後輩*12と合流して飯を食って、メロブを冷やかすなどしました。

Day 5

起きました。起きるのって難しいですからね。

帰りの飛行機は昼だったので正直遅くまで寝ていてもよかったのですが、なんかアドレナリンの具合があれになっていたのか珍しく目が覚めて、快活をチェックアウトし、全然店が空いてない朝の国際通りを徘徊しました。

これはポークたまごおにぎり3連打です。異様に腹が減っていたので連打したら夕方まで満腹で可笑しかったです。

ほんとうにやることがなかったので空港でおみやげを買い揃え、時間を潰しまくり、腹も減ってないし暇を持て余していました。

帰松ただいまつやま

あんまり正気じゃなかったので空港からリアルおうちハウスまでスーツケースを頭上運搬しながら徒歩で帰ったところ、Day 0に傷めた太ももがぶり返してきました。

空港からはバスに乗ったほうが良いと思います。

振り返って

Ruby知識ゼロからRubyKaigiに初参加してみたという身として、一番大きく思ったのは「これ普段からRuby書いてても話の難易度変わんねえな」ということです。

言語を使う側と作る側の立場の違いに起因するのだと思いますが、そもそも話の内容が最先端Tech揃いなので場で聞いてパッと詳らかに身につくものではなさそう。

では得るものがなかったか?というとそれもFalseで、なじみがない分野のオーバービューをふんわり叩き込めたというのがひとつ、もうひとつはテックに対するモチベーションですね。

全力の熱弁というのは聞いてて奮い立たせられるもので、かなり健康と知的好奇心に良かったです。

あとは、特に普段プログラミングと無縁の企業で一人PCカタカタしている立場なので、見渡す限り1400人全員プログラミング人間という環境がほんとうに面白かったです。*13

純粋に祭りとしても楽しかったです。

いい経験になったなあと思うと同時に、たくさんのひとびとの協力で今日こんにちまで続いてきた場なのだなと思いを馳せています。

いやーよかった。

言い訳でもするか。このブログエントリがここまで時間かかっちゃったのは、ひとえに生活リズムのなかに執筆時間がないところむりやりねじ込んだら体調がおかしくなったからですね。

総じてみなさん体力すごいな???????ネバダ砂漠を自転車で横断してからいらっしゃった人とか居たし、やんちゃさんは原付とフェリーで東京から来てるし。

来年までにちょっと鍛えてもう少しタフに楽しめるようにしたいと思いました。

さて、来年は愛媛県松山市です。

いいとこです。いい季節です。是非おいでて楽しんでいってください。

お待ちしております。

*1:あるいはビゼロ

*2:那覇市にも松山という地名があり紛らわしいので以降この表記で行きます

*3:その後5/23に提出しました。どうしてこのブログはこんなに時間がかかっているのか

*4:5/31に会ったのに忘れてた

*5:https://github.com/lark-parser/lark

*6:https://hackage.haskell.org/package/trifecta

*7:Unified Function Calling Syntax、D言語にあるやつ

*8:あれなんであんな速いんですかね

*9:機械がやってくれるようになったことを人間がまたやらなきゃいけないようになるの本当につらい、GC/RC最高

*10:しかも型を書かなくていい

*11:愛媛県松山市の大街道店の10倍くらい

*12:ぼくが留年しすぎて大学時代同級生を経て先輩になった

*13:「アイスはそこらへんにデプロイされてます」で周りがドッと湧くことなんてなくって……