部屋の隅っこで書く技術ブログ

Web系企業勤務のエンジニアリングマネージャのブログです。技術ブログと称しつつ技術にまつわる個人的な話題が多めです。

RubyKaigi 2024に参加しました

05/15-17に那覇市で開催されたRubyKaigi 2024に参加してきました。

待ちに待ったイベントでしたが、1年間期待して上がりまくった自分の中のハードルを軽々と超えてきました。楽しかった。

テックトークを聞くイベント、RubyKaigi

Namespace, What and why

Namespace, What and Why - Speaker Deck

今回のイベントでの個人的なベストトークです。

言語レベルの機能でRailsアプリでのモジュラモノリスが実現できる、というのは夢がありますね。

MatzのClosing Keynote で、この機能が十分に整備されたらRuby 4に上げても良いと思っている、というコメントがあって興奮しました。

After Partyで@tagomorisさんに「なぜファイル名にNamespace IDだけでなくProcess IDを含めるか?」という疑問をぶつけたら丁寧に答えてくださいました。

衝突させないためのアイデアは昨年のshioyamaさんの発表に似てて1素敵、と思っていましたが、本人によると意識していないそう。

ところで、発表中に「ライブラリがアップグレードされなくなる」というモラルハザードの懸念が表明されていました。

これについては最近読んだ「RULE DESIGN」という書籍が参考になるのでは、と思って家に帰って開いてみたのですが、本を読み返しても

  • 一定以上古いバージョンを使っていると最新版以外は警告が表示される
  • キャッチアップできていたら褒められる

くらいしか思いつきませんでした。

仕組みを設計する上での勘所はインセンティブの設計ですが、そもそも言語処理系から提供できるインセンティブがそんなにない(それこそ褒めてもらえるくらい)というのが難しいポイントだと思います。

また、セキュリティリスク以上のディスインセンティブを積み増すような処理系はそもそも使ってもらえないだろうな、という点でも難しいですね。

ライブラリのバージョンアップが現在でも善意や責任感に頼っているのにはそういう背景によるものと思われ、やる人はやる・やらない人はやらないので、仮にNamespaceが実装されても現在とそこまで状況は変わらないのではないかと考えています(現在の状況が良いとは言ってない)。

Game Console

みんな大好き、ゲーム機でRubyを動かす発表群です。

Yokooさんは一昨年のメガドライブを発表を見た時からのファンです。

スライドツールはゲーム機で動く自作のもので、発表自身が動作デモになっている、という点がクールすぎ。今回は

  • 途中でゲームコンソールを切り替える
  • ドリームキャストのつりコンでスライドを動かす

等がより尖っていて面白かったです。

mybestさんのドリンクアップで本人に興奮を伝えられてよかった。

スーファミの方は、ハードウェア制約があまりにも厳しい以外にも開発コミュニティが比較的小さかったりCコンパイラすら枯れていなかったりと特有の苦労が山ほどあり、ジャングルを切り開くかのような大変さだったと想像します。

しかし、この性能のコンソールで初手からF-ZEROを出したり疑似3D描画をしていた任天堂と、スーパードンキーコングシリーズのグラフィックと音楽を実現していたレア社とは一体なんなのか。

Adding Security to Microcontroller Ruby

Adding Security to Microcontroller Ruby - Speaker Deck

特殊ハードウェアの話で言えばこれ。来年のローカルオーガナイザーであり、鉄道仲間でもあるsylph01(@s01)さんの発表です。

Timeeさんのドリンクアップに向かいながら色々と質問をしたのですが、トーク中にもあった組込ハードウェアにソフトウェア的なセキュリティを施すことの限界の話から物理セキュリティの話に発展し、アメリカの鍵(物理)はガバいけど銃社会だからそれでも成り立っている、という話が聞けました。

SecurityよりSafety, それはそう。

An adventure of Happy Eyeballs

An adventure of Happy Eyeballs - Speaker Deck

同時期にコミュニティに行き始めて今でも仲良くしていただいている、しおいさんの発表。

Official Partyで「学生の時にソケットプログラミングの課題があったがよくわからなかった」と言ったら「昨年も同じようなことを聞いた」と苦笑されてしまいました2。不真面目な学生だったのがバレちゃう。

ただ、この発表のおかげで苦手意識は解消したかもしれません。

発表の内容はものすごく簡単にいうとIPv6IPv4の両方で接続を試して早く接続した方を優先するプロトコルをステートマシンに帰着させて実装した、というものです。

ステートマシンに帰着させることでパターンを処理可能な数に絞った上で、ステートの遷移にフォーカスすることで変数を減らして実装の複雑さを低減する、という鮮やかだけど泥臭さも必要とされるアプローチでした。

これを見て、当時の自分は複雑なものを複雑なままアタマの中で扱おうとしたからダメだったんだな、と気付かされました。そりゃ難しいに決まっている。そして振り返ると当時の過信が透けて見えて恥ずかしいですね。

Does Ruby Parser dream of highly expressive grammar?

Does Ruby Parser dream of highly expressive grammar? - Speaker Deck

@ydah_さんの発表です。

これまでparserの話題にはあまり興味を持っていなかったのですが、

  • 「parserの設計がイケてない。表明的に書きたい」というモチベーションがよく伝わってきたこと
  • 「parserとlexerが密結合なのは不可分だから。なら最初から密結合させて作る」という逆転の発想

がわかりやすく話されていて、引き込まれました。

なぜこれまでparserの話題に興味を持てなかったかといえば「誰が何にどう困っているか」が自分の中でクリアでなかったからで、その点を明らかにした上で鮮やかな解決策を見せつけられれば、それは興味を引かれますよね、という。

こうして色んな話題に興味を持つきっかけをくれるのもRubyKaigiの良いところですよね。

ところで、After Party後にご本人と一緒に飲めたので軽く確認したのですが、スライドの合間に昭和ウルトラシリーズの名言が差し込まれるのは、やはり沖縄という土地を意識されたとのこと。

怪獣使いと少年」がどんな気持ちで書かれたのか思いを馳せざるを得ないですよね、沖縄。

RubyGems on ruby.wasm

RubyGems on ruby.wasm - Speaker Deck

@kateinoigakukunさんの発表。

この方は2022年のkeynoteに彗星の如く現れ度肝を抜かれたのが記憶に新しいですが、あの時よろしく今回も圧倒されました。本当にブラウザでmastodonをホストしている……

ブランチごとにステージング環境を構築する、なんて離れ業が手元で気軽にできるようになるのは夢がありますね。

ちなみに、ブラウザで動くので当たり前なのですが、ちゃんとWindowsでも動きました。

ただ、社内で議論していて「アプリの動作に必要な様々なバイナリを都度wasmに移植しなくてはならない」という欠点3に気付きました。

となるとx86かarmをエミュレーションしてその上にLinuxカーネルを乗せ、Dockerの実装が実現すればなんでもできるようになるな、と想像したのですが、x86をwasm上でエミュレーションする実装はもうある ようです。

ただ、動作速度はPentium 4程度だそうで、小さいWebサーバくらいなら動かせるかもしれませんが、現代のWebアプリケーションを動かすのはやっぱりちょっと厳しい……

……と、こんな感じで妄想させてもらいました。夢が広がっているのは間違いないです。

How to implement a RubyVM with PHP?

How to implement a RubyVM with PHP? - Speaker Deck

めもりー(@m3m0r7)さんの発表。普段はPHPで開発されてる方が「Rubyの気持ちを知るためにPHPVMを実装する」という内容でした。

実装フローについての話をする際に「『どこから作る?』ってTOKIOみたいに……」とおっしゃってましたが、そもそもこの発表自体がTOKIOの発想そのものでちょっと笑ってしまいました。

トークをよく聞いているとVMの基本構造はシンプルなノイマン型マシンで、発表のように実装する命令セットを絞れば確かにできそうだな、と思わせてもらいました。

Ruby and the World Record Pi Calculation

Ruby and the World Record Pi Calculation - Speaker Deck

Iwao(@Yuryu)さんの発表。

円周率世界記録への道のりは持てるあらゆる手段を使って挑む泥臭いもので、それをRubyが助けてくれた、というお話でした。

人生をかけた挑戦であること、そのあらゆる場面でRubyが側にあったこと、そしてIwaoさん自身がそれに深く感謝していることが冷静な語り口ながらも伝わってきて、発表終わりにじんと来てしまいました。

RubyKaigiはRubyistの生き様が見られるイベントでもありますね。

From LALR to IELR: A Lrama's Next Step

From LALR to IELR: A Lrama's Next Step - Speaker Deck

こばじゅん(@junk0612)さんの発表。

上記Iwaoさんの発表の裏番組で残念ながら聞けなかったのですが、こんなことがありました↓

今後のカンファレンスの糧になりそうです。もちろん、TPOと聞き方には気をつけましょう。

ydah_さんがおっしゃっていた「parserとlexerの密結合」が言葉でなく心で理解できました。「魔境」の正体は暗黙知の多いコードだったのですね。

論文の数式を実装に落とし込む際の苦労話を肴に、オリオンビールを頂きました。

感謝を伝えるイベント、RubyKaigi

RubyKaigiにはテックトーク以外の側面ももちろんあって、それが「感謝を伝える」ことです。

まずは、昨年のRubyKaigi後に面談させてもらった4tricknotes(@tricknotes)さんとKawasaki(@_geeknees)さん。あのとき前向きになれたおかげで、今回のRubyKaigiも元気に参加できました。

また、大江戸Ruby会議10で招待講演をされていたinao(@inao)さん。その時のスライド5をもとに「日本語の作文技術」「理科系の作文技術」を読んだ上で社内ドキュメントのガイドラインを作りました。ドキュメントの作成の進捗は順調です。スライドが両書をちょうど補完する形になっていて、本当に助かりました。

それから、OOP ConfでCSSについての発表をしていた6しんくうさん。tailwindがなぜ流行ってるのか分からなかったところに刺さる資料で、「なぜ分からなかったか」のかの部分まで理解できる素晴らしい資料でした。

人だけでなく、普段使っているサービスに対しても感謝を伝えられました。

mixi社の「みてね」開発チームのみなさん。大阪に住んでいる甥1号(4)と2号(1)の写真がいつでも見られるのはこのアプリのおかげです。妹から写真が来ると夫婦で「公式から供給がきた」と言って眺めてます。

それから、ラクスル社のみなさん。今回のRubyKaigiに備えてアイコンシールを発注させてもらったのですが、おかげさまで名札に貼ったり名刺に貼ったり大活躍でした。初めての方にも「アイコン見たことありますよ」で話がスムーズに始められるの良いですね。

今回も様々な人に感謝を伝えられて良かったです。伝えたかった皆に会えたわけでないので、その方々は次の機会に。

憧れとむきなおりのイベント、RubyKaigi

会をふりかえって思うのは「やっぱりRubyKaigiの登壇者ってかっこいいよな」ということです。

sylph01さんが「ハードアカデミズム」と表現している7ように、まさにRubyの可能性を広げる仕事をしている人たちでした。

自分は「自らの問いに一心不乱に突き進む」ようなやり方は得意ではありません。

だから「自分はそうはなれない」と諦めていたのですが、彼らの姿を見て、自分なりのやり方でコードを書いて新しいものを生み出していけないか、と改めて考えました。

色々考えた結果、自分なりのやり方といえば「自己管理」と「読書」という結論が出ました。

ここ数年は良いマネージャーになりたくて、たくさん本を読みました。そして、本を読む時間を作るために自己管理に精を出しました8

自ら問いを立てるのは苦手でしたが問いを立てるノウハウは本が教えてくれた9ので10、頑張ればコードを書く時間を新たに作れそうな気がしています。

何より、たくさん本を読んだおかげでマネージャーとして自信がつき、読書以外のことをする心の余裕が生まれています。

本を読むのに集中してあまりコードを書いてこなかったこの数年ですが、それを否定するのではなく前向きに活かす形でコードを書いて行ければなと思う次第です。

「RubyKaigiで」とはいかないかも知れませんが、成果が出たらどこかで発表しますね。

そんなわけで、自分なりにプログラマーとして胸を張れる日々を過ごしたいと思いを新たにした、というお話でした。

沖縄で開催されたイベント、RubyKaigi

沖縄本島は3度目なのと、家庭の事情で早く帰る必要があったためそこまで観光はしませんでした。

ただ、「ノルマ」はちゃんと達成してます。稚内も行ったから、あとは東根室だ!

それから、10代20代の頃にはピンと来なかった沖縄料理のおいしさが分かるようになっていました。

沖縄そば、麺がモチモチして小麦感が強くて美味しいですね。あっさりしてる出汁に豚肉の脂が良いアクセントになってます。

それから、全然イメージのなかった魚介。海鮮といえば寒い地域のイメージでしたが、沖縄の魚も美味しいんですねー。

主菜だけでなく、小鉢でもずくや海ぶどうが出てくるのも箸休めに最高です。

全体的に薄味なのに出汁がしっかりしてて、体に良い感じの美味しさでした。そりゃ沖縄の人は長生きするよなー。

その他諸々

偶然の再会

なんと、かつての合唱仲間とまさかの再会。

当時彼女は首都圏で大学院生をしていたのですが、今は福岡でRuby書いてるとのこと。

人見知りを発揮してたと本人は言ってましたが、楽しんでるようにしか見えなかったぞ(良いこと)。

筋トレしてて良かった

遅くまでカラオケしようが明け方まで飲もうがクラブまで走っていってそのまま騒ごうが、バテずに翌日ちゃんと頭が働きました。

睡眠時間を最低ラインは確保するという努力も実りました。

皆さん筋トレしません? 鍛えるのも362日の活動ですよね? #rubymusclemixin11 しません?

STORESさんのクイズが面白すぎた

STORES社のブースで出題していたクイズをずっと夢中で解いてました。

普通に解くだけじゃなくて、ちゃんと1文字だけ変更すれば解けるように全問なってるのが作り込まれてますよね。

ところで、Extraは2まで減らすのが限界だったんですが1の回答あるんですかね?

例えばC問題は2文字変更の回答が想定解っぽいので、1文字があるとは思えず。

と思っていたら@makicamelさんが書いたソルバー12 が上がってきていました。

試してみたら全部に1文字解があるっぽいですね。くやしい。Bが多分一番難しいです。

まとめ

  • 過去最高に楽しめたRubyKaigiだった
  • たくさんの人に感謝を伝えられた
  • 自分なりのやり方でコードを書いていこうと改めて思った

いろんな感情が溢れてめっちゃ長くなってしまいましたが、最高のRubyKaigiでした。

来年は松山に行きたい。行けるかどうかは色んな事情が絡むけど、やっぱり大好きなイベントなので。


  1. RubyのオブジェクトIDが絶対に衝突しない」ことを利用して名前空間を分割するshioyamaさんのアイデアと「プロセスIDが絶対に衝突しない」ことを利用するアイデアが、メタな処理系に衝突管理を任せるという点で似てるな、と思ったのです
  2. 「個人的には学生の頃に言語工学の単位を落としたトラウマがあってイマイチ興味を持てずにいたのですが、AfterPartyでしおいさんに『実際にparse.yを開いてみたことはおありですか?』と聞かれて(こわいよ)、返す言葉もなかった」 from RubyKaigi 2023に参加したら新しい繋がりが生まれて悩みが解消した話 - 部屋の隅っこで書く技術ブログ
  3. もちろん、この欠点によってkateiさんの仕事の偉大さが損なわれるわけではありません。念の為
  4. RubyKaigi 2023に参加したら新しい繋がりが生まれて悩みが解消した話 - 部屋の隅っこで書く技術ブログ
  5. WEB+DB PRESSと私 - Speaker Deck
  6. オブジェクト指向CSSが叶えたかったことと、CSSのいま / The aims of Object-oriented CSS and the current state of CSS usage - Speaker Deck
  7. Kaigi on Rails 2021に認証技術の話で登壇した - そんなことはさておいて
  8. 例えば仕事をちゃんと時間通り終えるために EMはいかに自分の仕事をマネジメントするか #スクラム - Qiita に書かれたような方法を編み出した
  9. 「思考の整理学」が衝撃的だった話 - 部屋の隅っこで書く技術ブログ
  10. 他にも「リサーチのはじめかた」という本をいま読んでいます
  11. #oedo10 継続的 #RubyMuscleMixin 実践入門/RubyMuscleMixin - Speaker Deck
  12. Thread使っていて、実行モデルが美しいのが素敵