RubyKaigi2022 Day1~Day3参加レポート
拙い感想になりますが、次回のRubyKaigiではセッションで聞いた内容を咀嚼して分かりやすくレポートできるように…という決意表明も込めて現時点の理解でアウトプットしておきます(ほぼ皆さんすごい!という感想かメモ)。
※この記事には誤った解釈が含まれるかもしれません。
TL;DR
Rubyistはもちろん、これからRubyistになろうとしている人にも楽しめるイベント。
RubyKaigiに参加すると…
Rubyがより好きになる!
多くの人に支えられてRubyの恩恵が受けられていることを実感する!感謝!
RubyへContributionしよう!という気持ちが高まる!
素晴らしいノベルティがたくさんもらえる!
開催地の美味しいものが食べられる!
Rubyist同士で交流できる!(自分は全然できてなかったけど…)
RubyKaigiに参加した理由
10月から入社する会社ではRuby on Railsを用いたWebアプリケーション開発をやっていくことになります。
そこで、これからRubyとRuby on Railsで楽しんで開発していくぞ!といったモチベーションを高めることが大きな理由です。
あとは私の地元三重県での開催ということも相まって参加を決めました。
予習
RubyKaigi チーフオーガナイザーの @amatsuda さんが見どころを解説するイベントに参加しました。
また、わいたなか(@ytnk531)さんがまとめてくださった以下Notionの内容をありがたく拝見しつつ、追加でわからない点を調べていきました。
セットリスト
SmartHRさんが作られた公式スケジュール作成・共有アプリケーションで視聴予定を登録して臨みました。
基本的に日本語スピーカーのセッションを中心にスケジュールを作成しました。
英語を身につけねば…(英語が聞き取れると RubyKaigiがより楽しめると思います)。
Day1
ぼっち参加でドキドキしながら受付へ。
検温とTicket確認を終えると出席者パスと名札ストラップをもらいました。
ペンで名前とTwitterアカウントを両面記載したら、そのまま流れに身を任せてRubyKaigi2022仕様のTシャツと ステッカーを受け取りに行きました。
ホール前にはWi-FiパスワードとQRコードの掲示が!これで思う存分Twitterができますね。
いよいよ大ホールへ!
Ruby meets WebAssembly
ブラウザでRubyが動く!デモもあって分かりやすかった。
Cookpadさんのruby-pazzlesもこれを使っているみたいです。
https://ruby-puzzles-2022.cookpad.tech/
駆け出しRubyistの自分にも分かりやすく、トップバッターにふさわしい素晴らしいKeynoteでした。
Lunch Break
初日のKeynote後はすぐにお昼休み。
東洋軒の幕の内弁当と松坂牛ローストビーフをいただきました!
めちゃくちゃ豪華で美味しかった〜
昼食後はスポンサーブースへ。
スパゲッティコードくじやガチャガチャ、おみくじ、クイズ、2進数足し算RTA、日替わりクイズなどなど楽しい催しと素敵なノベルティでいっぱいの空間でした。
Making MaNy threads on Ruby
https://atdot.net/~ko1/activities/2022_rubykaigi2022.pdf
Rubyでたくさんのスレッドをたくさん扱えるようにしていくというお話。
単位は10~100万スレッドの活用を想定しているとのこと…!
Ractorやマルチスレッドプログラミングについて要勉強。
Types teaches success, what will we do?
gem_rbs_collectionへのContributionについて、既存のGemに対する修正、あるいは新規でGemの型定義追加2つのアプローチについて丁寧に解説されていました。
RBS、Steepで積極的に型定義使っていきたい。そして、RubyへのContribution意欲が高まるような良いセッションでした。
Tools for Providing rich user experience in debugger
ChromeDevToolsでJavaScriptのデバッグはよく使っていたけど、Rubyのデバッグもできるのは便利!
Afternoon Break
もぐもぐタイムはへんば餅が配られてました。
食べチョクさんブースで振る舞われていたお茶とよく合います。
美味しかった。
Towards Ruby 4 JIT
JITは調べたけどよくわかっておらず…要勉強。
英語あまり聞き取れなかったけど@k0kubunさんが途中日本語になったのが面白かった!
TRICK 2022 (Returns)
審査員たちも解読が難しいような作品があったり、審査員が応募した作品が多くランクインしてたり、どれも発想が面白すぎて実際に動かしてみたいものばかりでした。
Ruby3.2のSampleとして同梱されるらしい笑
Day2
Matz Keynote
Rubyは死んだ。の話を生で聞いた。
コミュニティが重要でContributionが必要。Contributionの方法についても話されていた。
価値(生産性、コミュニティ、楽しさ、お金)を追い求めていく。
Do Pure Ruby Dream of Encrypted Binary Protocol?
QUICという UDP通信プロトコルをRubyのみで実装していくよという話。
Ractorによる通信プロトコルの実装は難しく一旦断念してRubyのみで実装に転換。
Rubyにはbyte配列を扱う型がない。また、文字列に対してunpack1が複数回呼び出しできてしまう問題があったりした。
Make RuboCop super fast
require rubocop が毎回異なるプロセスで実行されてしまうことでRubocopが重くなってしまう。
require rubocop/server でserver modeに必要なものだけに絞ることで850倍の高速化を実現。
shellでrubocop serverが起動しているか確認して処理を分岐しているらしい。
Lunch Break
2日目からはスポンサーブースのスタンプラリーが始まったので、昼食後混む前に先に回ってしまおうとせっせとスタンプを集めていました。
全部揃うとピンバッジが受付でもらえます。全3種類。
2日目は別のものを頂こうと思っていましたが流石になくなってしまっていました。
松阪牛弁当と東洋軒のカレー人気恐るべし…!
1日目と同じ幕の内弁当をいただきました。相変わらず美味しかった。
Method-based JIT compilation by transpiling to Julia
Rubyでもデータ処理に使えるライブラリが揃ってきているらしい。
PythonのNumpaというソリューションをRubyのJITコンパイラにも応用できるのではという話。特定ライブラリを使ったコードの場合のみ、高速でマシンコードを生成する。
難しいことはJuliaにやらせよう!
Juliaは最適化されたネイティブコードを生成してくれる。
ただしRubyの動的性を犠牲にした上で高速化することの懸念、Juliaがないと動かないなどの課題がある。
How fast really is Ruby 3.x?
Railsではなく、fluentdによるRubyのパフォーマンス評価。
Ruby3x3が実現してもRailsには全体へのインパクトが少ない。
fluentdはRubyを含めたスナップショットがあるため、過去のRubyとの比較ができる。過去のRubyと比較するとRuby3x3は概ね達成できている!
しかしながら、Ruby3.2(YJITも含む)がLua、Perl、Pythonといった他のスクリプト言語と比較するとまだまだ遅いので、Pythonのシャロン計画のように毎年計画的な速度改善をしていく必要があるとのこと。
Packet analysis with mruby on Wireshark - dRuby as example
WiresharkにRubyを理解させるためのmrubyを組み込んでdissectors拡張を作る話。
ネットワーク関連は基本情報レベルしか理解できていないのでもう少し趣味で遊ぶなどして理解を深めたいなあ。
途中プロバイダの問題でネットワーク障害が発生し、セッションが中断、オンライン参加者が視聴できない状態となりましたが、後日録画した動画をアップしてくださるそうです。
スタッフの皆さん調査・復旧対応 本当にお疲れ様でした…!
Afternoon Break
Day2のもぐもぐタイムは伊勢海老煎餅、あおさと松坂牛のおかき、いちじくとマスカットと盛りだくさん。どれも美味しかった。
Caching With MessagePack
Englishスピーカーのセッションも聞いてみたい!と思って突撃しましたが、英語も内容も実力不足で置いていかれてしまいました。。。
Ruby Committers vs The World
ステージにRuby Committerが上がり、Rubyの未来について語ってもらおうというセッション。
野心的な構想や仕様に関する議論もあって、これからもRubyをより良くしていきたいという気持ち溢れる時間だったかと思います。
Day3
Megaruby - Running mruby/c programs on Sega Mega Drive
開場前から中ホールの外に響く8ビット音…!楽しみにしていたセッション。
オープンソースのSGDK(Sega Genesis Development Kit)というものがあるらしい。
メモリは64KB(MBじゃない…!)。
標準出力ができない(printfデバッグやロギングができない)。
色々ハードの制約がある中で非常に面白いチャレンジ。
プレゼンツールはmega-presentを使用しているらしい。使ってみたい。
まきびしを忍者がジャンプで避ける横スクロールアクションゲームやWordleなどゲームも盛り込まれていて、遊び心満載のプレゼン!
期待していたセッションでしたが、期待以上に楽しいセッションでした!!
スーパーファミコンとかでもできるのかな…?
RBS generation framework using Rack architecture
ロジックモデル(=社会的インパクトを説明するためのロードマップ)を用いてRBS型ファイルの自動生成フレームワーク(orthioses)開発にアプローチしていく話。
ロジックモデルによるアプローチは実践してみたい。
orthosesはRails版のorthoses-railsがあり、こちらはActiveRecordに対応している。
orthosesは今後yard読み込みや型推定、rolifyのサポートなどを予定しているとのこと。
Let's collect type info during Ruby running and automaticall
続けて型定義自動生成に関するセッション。
こちらは実行時に動的に生成するもの。静的なアプローチはTypeProfで既にやっていた。
FizzBuzzやActiveRecordによるデモで非常に便利なことが伝わったが、それと同時にスピーカーのVim捌き、AAなどにも注目が集まった。
私もVimmerになりたいので転職ドラフトブースでもらったVimチートシートうちわを見ながら修行します。
Why is building the Ruby environment hard?
Rubyのよくあるビルドエラーについて、解決法とともに紹介してくれたありがたいセッション。
Ubuntu22.04でのビルドやMacOSでのRuby2.6ビルド等の解決法に始まり、未来に発生すると予想されるビルドエラーについても言及されていて非常に助かる(macOS13(Ventura)へのアップデートは待った方がいい!!!!)。
ただ、OSやライブラリの最新版が出た時はビルドエラーを踏んで先行者利益が得られるので美味しいかも。
Lunch Break
今日こそは東洋軒カレー!松坂牛弁当!と思っていたけど、早々に完売。
3日目は幕の内弁当ベジタリアンVer.を頂きました。
昼食後はスポンサーブースで日替わりのクイズを解いてみたり、キーボード会議を眺めてみたり(入手に際しての為替や打鍵音の仕組みとか本格的で面白かった)。
The Better RuboCop World to enjoy Ruby
Rubocopのルール作りを考え、より良くしようというセッション。
スライドに載せられた絵は全てmidjournyで生成したものらしい。面白い!笑
初心者にとってRubocopのルールに従ったものが正しいRubyとなってしまう懸念がある。
Rubyのスタイルガイドは動的なのでは?→Rubocopのスタイルガイドに対する引っ掛かりを感じる。
Rubocopのルール作りは大変。
Rubocopの使い方を強制レベルと参考レベルで分けるのはどうかという提案。
参考レベルは改善ポイントに気づけるように理想的なルールを記述し、違反にはしない。このルールは参考用にしようといった方がコードを直さないより罪悪感が少ない。
0/1で判定できない領域を扱いやすくしよう!
Ethereum for Ruby
サインインやNFTなどのデモを見せてもらいましたが、そもそものEthereumやブロックチェーンに関する知識が不足しているため十分に理解できなかった。
Rubyでブロックチェーンの実装ができるんだなあ。
Day2のRuby Committers vs The Worldでデータ処理に関するRuby開発をやっている Commiterが「目的はないが、これからRubyが活躍できる場を用意する」と言っていたように色々なことがRubyでできるようになっていることが改めてすごいと感じた。
String Meets Encoding
String#splitの処理を見直して1.1倍の速度改善をした話。
どの関数が重たいかどうかプロファイリングし、文字コードごとにベンチマークを取って確認。調査〜確認、修正に至るまでの過程が非常に勉強になった。
Afternoon Break
3日目のもぐもぐタイムはRubyKaigi特製焼印付きカステラ!かわいい!
クラウドワークスさんのノベルティTシャツも3日目にしてゲットできました。
History of Japanese Ruby reference manual, and future
ruremaはRubyリファレンスマニュアル刷新計画のこと。
RD記法というものからマークダウン記法への移行を進めている。
ドキュメントの書き方に関するドキュメントが不足している等の課題もある。
簡単なところからruremaへのContributionもやっていきたい!!
Stories from developing YJIT
英語とYJITナニモワカラナイ…。Cの知識も必要そう。
#rubykaigiに助けを求めたけど結構みんな同じ状態だった笑
最後に
日程が進むにつれてランチの配布動線が整理されていたり、セッションが後ろ倒しになった際はシャトルバスの運行をその分延長する対応を行なったり、3日間に渡ってイベントが改善され、成長しているように感じました。
Kaigi運営に携わった方々には感謝しかありません。本当にありがとうございました!
次回Kaigiにも参加したいなあと思っており、それまでには何かしらRubyに貢献して臨みたい所存です。