Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ(20210427後編)RactorでUDPサーバーを作る、JSONシリアライザalba gem、AppleのAirTagほか

こんにちは、hachi8833です。次回の週刊Railsウォッチはゴールデンウィーク翌週の5/10(月)を予定しています。

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗Ruby

🔗 Ruby 3でコアクラスをサブクラス化したときの挙動が変わった件について(Ruby Weeklyより)


つっつきボイス:「Ruby 3.0でいろいろ機能が追加されましたが、そういえばこの変更もあったなと思って取り上げました」「ArrayStringのようなRubyのコアクラスをサブクラスに継承して使うのはやめておく方がいいよという記事↓も紹介されてる」「継承でない方法にしましょうということですね」

参考: Why you shouldn’t inherit from Ruby’s core classes (and what to do instead) – avdi.codes

以下はつっつき後に手元で確認した動作です。

class Bar < String
end

bar = Bar.new

# Ruby 2.7までの場合
bar.upcase.class #=> Bar
# Ruby 3.0の場合
bar.upcase.class #=> String

参考: プロと読み解く Ruby 3.0 NEWS - クックパッド開発者ブログ

  • Arrayのサブクラスのメソッドが、サブクラスではなく、Arrayクラスのオブジェクトを返すようになった
  • Stringのサブクラスのメソッドが、サブクラスではなく、Stringクラスのオブジェクトを返すようになった
    同記事見出しより

「そういえばRailsにもこのあたりに関連した修正が入ってましたね」「そうだったかも」「探してみます」「知らないうちに型が変わるのはしんどいので、この挙動変更は知っておく必要がありますね」


後で探すと、銀座Rails#28の以下のスライドにありました↓。同ページのリンクも抜き書きしました。

🔗 alba: 高速JSONシリアライザ(Ruby Weeklyより)

okuramasafumi/alba - GitHub


つっつきボイス:「大倉さんの作ったJSONシリアライザgemがRuby Weeklyに取り上げられていました」「albaのリリースを見ると2020年1月からなので割と新しいgemなんですね」「fastest!」「JSONのシリアライズはとてもよく使われるので、シリアライズが高速化されるのはいいですね👍」

「ちなみにJSONシリアライザにはいくつか定番があるんですよ↓」

参考: 2020年のRuby/RailsのJSONシリアライザは何を使うべきか問題 - Bouldering & Com.

「Railsに入っているjbuilderは昔から遅いので有名(最近はわかりませんが)↓: それもあって他のJSONシリアライザがいろいろ登場したという側面はありますね」「なるほど」「自分は速度をそれほど気にする方でもないんですが、それでもjbuilderを最初に使ったときに遅いと思ったほどでした: jbuilderはpublic APIなどに利用してpage cacheなどを効かせられるのであれば問題なさそうですが、キャッシュに乗せられないようなAPIで使うには主に速度面でちょっと辛いかもしれないとは感じました」

rails/jbuilder - GitHub

「active_model_serializer↓は昔から定番で自分もよく使ってましたが、記事にもあるように最近は少し更新頻度が下がってるかな」

rails-api/active_model_serializers - GitHub

「amatsudaさんのjbは、jbuilder的にビューファイルを作るタイプですね↓」

amatsuda/jb - GitHub

「JSON APIはプログラムから操作することがほとんどなので、求められる速度やレスポンスの要求が通常のHTMLビューよりもシビアなんですよ」「たしかに」「JSONシリアライザが遅いのはよろしくないので、それもあってactive_model_serializerを使ってました」


以下はつっつき後に見つけたツイートです。

🔗 RactorでUDPサーバーを作る(Ruby Weeklyより)


つっつきボイス:「割と短い記事です」「お、RactorでUDPサーバーですか」「RactorでWebサーバーを書いた人がいたので(Writing a Ractor-based web server · Kir Shatrov)、UDPサーバーを作ってみたということみたいですね」

「UDPソケットを待ち受けるRactor listenerを1つ作って、そこで受信したデータグラムの処理をメッセージ処理用のRactor pipeで受信し、Ractor workerをCPU_COUNT数だけ動かして処理を振り分けている感じですね↓」「ふむふむ」「Ractorの参考になるコード例が増えるのはいいですね👍」

🔗 その他Ruby

つっつきボイス:「そういえば例年なら今頃RubyKaigiが開催されている時期ですよね」「あぁ、そうだった...」「オンラインのイベントや勉強会が主流になったことで参加の敷居は下がったのはよいことだと思いますけど、人に会ったりおいしいものを食べたりできないのが寂しい」「ですよね」

🔗クラウド/コンテナ/インフラ/Serverless

🔗 CloudflareのWorkers UnboundがGAに(StatusCode Weeklyより)


つっつきボイス:「Cron Triggersで15分かかるような処理がWorkers Unboundだと扱えるとありますね」「あ、なるほど」「昨年のCloudflare記事が予告的な感じで読みやすそうです↓」

参考: Workers Unboundのご紹介

Workers Unboundは、オリジナルのCloudflare Workers(現在、Workers Bundledと呼んでいます)と似ていますが、さらに長い実行時間を必要とするアプリケーション向けです。処理負荷がどれだけ高くても、お客様がそれをWorkersに移動させることができるようにCPU制限を拡張しています。そのため開発者は、Edgeで高速かつシンプルな作業をするか、リソースが無制限の集中型クラウドで重いコンピューティングを実行するか、どちらかを選ぶ必要がなくなります。
Workers Unboundのご紹介より

「以前からあるCloudflare WorkersはAWS Lambda@Edgeと競合するサービスですね: Workers Unboundは時間制限を緩和したもので、日本語記事によるとCloudflare Workersとは別サービスということらしい」「なるほど」「そこまで時間のかかる処理をクラウドにキャッシュしたいケースはすぐに思い当たらないけど、画像処理やAIから巨大な予測値を返すような処理が想定されているようなので、そうした用途には悪くないかもしれませんね」

参考: Lambda@Edge | AWS

🔗 AppleのAirTag


つっつきボイス:「AppleのAirTag、Tileより高いらしいですね」「4個で1万円超えか」「値段的にもTileで十分なので自分はAirTagが欲しいとは思わないかな」「性能より個数が欲しい方なのでTileにしたいです」

「AirTagはApple純正な分、初めて使うときの設定はやりやすそうなので、たとえば自分の親に使ってもらうときには楽かもと思いました」「あ、それもそうか」「Appleはそういう使い勝手の敷居を下げるのがうまいですね」「AirTagは向きまで特定できるのがちょっとスゴい」

「あとAirTagもオンラインで買うと刻印入れてくれるらしいですよ↓」「あ、物理の刻印なんですね」「刻印サービス、なぜかあまり人気がないんですよ」「MacBookやiPhoneに刻印入れると後で転売しにくくなりますし」

参考: 無料のメッセージ刻印とギフト包装 - Apple(日本)

「AirTagのようなものだと落としたときに名前がないと誰のものかわからなくなるので、そういう場合に刻印が役に立ちそう」「刻印にはApple絵文字も使えますよ」「Appleがプライバシー方面に力を入れている点は安心材料かな」

「Tileはラインナップも豊富で安いですし、この種のメーカーとしては一番長くやっていますよね」「そうそう、他の製品だとサービス終了したり」「Tileはマニア層だけではなく一般レベルで使われていますね」


「そういえば自転車にTile付けようかなと思ってたところです」「バイクの盗難防止的なやつですね」「自分も自転車と自動車とキーにTile付けてます」「心配なのはバッテリーがどのぐらい持つかなんですが」「Tileは余裕で1年は持ちますし、電池も交換可能なタイプも前から出ていますよ」「お、そうなんですね」

「ちなみにAirTagで使えるCR2032という電池はコンビニでも手に入るんですけど、ちょっと大きめで厚みがあるんですよ」「Wikipedia見てて気づいたんですけど、型番がそのままサイズを反映してるんですね↓」「ホントだ、CR2032だと20mm × 32mmなのか」

参考: コイン形リチウム電池 - Wikipedia

🔗言語/ツール/OS/CPU

🔗 研究名目でLinuxカーネルに意図的に不具合パッチを投稿したセキュリティ研究者が問題に

つっつきボイス:「既にあちこちで語られていますけど、Linuxに意図的に脆弱性を埋め込むのはもう言い訳しようがない」「これはそうとしか言いようがないですね」「コードやレビュー手順を解析して脆弱性を指摘する研究とかならまだしも、実践するのは完全にアウト」

「今の時点で(注: 2021/04/22 20:00頃)、ミネソタ大ドメインから投稿された全てのコミットをLinuxリポジトリからRevertするパッチができたようですね↓」「パッチを作ったGregさんは温厚な人柄で知られているんですけど、そのGregさんを怒らせるとは」

参考: [PATCH 000/190] Revertion of all of the umn.edu commits - Greg Kroah-Hartman
参考: グレッグ・クロー=ハートマン - Wikipedia

「今は情報がいろいろ出ている最中ですが、もう少し経てば情報をまとめたブログが出てくると思います」「本トピックのタイトル付け、悩んでます...」


以下はつっつき後の最新記事です。

参考: University of Minnesota security researchers apologize for deliberately buggy Linux patches | ZDNet
参考: Linux kernel team rejects University of Minnesota researchers’ apology | Ars Technica

🔗 その他CPU

つっつきボイス:「トランジスタでCPUを作ってロボットを動かしてる」「キットが5万円で、今品切れだそうです」「これで何するんですか?」「こういうのは作るだけで楽しいものなんですよ😋」


後編は以上です。

バックナンバー(2021年度第1四半期)

週刊Railsウォッチ(20210426前編)Hotwireの詳細な解説記事3本、Rails 7に入る予定の機能ほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Ruby Weekly

StatusCode Weekly

statuscode_weekly_banner


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。