05/11-13の3日にわたって開催されたRubyKaigi 2023に現地参加してきました。
今年の開催地は長野県松本市。2020年にも開催が予定されていましたが中止になってしまい、3年越しでの開催となりました。
昨年に引き続きオンラインとのハイブリッド開催でしたが、オンサイトでのパーティやドリンクアップも復活して「RubyKaigiが帰ってきた」との思いを強く感じました。
トーク
"Parser Kaigi"
今年のメインテーマはparserと言って異論のある方はいないのではないでしょうか。
Parserについての話題が増えたのには「Rubyの改善」という文脈で大きな意味があると思っています。すなわち、Ruby 3x3が達成されて型システムも整備され、Ractor, debug.gem, irbをはじめ周辺ツールが充実したことでユーザビリティが大きく上がったことから、内部改善に時間と手間を割けるようになったということなのです1。
自分はRubyのいちユーザで言語開発にコントリビューションしているわけではないのに、なんだか感慨深い気持ちになりました。
個人的には学生の頃に言語工学の単位を落としたトラウマがあってイマイチ興味を持てずにいたのですが、AfterPartyでしおい さんに「実際にparse.yを開いてみたことはおありですか?」と聞かれて(こわいよ)、返す言葉もなかったのが印象に残っていて、食わず嫌いしてないで少しは勉強してみようかな。。。と思いました。ParserとLexerの違いすら覚えてなかったのはさすがに恥ずかしいと言わざるを得ない。
Multiverse Ruby
Multiverse Ruby - RubyKaigi 2023
この発表が個人的なベストトークでした。
自分は「運用でカバーしている内容を技術で解決する」トークが好きなのですが、この発表で解決している問題はそもそも「運用でカバー」していると意識にも上らない"gemによるトップレベルの汚染"。Rubyでは「そういうもの」として受け入れてしまっていますよね。
また、解決の手法も実に優れたもので、Rubyのマイナーな機能を活かして名前空間の衝突を防いでいるだけでなく、「オブジェクトIDが衝突しないこと」というRubyの基礎中の基礎の機能を使って衝突しないことの保証を取っていて、鮮やかな手品を見ているような気分でした。
問いの立て方、その解決策、いずれも別々の角度から盲点を突いていて、問いの方は「盲点」といいつつ言語設計に迫った根源的なものであったという点で、感動しました。
Rethinking Strings
Rethinking Strings - RubyKaigi 2023
こちらは事前から特に楽しみにしていた発表でした。
RubyのStringが持っている機能について解説するパートは「そもそも文字列はどのように扱われているのか」という純粋に勉強になる内容でした。また、終盤ではエンコーディングとの兼ね合いからバイナリを扱う機能を切り離すべき、という問題提起も行っていました。
本人が「解決策」として提示している内容はやや極端だったためTwitter上には「総論賛成、各論反対」な方が多かったように思いますが、成果を示す発表だけでなく、こうして議論ができる発表があるのも皆の視点が知られて良いですね。なにしろKaigiですからね。
Ruby vs Kickboxer - the state of MRuby, JRuby and CRuby
Ruby vs Kickboxer - the state of MRuby, JRuby and CRuby - RubyKaigi 2023
昨年は「メガドライブにmrubyを組み込んでゲームを作った発表をメガドライブでやる」という酔狂(褒めてる)な発表がありましたが、今年はこの発表がその枠だったと認識しています。
多くは語れませんし語りません。これがライブ感ですよ!(オンラインの方にはどう見えていたのだろう)
Fix SQL N+1 queries with RuboCop
Fix SQL N+1 queries with RuboCop - RubyKaigi 2023
ActiveRecord対応があるなら本番投入したいし純粋にどうやって検出してるのか気になって見に来たのですが、まさかのISUCONの話でした。しかし熱量に触れてISUCONに興味が湧いてきたので結果オーライです。
オートコレクトはさすがに難しそうですが、検出自体はすべてできたという成果がそもそも驚異的でしたね。
翌日の昼食はすえよしさん本人とご一緒できて、理解の足りない部分を色々質問できてよかった。
いろんな人と話した
オンサイトでのパーティやドリンクアップが復活したおかげで、知り合いが増えましたし、雑に悩みを聞いてもらえましたし、なんならそこを受け止めた上で志を同じくする方や似たキャリアを辿った方を紹介してもらえました。
オンサイトの良さって、知己を増やすことのハードルが下がることと雑にがーっと喋っても場が成立することなんですね。コロナ禍の3年間2を経て、そこら辺の価値を強く感じましたし、なにより救われました。
RubyKaigi との向き合い方
こういう内容、昨年も書いた気がする。恥ずかしい気持ちがないではないけど、今年も書きます。
オンラインのみの開催だった2020, 2021を含めるとRubyKaigiへの参加はもう6回目となりました。
オープニングで挙手していた「初参加の人」の数をみて、自分は新参どころか、参加歴でいえばとっくに中堅の後ろの方になっていることを意識せざるを得ませんでした。
RubyKaigiは楽しいイベントである一方で、回数を重ねてくるとどうしても「与えられるものにタダ乗りしているのでは」という意識がもたげてきます。参加に際して年々少しずつ心苦しさが加わっていたのでした。
特にここ数年、自分がプライベートでまともにコードが書けていない3のには思うところがあるわけですが、かといって、目の前に自分の力で解決できる問題が落ちているわけでもなく、必死で勉強するほど解決したい問題があるわけでもない。
理由がないと動けない、衝動に身を任せられないのは自分の悪いところなのですが、とにかくそんな感じで行動に移せず、今年は特に悶々としながら松本に到着したのでした。
しかし、Kaigiの終了後にぱんさんやジョーカーさんのブログ記事を読んだり、まきさんとしおいさんのおかげで知り合うことのできた川崎さん、tricknotesさんとお話する中で、徐々に問題の捉え直しができるようになりました。
ぱんさん、ジョーカーさんについてはまず記事をお読みいただきたいのですが、お二人の記事中で
登壇者を目指していてもいなくても、Rubyを好きでいたらRubyKaigiを楽しめるし、Rubyコミュニティにいていいのだ、と、当たり前ながら思ったということでした
引用元: 長野県松本市で開催されたRubyKaigi2023に、Helperとして参加した話 - Health comes first https://nappan23.hatenadiary.org/entry/2023/05/16/185139
RubyKaigiで受けた刺激はあくまで刺激として受け取って、気にせず自分の人生のための活動をすること、自分なりのやり方でコミュニティに恩を返すのも大事なことなのだと思います。目立つヒーローばっかりが人間じゃない。
引用元: RubyKaigi 2023 参加報告とちょっとエモい話 - joker1007’s diary https://joker1007.hatenablog.com/entry/2023/05/17/142758
とあって、これを受けて自分はRubyKaigiに対してどう恩を返すか、の視野が狭くなっていたと気付かされました。
RubyKaigiはすごいコードを書ける人たちがヒーローになるイベントではあるけども、恩の返し方は登壇することだけじゃないし、なんならRubyKaigi自体ではなくともコミュニティに恩を返しても良いのです。
また、川崎さんとはKaigi後に個人的にお話をしたのですが、その中で何度かKaigi on Rails 2021で自分が行った発表4に言及した上で高く評価していただいて、「CTOやれるくらいの実力はあるでしょ」とまで言っていただいて、(話の主題自体は別のところにあったのですが)見てくれている人はいるんだなと泣きそうなくらい嬉しかったのです。
自分が話した内容にリアクションもらえることって本当に少なくて、「あんまり興味を持たれていないのかな」と不安になることもなくはないのですが、1年以上前に行った発表にここまでの高評価をいただけると「見てくれている人はいる」と実感することができました。
仮にトータルであまり興味を持たれていないとはしても、1人でも見てくれている人がいれば、それはコミュニティへの恩返しとして成立しているのですよね。
正直なところ、今思えば「コミュニティへの恩返し」の見方が狭くなっていたのはそのあたりに理由があって、リアクションが少ないことから人の役に立てている実感がなく、自分の行動が恩返しになっていると思えなかった、ということがありました。
かといって「いいね」をクレクレするわけでもなければ(そうでないと正当な評価とはいえないし)、既存コミュニティでいいねを送り合って新規が入りづらくなるのも本意ではないのですが、知らない人相手でも、良いと思ったら何らかのリアクションは返した方が良いと思ったのでした。恩返しは大事ですが、小さくても恩送りをするのも大事ですよね。
少し話がそれましたが、まとめると、恩を返すのはRubyKaigi自体ではなくコミュニティ全体でも良いし、コミュニティへの恩の返し方はコードを書くことやRubyKaigiに登壇することでなくても良いし、自分のアウトプットした内容を見てくれている人は必ずいるし、1人でも見てくれていればそのアウトプットは恩返しとして成立するのです。
翻って、自分がいま興味を持っているのは「人間はどのようにモノを学ぶのか」ということです。
このブログでも何度も触れている「独学大全」を読んだ時、理由がないと動けないはずの自分の中から、湧き上がってくるような興味を感じたのをよく覚えています。あの分厚い本を精読して、端から端まで読書メモを取るのは大変でしたが、朝から晩までカフェにこもって「学び」そのものに向き合うのは本当に楽しかったのです。
そこから著者の読書猿氏の推薦図書を読んでいくうち、興味が読書術から認知科学へと派生していき、ここ2年くらいは読んでいる本の半分がそちら関係の本になっています5。
独学大全から認知科学にたどり着いて本を何冊か読み進めたときに強い高揚感を覚え、「もしかして自分はこれだったんじゃないのか」と思いました。実際、幼少期からの経験と一つひとつ重ね合わせると、自分はずっと「いかに学ぶか」に関心を抱いていたような気がしました。
独学大全はもともと「勉強することいっぱいあるし、せっかくだから効率よくやりたいなー」というありきたりなきっかけで手に取った本でしたが、まさに人生を変える一冊となったのでした。
そんなわけで自分の主な興味はいまRubyとは関係のないところにあるわけですが、相変わらずRubyでお仕事をしてお金をいただいている事実は変わらず存在しています(ありがたいことです)。
そんな自分がいまコミュニティに還元できることといえば、やはり興味を持っていることそのもの、すなわち「学び方」じゃないかと思います。
いっときのバブル的なプログラミングスクールの流行は一旦落ち着いたようですが、それでも今回RubyKaigiに初参加だった人の数を見れば、いかに学ぶかというのはきっと需要があるはずです。
Ruby自身を改善したり革新的なgemを作ったりするやり方はきっと自分には合っていないのですが、自分は自分のやり方でコミュニティに貢献していこうと思います。
さしあたり、Kaigi on Rails にはCfPを出したいと思います。もともと上手くまとまるか自信がなかったので迷っていたのですが、これで逃げ道がなくなっちゃいましたね。
Matsumoto is Nice
いろんな方が書いていますが、松本は非常に良い街でした。
空気はカラッとひんやりしていて、城下町らしく道は広くて建物が低いので広々としており、戦火を免れたことからレトロモダンな建物が点在するという、なんというか手の加わってないことの良さがある街でした。
松本城を後にして市街地を歩きました
— expa / Shu Oogawara (@expajp) 2023年5月14日
松本市は戦火を免れて震度7に達するほどの地震も起きていないせいか、こういうレトロモダン風の建物が点在してて歩いてて楽しいです pic.twitter.com/i8FCA7yCV7
標高が高いのでもちろん水が良くて、食べ物は美味しいです。孤独のグルメ6でも十分楽しめそう。
松本ブラックラーメンを食べようとしたら定休日だったので、馬肉を食べに来ました pic.twitter.com/Bb9QwtF0av
— expa / Shu Oogawara (@expajp) 2023年5月14日
あと、「マサムラのベビーシュークリーム」は本当に絶品だったので、みなさんまた松本に行かれた際はぜひ。
道中では、松本に来た初日に居酒屋の大将から聞き出したマサムラのベビーシュークリームをいただきます
— expa / Shu Oogawara (@expajp) 2023年5月14日
保冷剤が4時間程度しか保たないのでお土産にする計画は断念 pic.twitter.com/9RykWIhK1X
余談
会社でMatzに色々解説してもらった
RubyKaigi直後の水曜に社内勉強会でMatzに気になったトークの背景を中心に色々と解説してもらいました。
福利厚生。
本日、技術顧問の@yukihiro_matz さんとの社内勉強会を開催しました!#rubykaigi 直後ということで、
— Linkers Tech (@Linkers4System) 2023年5月17日
* RJITの仕組みと位置付け
* parserが「魔境」と言われた経緯と新parser開発の動き
* ChatGPT登場によって変わったコミュニティのAIの受け止め方
などなど丁寧に教えていただきました 🙌
現地では写真も撮っていただいて僕は幸せものです。
帰りに姨捨と佐久広瀬に訪問しました
日本三大車窓と言われる姨捨(おばすて)駅が1時間ほどのところにあったのでKaigi翌日に行ってきました。
とうとう姨捨に着きました
— expa / Shu Oogawara (@expajp) 2023年5月13日
朝の気持ち良い時間帯で良かった pic.twitter.com/3T3pJElNmm
それから、最高標高の秘境駅:佐久広瀬(さくひろせ)駅に行ってきました。
昨年の西青山駅から勝手に恒例行事にしてますが、沖縄には秘境駅はないんだよなあ7。
秘境駅ランキング51位、佐久広瀬駅に到着
— expa / Shu Oogawara (@expajp) 2023年5月14日
人家はありますがまばら、聴こえるのは川のせせらぎと鳥の声のみ
最も標高の高い秘境駅だけあって寒いです
もう5月だぞ pic.twitter.com/zLZOYgJtYy
九州最強の秘境駅、宗太郎駅
余談中の余談ですが、soutaroさんの発表で宗太郎駅が出てきて一番興奮していたのはたぶん私です。
宗太郎駅、多分、列車訪問難易度が日本で一番高い。駅なのに。終電が朝6時なので #rubykaigi #rubykaigiA
— expa / Shu Oogawara (@expajp) 2023年5月13日
1日の列車本数が日本で一番少ない駅で、上下合わせて3本。宮崎方面行きは朝6時54分発が始発で終電。肥薩線の矢岳越え区間が運休中の今、文句無しで九州最強の秘境駅です。いつか行ってみたいですね8。写真はGoogleストリートビューより。
おわりに、わたしのKaigiEffect
心苦しさも覚えつつ参加したRubyKaigiでしたが、元々コミュニティに持っていたつながりが新しいつながりへと発展し、それによって視野狭窄が改善され、先に進む展望が見えてきました。
ところで、おかげさまで「自分なりのやり方でコミュニティに貢献すること」を自分で許せるようになったのですが、嬉しい副作用としてプライベートでコードを書くにあたってRubyKaigiを無意識に意識しすぎていた(変な言い方だけど、こうとしか言いようがない)ことも同時にわかりました。
冒頭に「プライベートでコードを書けていない自分に思うところがある」と書いたのですが、どうやら自分でコードを書くことに対するハードルを上げすぎていたようです。
tricknotesさんと話す中で、新卒から短期間でマネジメントの仕事を始めたためエンジニアリングに打ち込む期間がなかったことが「技術的な自信のなさ」として現れてきているのを感じたので、自分の中でのハードルの下がった今、少しずつコードを書くことも始めて行こうと思います9。
そんなわけで、なにか新しく学び始めるでもプロダクトや勉強会を立ち上げるでもなく、新たなつながりを得て自分のやりたいことに素直に打ち込めるようになった、というのがわたしのKaigiEffectでした。こんな形のKaigiEffectでも良いですよね。
最後に、記事中でもたびたび触れましたがOfficial Partyで突然だーっと悩みを喋りだしたにも関わらずきちんと聞いてくれて、川崎さんとtricknotesさんという素晴らしい出会いのきっかけとなってくれたまきさんには特別の感謝を伝えさせてください。本当にありがとうございました。
それでは、またどこかのコミュニティ10でお会いしましょう。
- と自分は捉えています↩
- ワクチンの効果は経年で下がるし治療薬が出たわけではないので、今後も草の根で気をつけて行きましょう↩
- 仕事ではコードレビューを毎日やっているほか、Rubyアップグレードなどの仕事でメインの仕事ではなくなったにしろコードは書いています。Ruby3.2に上げた話は近々会社のブログに書きたい↩
- Railsバージョンを倍にしたサービスのそれまでとそれから / Till and from that time of a web service whose rails version was doubled #kaigionrails - Speaker Deck https://speakerdeck.com/linkers_tech/till-and-from-that-time-of-a-web-service-whose-rails-version-was-doubled-number-kaigionrails↩
- 残り半分はマネジメント関係の本。技術書を読んでねえ。ちなみに、今回のRubyKaigiの自分のハイライトの1つは、複数の方々から「読書家」のイメージを持たれているとわかったことでした↩
- 松本城の初代城主・石川数正ですが、現在の大河ドラマで彼を演じているのは五郎さん役でもおなじみの松重豊氏です↩
- 代わりに日本最西端・最南端のモノレール駅(那覇空港駅・赤嶺駅)がある他、鹿児島でJR最南端の西大山駅と稚内から続く線路の終点である枕崎駅に訪問してからフェリーで那覇に渡る計画を立てています。妻には嫌な顔をされましたがKaigi後の沖縄観光を一緒にできるかも、と言ったら手のひらを返されました↩
- 穏便に訪問するなら延岡から大分方面の始発に乗って下車し延岡方面の始発兼終電で引き返さないといけない(そうしないと帰れなくなる)が、そもそも延岡が博多駅からも宮崎空港からも2時間かかるハードモードです。ちなみに北海道の石北本線にはかつて1日2本しか電車のこない駅が存在した(上白滝駅)ので、これでもまだマシなのです↩
- 副業という形でも良いかと思ったのですが(お金もらえるし)、現職でそれなりに責任ある立場なのでちょっとしんどいかな↩
- RubyだけじゃなくてEMMeetupとかもやってますんでお見知り置きを↩