- Ruby / Rails関連
週刊Railsウォッチ(20210427後編)RactorでUDPサーバーを作る、JSONシリアライザalba gem、AppleのAirTagほか
こんにちは、hachi8833です。次回の週刊Railsウォッチはゴールデンウィーク翌週の5/10(月)を予定しています。
🔗Ruby
🔗 Ruby 3でコアクラスをサブクラス化したときの挙動が変わった件について(Ruby Weeklyより)
つっつきボイス:「Ruby 3.0でいろいろ機能が追加されましたが、そういえばこの変更もあったなと思って取り上げました」「Array
やString
のような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の以下のスライドにありました↓。同ページのリンクも抜き書きしました。
- PR: Let AS::SafeBuffer#[] and * return value be an instance of SafeBuffer in Ruby 3.0 by amatsuda · Pull Request #40663 · rails/rails
- Bug #6087: How should inherited methods deal with return values of their own subclass? - Ruby master - Ruby Issue Tracking System
- Bug #10845: Subclassing String - Ruby master - Ruby Issue Tracking System
- 【Ruby 3.0 Advent Calendar 2020】ArrayやStringのメソッドの返り値が変更された話【15日目】 - ゲームリンクスの徒然なる日常
🔗 alba: 高速JSONシリアライザ(Ruby Weeklyより)
つっつきボイス:「大倉さんの作った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で使うには主に速度面でちょっと辛いかもしれないとは感じました」
「active_model_serializer↓は昔から定番で自分もよく使ってましたが、記事にもあるように最近は少し更新頻度が下がってるかな」
「amatsudaさんのjbは、jbuilder的にビューファイルを作るタイプですね↓」
「JSON APIはプログラムから操作することがほとんどなので、求められる速度やレスポンスの要求が通常のHTMLビューよりもシビアなんですよ」「たしかに」「JSONシリアライザが遅いのはよろしくないので、それもあってactive_model_serializerを使ってました」
以下はつっつき後に見つけたツイートです。
Albaのスター数はRuby Weeklyの効果が大きいと思っていて、中身と宣伝はどちらも大事だなという結論に至っている。
— 大倉雅史(OKURA Masafumi) (@okuramasafumi) April 23, 2021
🔗 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
昨日はmrubyの9歳の誕生日だった!
(写真は2019 RubyKaigi 19.April) pic.twitter.com/tIkdkQJdXH— hiromasa ishii (@Hir0_IC) April 20, 2021
つっつきボイス:「そういえば例年なら今頃RubyKaigiが開催されている時期ですよね」「あぁ、そうだった...」「オンラインのイベントや勉強会が主流になったことで参加の敷居は下がったのはよいことだと思いますけど、人に会ったりおいしいものを食べたりできないのが寂しい」「ですよね」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 CloudflareのWorkers UnboundがGAに(StatusCode Weeklyより)
つっつきボイス:「Cron Triggersで15分かかるような処理がWorkers Unboundだと扱えるとありますね」「あ、なるほど」「昨年のCloudflare記事が予告的な感じで読みやすそうです↓」
Workers Unboundは、オリジナルのCloudflare Workers(現在、Workers Bundledと呼んでいます)と似ていますが、さらに長い実行時間を必要とするアプリケーション向けです。処理負荷がどれだけ高くても、お客様がそれをWorkersに移動させることができるようにCPU制限を拡張しています。そのため開発者は、Edgeで高速かつシンプルな作業をするか、リソースが無制限の集中型クラウドで重いコンピューティングを実行するか、どちらかを選ぶ必要がなくなります。
Workers Unboundのご紹介より
「以前からあるCloudflare WorkersはAWS Lambda@Edgeと競合するサービスですね: Workers Unboundは時間制限を緩和したもので、日本語記事によるとCloudflare Workersとは別サービスということらしい」「なるほど」「そこまで時間のかかる処理をクラウドにキャッシュしたいケースはすぐに思い当たらないけど、画像処理やAIから巨大な予測値を返すような処理が想定されているようなので、そうした用途には悪くないかもしれませんね」
🔗 AppleのAirTag
- 元記事: AirTagは『ヒト』を追跡できない。Appleが実現したプライバシー保護の仕組みを解説(石川温) - Engadget 日本版
- 元記事: Tileがアップルの新しいAirTagを不正競争だと非難 | TechCrunch Japan
つっつきボイス:「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年は持ちますし、電池も交換可能なタイプも前から出ていますよ」「お、そうなんですね」
- サイト: tile
Wave good bye to lost keys and wallets 🌊 Just attach it and go! Shop limited editions → https://t.co/Li7fRo0Xqu pic.twitter.com/muMmXm6CHv
— Tile (@TheTileApp) April 24, 2021
「ちなみにAirTagで使えるCR2032という電池はコンビニでも手に入るんですけど、ちょっと大きめで厚みがあるんですよ」「Wikipedia見てて気づいたんですけど、型番がそのままサイズを反映してるんですね↓」「ホントだ、CR2032だと20mm × 32mmなのか」
🔗言語/ツール/OS/CPU
🔗 研究名目でLinuxカーネルに意図的に不具合パッチを投稿したセキュリティ研究者が問題に
Leadership in the University of Minnesota Department of Computer Science & Engineering learned today about the details of research being conducted by one of its faculty members and graduate students into the security of the Linux Kernel. pic.twitter.com/QE9rrAyyMX
— UMNComputerScience (@UMNComputerSci) April 21, 2021
つっつきボイス:「既にあちこちで語られていますけど、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
Gregはkernelnewbiesの各種質問にこたえまくっているマジ聖人なのにね・・・・
— 漢字変換の権を他人に握らせない🙅 (@naota344) April 22, 2021
「今は情報がいろいろ出ている最中ですが、もう少し経てば情報をまとめたブログが出てくると思います」「本トピックのタイトル付け、悩んでます...」
以下はつっつき後の最新記事です。
参考: University of Minnesota security researchers apologize for deliberately buggy Linux patches | ZDNet
参考: Linux kernel team rejects University of Minnesota researchers’ apology | Ars Technica
🔗 その他CPU
技術情報はこちらです.
1. アーキテクチャ解説https://t.co/fmxIK5uHXC
2. A REG, B REG, I/Ohttps://t.co/nsMolAA4dr
3. FPGA入門https://t.co/sPOIUXT4J6
4. ROM, PC, ALUhttps://t.co/WywMizWk2s
5. ステート・マシンとIDhttps://t.co/MFBBzc1BCx
6. プログラム実行https://t.co/DzUNU2QtoX— リニア・テック 別府 伸耕 (@linear_tec) April 19, 2021
つっつきボイス:「トランジスタでCPUを作ってロボットを動かしてる」「キットが5万円で、今品切れだそうです」「これで何するんですか?」「こういうのは作るだけで楽しいものなんですよ😋」
後編は以上です。
バックナンバー(2021年度第1四半期)
- 20210420後編 ShopifyのJITコンパイラYJIT、PicoRuby、DynamoDBの3つの制約ほか
- 20210419前編 RailsのN+1クエリを定番以外の方法で修正する、GitLabのセキュリティ修正リリースほか
- 20210413後編 RubyMineのRBSサポートとCode With Me、GitHub ActionとDockerレイヤキャッシュほか
- 20210412前編 Active Record属性暗号化機能がRails 7にマージ、RailsNew.ioでrails newオプションを生成ほか
- 20210407後編 エイプリルフールのRuby構文プロポーザル、AWSのVPC Reachability Analyzerほか
- 20210406前編 GitHubが修正したRailsセッションハンドリングの競合、erb/haml/slimの速度比較ほか
- 20210330後編 Active Recordモデル属性暗号化が標準で入る可能性、Flipper Cloud、awesome_printほか
- 20210329前編 特集: Rails更新版の臨時リリースとmimemagic gemのGPL問題
- 20210323後編 GitHub Actionsで使えるruby/setup-ruby、中高生国際Rubyプログラミングコンテスト2020ほか
- 20210322前編 Active Recordのstrict loadingの修正、セキュリティリリースのポリシー追加、N+1チェッカーprosopite gemほか
- 20210316後編 testdouble/standard gem、DockerfileベストプラクティスとDockerfileのlintツールhadolintほか
- 20210315前編 Active Recordのenum関連改修、Active SupportのEnumerableでpluckが使えるほか
- 20210309後編 RubyのIRBに隠れているイースターエッグ、Power Automate Desktop、SQLクエリのありがちなミス6つほか
- 20210303後編 Bundlerのセキュリティ修正、Rubyのガベージコレクション記事、Rubyが2/24に誕生日ほか
- 20210222 ActiveRecord::Relationの新メソッドload_asyncとexcluding、Active Jobのperform_laterの改善ほか
- 20210209後編 Rubyでミニ言語処理系を作る、Kernel#getsの意外な機能、CSSのcontent-visibilityほか
- 20210208前編 Rails次期リリースがバージョン7に決定、thoughtbotのアプリケーションセキュリティガイドほか](/hachi8833/2021_02_08/103801)
- 20210202後編 Ruby 3 irbのmeasureコマンド、テストを関数型言語のマインドセットで考えるほか
- 20210201前編 Webpackerのガイドがマージ、RailsはRuby 3でどのぐらい速くなったかほか
- 20210126後編 Google Cloud FunctionsがRubyをサポート、Ruby 3のパターンマッチングでポーカーゲームほか
- 20210125前編 Railsリポジトリのデフォルトブランチがmainに変更、Rails 6.1はMySQLのENUM型に対応済みほか
- 20210120後編 Ruby 3.0の新機能で遊ぶ、RubyスニペットをJSに変換するRuby2JS、rspec-parameterized gemほか
- 20210113後編 Ruby 3.0 Ractor解説記事、Vercelホスティングサービス、教育用OS xv6ほか
- 20210112前編 Active Recordの範囲指定バリデーション改善、soleとfind_sole_byメソッド、AlgoliaとRailsほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)