Sendagaya.rb #133
Sendagaya.rb #133に行って来た。今日は、前半『メタプログラミングRuby 第2版』を読んで、後半はAction Cableを読んだ。
メタプログラミングRuby 第2版
fukajunさんが「本を読むってどうやってやるんですかねえ?」って言ったけど誰も答えを持ち合わせていなかった。十五分みんな黙読し、その後気になったことを話すというスタイルになった。範囲は「2章 月曜日:オブジェクトモデル」の始めから「2.2.4 オブジェクトとクラスのまとめ」まで。みんなRubyを書けるので特に問題がなく、字が汚いとか
module Rake
class Task
# ...
を
class Rake::Task
# ...
って書いたらHoundCIに怒られるんだけどなんでだろう? といったことを話していた。
次回は「2.2.5 ネームスペースを使う」から。毎週ちょっとずつは読むとのこと。
また、ここのところ本にシンタックスハイライトを入れるのをやっていたので、この本も帰ったらやろうと思っていたが、始めからハイライトされていた。
Action Cable
ApplicationCable::Channel
のユーザー定義のメソッドのスタックトレースを遡って、どこから呼ばれるのかを見ていった。
fukajunさんがプロジェクターで映しながらエディターを開いてソースを追い掛け、みんなで横からああだこおだと言っていた。読んだのはだいたいこの辺。
- action_cable/connection/subscriptions.rb
- action_cable/connection/message_buffer.rb
- action_cable/server/worker.rb
一度CelluloidをやめてConcurrent Rubyにしたところ(3b7ccad)、それを巻き戻し(d0393fc)、更にまた巻き戻す(01c3200)ということをしていて、この辺の扱い大変なんだなあという話をした。使いたいのはCelluloidの方であるようだ(#22977)。
ここを読んだおかげで、Rails5.0.0-beta1のActionCableを使って超簡易チャットを実装してみたにある
class MessagesController < ApplicationController
def create
ActionCable.server.broadcast "messages",
message: params[:message][:body],
username: cookies.signed[:username]
head :ok
end
end
みたいなコードを見ても驚かずに「なるほどActionCable.server.broadcast
に渡している"messages"
コマンドは別スレッドで実行されるからここはブロックせずに、即座にブラウザーに応答することができるんだな」と考えることができるようになった(でも、僕は気にならないけど、コントローラー内でこういうことするのに違和感を覚える人もいた)。
electron、rails-assets、JavaScript生態系
なんかelectronが盛り上がってるらしく、夕食を頂きながら仕組みとかHTMLで作るのどうなの? とか、rails-assetsとか派生してJavaScriptの開発環境って今どんな感じなの? といった話をした。