RubyKaigi 2024でキーノートをしてきました

丁度1ヶ月前の5月15日、RubyKaigi 2024 初日のキーノートでしゃべってきました。

タイトルは「Writing Weird Code 奇妙なコードを書くということ」

 

RubyKaigi, me and weird code

発表スライドはこちら

drive.google.com

RubyKaigiは僕にとってすごく特別なカンファレンスだし、それが地元沖縄で開催されるということで、絶対何か喋りたいと思って真面目な内容のCFPを出していたんですが、
気づいたら真面目じゃない内容のキーノートをしていました。RubyKaigi本当に楽しかったし。すごかった。
RubyKaigiが終わってしばらくは「RubyKaigi本当にすごいイベントだった」という言葉が頭の中をループしていて、その時にこのブログを書いていれば、文章の半分くらいが「やばい」で埋め尽くされていたんじゃないかなぁ。
本当にすごいイベントだった。だってRubyKaigiでキーノートするなんて一生に一回あるとも思ってなかったし。
感想もたくさんもらえて嬉しかった。毎日RubyKaigi感想ブログ読み漁った。もう一度2024/05/15の12:03頃にワープしたい。

以下、箇条書き風ですが、キーノートを話すまでの出来事とかについての感想とか補足とか意図とかをまとめてみました。

キーノートが決まるまで

  • 2月に入ってから、キーノートどうですか、という話が来た。
    •  その日の夜、発表で大失敗する夢を見た。
  • 数日考えて、以下の内容で話せそうだったので、やりたいと返事を返した。
    • 奇妙なコードについて30分くらい話せそう
    • 沖縄をテーマに一人TRICKと称して5作品くらい作れば後半30分話せそう
  • 他に考えていたこと
    • RubyKaigiでキーノートスピーチをする機会は一生に一度、多分今しかない。しかも沖縄開催。話したい。
    • 今年の成果であるIRB/Relineの話(主にリファクタしまくった話)はキーノートにふさわしいか?あまりそうではない気がする。
    • 僕はTRICKで作品を沢山出す人として知られているはず・TRICKもRubyKaigiらしさの一つなのでキーノートとしてありだと思う。一人TRICKは気が狂ってて良さそう。
    • 自分がキーノートスピーカーに相応しいか、わからない。なので物量で押そう。準備は悔いが残らないようかなり頑張った。

トーク全体の構成

  • 奇妙なコードというと、Rubyの悪いところだと思われるかもしれない。
  • そうならないように、Rubyは楽しい・Rubyのこんなところが良い、みたいなのを全面に押し出すようにしたかった。
  • 一人TRICKの前にいい話っぽいまとめをして、そこから一人TRICKへと話が飛躍するようにしたい。

スライドの前半

  • 30分くらい、短い奇妙なコードについての話をする
  • ruby-jp slackのtimes-tompngに奇妙な短いコードを時々貼っていたので、それらをまとめてストーリーを作る
  • 気になった奇妙なコードは積極的にtimesに書くようにした。(ネタのいくつかは見たことある人もいたかな)
  • 自分のgistを見返して面白そうなのがないか探す
  • 福岡Rubyist会議で話したキーノートの一部分の続きみたいな話をする
  • IRB関連で見つけたもの、bugsなどにissue報告したものなどから使えそうなネタを探す
  • 奇妙な短いコードのうちいくつかはPrismのバグを見つけた時のもの(実は60issueくらい報告してた)

スライドの後半・一人TRICK

  • TRICKが開催された時にネタ切れにならないよう・沖縄らしい話にしたいので沖縄をテーマに
  • Rubyに詳しくない人が見ても楽しめるもの(妻に感想を聞きながら)、見た目が派手なもの、ビジュアル的にインパクトがあるものを多めに作る
  • QuineはTRICKみたいなコードの一分野に過ぎないので、ほとんどをQuineでは無いものにする
  • ビジュアル重視によりすぎるのも良くないので、Quineも最低一つは入れる
  • 使うTRICKの種類・沖縄らしい題材・Rubyの何を使うか、を沢山リストアップして、どの組み合わせで作るか考える
  • 全ての要素をある程度ばらけさせたかった。題材も、自然・生物・工芸、といった感じで。
  • 全部並行して作り始める。スライドの準備期間も十分取りたいので、1ヶ月くらいで大体完成させるのを目標に。

スライドの締め

  • TRICKでそのまま終わってしまうとあまりに投げやりすぎる
  • RubyKaigiが始まるよ、楽しんでいこう、で締める
  • そのためにはどう話を繋げよう、というのを最後まで試行錯誤していた

ホットトピック全部盛り

  • 3月になった頃、多少こじつければ今年のホットトピック全部入りにできるんじゃないかと思い始める。
  • 基調講演は「基本方針についての講演」らしい。RubyKaigiのキーノートがそうである必要は全然ないけど、そうであっても良い
  • TRICKの話をしながら自然に他のセッション全てのトークについて触れることができればすごくキーノートっぽい気がする
  • この構成の発表ができるのは初日のキーノートだけなので、初日で本当に助かった。
  • スピーカーが発表されたあたりで、この人はきっとこの話をするんだろうな、というのをジャンルごとに分けてメモしていた。
  • どうしても近い要素を入れられなかったトークもあって申し訳なかった。割と頑張ったと思う。
  • 作りかけの作品にどの要素を入れるか考え直したりもした。

一人TRICK作品詳細

  • Most Floral (画像かつruby)
    • 沖縄で昔LTした時に使ったネタを多少グレードアップした。
    • これだけ使いまわしのネタで、見たことがある人もいるかもしれないけど、盛り上がるので入れたかった。開花時期もちょうど良いし。
    • トーク前半で話した「一部のヒアドキュメントやコメントや__END__の後ろには任意のバイト列が書ける」の活用例でもある
  • Most Fresh (国際通り入り口の広告 Wasm)
    • 国際通り入り口のディスプレイに表示する映像を何か作れないかと松田さんに聞かれた。最初断ったけど、やってみたかった・一人TRICKに入れれそうなので作ってみることにした。
    • 国際通りに流れていて不自然ではない映像(お土産のジュースっぽいと思わせてRuby)普通のアスキーアートだけのQuineだと派手さが足りない
    • コードについて語るRubyKaigiらしくなるよう、コードを見せる映像にする、つまりQuineのようなものにする
    • これでWasmネタ(および、いろんなところでRubyが動く話の種)確保したぞ、という気持ち
    • 見た目優先(つまりTRICK成分薄め)で作ったので、作品自体について話せる内容はそんなに多くなかった。代わりにMakingの話でRubyの良さを伝えることにした。
  • Most Wavy
    • Quine要素。TRICK2022の金賞作品に対する別解とも解釈できるというのを伝えたかった
  • Most Dangerous
    • 端末上でマウス操作できるのはインパクトありそう
    • クラゲを複数匹出そうかとも考えていたが、大きいのを一匹だけにした
    • 紐のシミュレーションは過去に2回くらいやったことがあるので確実にいい動きのものが作れる自信はあった
    • Ractor使ったが、複素数を使うとGCで遅くなるというのに直前に気づいて、複素数を使わないように書き直した。
    • TRICK2022の金賞作品のような誤り訂正Quineにするかとも考えたが、見栄えが疎かになりそう・クラゲの移動範囲に制限がかかるのでやめた
  • Most Kaigi-ish
    • SelfTRICKとは無関係に気分転換で作ったもの。いろんなトークに話を繋げるのに都合が良いので使うことにした。
    • Relineのリファクタの話をしたくて、LTでやろうかとも思ったが流石に辛いと思ってやめた。ここで軽く話せてよかった。
  • Most Eternal
    • 一番最初に書き始めたプログラム。締めに使うのにちょうど良いと最初から思ってた。
    • こちらにRactorを使う案も考えたが、クラゲに譲った。
    • 手元にミンサー織りの実物がなくて、画像検索と記憶を頼りに、一番ミンサー織りらしいと僕が思う色合いで作った。
    • 「無限に生成するのでMost Eternalです」と最初に大嘘をついて、最後で種明かし(ミンサー柄に込められた意味がMost Eternal)することにした。
    • 名札のストラップにもミンサー柄が使われていたので、その種明かしにもなったのはラッキーだった。

作品の順序について

  • ミンサー織りは(模様の意味から)最後が相応しい
  • テッポウユリは最初でガッと盛り上げるのに良さそう
  • 海繋がりでWavyの次はクラゲにする
  • 残り二つは、聞く人があまり疲れなさそうな順番で紹介

発表してみて

  • みんなの反応が良くてよかった。途中で静かになった場面はウケてないのか、滑ったのかな、と不安になったりもした。静かに聴くのが普通のはずなのに。
  • 時間ぴったりだったらしいけど偶然です。時計見て調整する余裕もないので見てないし、練習の時も時間は全然安定しなかったので。
  • たくさん感想貰えたのは本当に嬉しかった。他の人の発表でふれられていたのも嬉しかった。
  • どの作品がよかったか聞いてみたところ、テッポウユリとクラゲが人気でした。
  • RubyKaigi後に、TRICKやってみたい、Quine書いてみた、という声も多数聞こえてきた。まさかこんなkaigi effectを発生させることになるとは。Weird Codeはいいぞ!
  • 他のみんなのセッションの前座のような立ち位置のトークをしたはずなのにこんなに感想もらってしまっていいのかなぁと思いながらも感想ブログ読みながらニヤニヤさせてもらいました。

Quineとそうでないものについて

Quineが6作品だと誤解されていそうな感想を結構見かけたけど、Quineのようなものは6作品中2作品だけです。TRICK2022も、10作品のうちQuineは4作品。
見分け方ですが、出力がvalidなコードではなさそうなもの、出力に元のコードと同程度の情報量がエンコードされていなさそうなものはQuineではないです。

今後

今回のRubyKaigi、元々はRelineのリアーキテクチャについて話すつもりでCFPを出していました。
最近1年間で僕がやったことはこんな感じ。

このあたりの真面目な発表もどこかでしたいなー

RubyKaigi 2024 本当にすごいイベントだった

来年のRubyKaigi 2025では奇妙なRubyのコンテスト TRICK2025が開催されます。奇妙なコードを書いて投稿しよう。Let's write weird ruby code!