@ledsun blog

無味の味は佳境に入らざればすなわち知れず

#RubyKaigi2024 の思い出 その2

Day 2

Leveraging Falcon and Rails for Real-Time Interactivity

Samuel Williams さんの非同期に関する発表です。 具体的にはAsyncやFalconの話です。 GitHub - socketry/flappy-bird を動かす話です。

動くソースコードが公開されています。

git clone git@github.com:socketry/flappy-bird.git
cd flappy-bird
bundle
bin/rails db:migrate
bin/rails s

flappy-birdを起動した画面

Falcon X Rails でWebSocketを使ったアプリケーションのサンプルとして丁度良さそうです。 ソースコードを見るとこんな感じでとてもシンプルです。

require 'async/websocket/adapters/rails'

class GameController < ApplicationController
  RESOLVER = Live::Resolver.allow(FlappyView)

  def index
    @view = FlappyView.new
  end

  skip_before_action :verify_authenticity_token, only: :live

  def live
    self.response = Async::WebSocket::Adapters::Rails.open(request) do |connection|
      Live::Page.new(RESOLVER).run(connection)
    end
  end
end

Async::WebSocket::Adapters::Railsは、Async::WebSocketというWebSocketのためのgemの一部のようです。 Live::PageLive gemの機能のようです。 細かい機能はよくわかりません。

以前faye-websocketを使って、WebSocket通信をする sinatraアプリケーションを作ったことがあります。 アプリケーション開発者視点でどういう点が違うのか気になっています。

まだActionCableのパッチが本家に入っていないとかで、Ruby on Railsの完全対応はもう少し掛かるようです。

Does Ruby Parser dream of highly expressive grammar?

ydah_ さんの発表です。 正直、パーサー周りはよくわかりません。 細かい感想が言えません。 が、ydah_さんの熱い思いが伝わる良い発表でした。 「よくわからんけど、なんかすごい」のがRubyKaigiっぽくて良かったです。

壇上のydah_さんの写真

このステージの照明がかっこいいです。

lanch

ydah_ さんの発表後の流れで、パーサー陣営とお昼を食べに行きました。スピーカーとコミッターばかりの濃いやつです。 ydah_ さんの発表がRubyKaigiぽくて良かったという話をしました。

LRパーサーに興味のあるスピーカーとコミッターの写真

RubyGems on ruby.wasm

我らが kateinoigakuun さんの発表です。 僕的にベストトークです。

ruby.wasmでmastdonを動かす、だいぶ意味がわからないデモがみれました。 gemが動くし、C拡張も動くんですよ。 ここまでは、直近のコミットから推測できていました。 ブラウザでmastdonが動くってことは、外部からHTTPリクエストを受け付けられるのです。 不思議です。 どうもServiceWorkerをつかってHTTPリクエストをフックしているぽかったです。

C拡張を動かすには、C拡張のビルドの仕組みにも変更が必要だったようです。 Feature #20345: Add `--target-rbconfig` option to mkmf - Ruby master - Ruby Issue Tracking System で対応しています。 仕組みとしてはRubyとC拡張を両方WebAssemblyにコンパイルしたうえで、 WebAssemblyバイナリ上でC拡張の関数ポインタの場所を良い感じに調整して RubyからC拡張の関数を参照できるようにしているみたいです。 みたいです・・・っていうか、全然よくわかっていなくて、 雰囲気で書いています。

また、Futureの話が熱いです。 ロードマップの図にサイズの図が熱いです。

ロードマップの図

サイズの図

Rubyインタプリタのサイズが小さくなることを明確なゴールにしているのがすごく良いんですよ。 セッション後に質問したら、めっちゃ小ちゃくなるには年単位の時間が掛かりそうとのことでした。

個人的な予想では、ruby.wasmをつかったRuby in browserが流行るかは、インタプリタのサイズよりキラーアプリの有無が鍵だと思っています。RubyにとってのRuby on Railsみたいなやつです。 商売として取り組むには、新しい技術に挑戦するリスクをとる見返りがほしいですよね。

インタプリタサイズの縮小が実現する頃までには、キラーアプリか、キラーアプリを作れる土壌を用意しないといけないなー、と思っています。 そういうのもあって僕の発表では、フレームワークっていうわかりやすい飛び道具を打ってみました。

参考: RubyKaigi 2024 で学んだこと・社員として参加する理由ruby.wasm関連の感想があって面白いです。

RuboCop: LSP and Prism

最高にかっこいいkoicさんです。

最高にかっこいいkoicさんの写真

自主休憩

三日目には自分の発表があるので、スケジュールをタイトにしたくありませんでした。 ここで体力温存がてら、お土産を買いに行きました。 なはーとの国際通りに近い立地が最高です。

pockeさんが食べてて美味しそうだったので、ブルーシールでチョコミントを食べました。

ブルーシールのチョコミントアイスの写真

参考: 2024-05-15 - diary

Lightning Talks

Visualize the internal state of ruby processes in Real-Time

hogelogさん

自作のmetorics_monitor gemの紹介です。

The Frontend Rubyist

largo さん

https://koans.idogawa.com/https://rubygems.org/gems/jsg の紹介です。

ruby.wasm仲間です。 一緒に盛り上げて行きましょう。

Enjoy Creative Coding with Ruby

chobishibaさん

ps5.js のラッパーのp5rbを使ったクリエイティブコーディングの紹介です。 p5.rb Editor を使っているのでこちらもruby.wasm仲間でした。

参考: p5.rbでのコーディングあそびをはじめました|bash note

Rearchitect Ripper

金子さんすごすぎる。 通常セション、LT、Commiter and the worldの三連投です。

The Journey of rubocop-daemon into RuboCop

fothe さん

rubocop-daemonというrubocop用のサードパーティーのgemを作っていたら、 突然rubocop本家に取り込まれたそうです。 夢のある良い話です。

The test code generator using static analysis and LLM

mikiko_bridge さん

omochiの紹介です。 テストがないコードを探してきて、 LLMでテストコードを生成するgemだそうです。 便利そうです。

Contributing to the Ruby Parser

S-H-GAMELINKS さん 記憶がありません。

Improved REXML XML parsing performance using StringScanner

naitoh さん

Ruby製のXMLパーサーREXML を速くした話です。 regexp を string scannerに置き換えたら5%くらいの高速化したそうです。 YJIの効きが良くなったそうです。 メモリ使用量が減ったからのようです。

Hotspot on Coverage

shia さん

ISCON用にホットスポットを探す akainaa | RubyGems.org | your community gem host を作って役に立てた話です。 本来はテストの薄いところを探すためのカバレッジレポートを、実行回数の多いホットスポットを探すためにつかう話です。 逆転の発想がかっこいいです。

ハイライト範囲をかっこよくするためにprismつかっているそうです。 結果のわかりやすいUIにこだわっているところもかっこいいです。

Drive Your Code: Building an RC Car by Writing Only Ruby

hachi さん

picorubyを使った電子工作で作ったラジコンカーの紹介です。 物理的に動く物が作れるの良いですね。

An anthropological view of the Ruby community

英語がちょっと難しかったです。 というか力尽きて寝てました。

dinner

株式会社ラグザイアはプラチナスポンサーをやっていてブースを出しています。

スポンサーのロゴを表示するスライドの写真

夜はブース運営をしてくれてる会社のメンバーと焼鳥屋さんに飲みに行きました。

焼鳥屋さんの昼間の姿の写真