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

週刊Railsウォッチ: Rubyオブジェクトモデルクイズの最難問ほか(20230406後編)

こんにちは、hachi8833です。Rails 6.0系は今年2023年6月1日でEOLを迎えますね(Rails 6.1系のEOLはまだ先です)。そろそろ備えておきましょう。

参考: §4 重大なセキュリティ問題 -- Ruby on Rails のメンテナンスポリシー - Railsガイド

Rails 6.0.Zがサポート対象シリーズのリストに含まれるのは、2023年6月1日までです。
Railsガイドより

参考: Ruby on Rails | endoflife.date

週刊Railsウォッチについて

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

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

🔗Ruby

🔗 flipper gemのベンチマークを取って高速化した話(Ruby Weeklyより)

# 同記事より
require 'bundler/setup'
require 'flipper'
require 'stackprof'

flipper = Flipper.new(Flipper::Adapters::Memory.new)
feature = flipper.feature(:foo)
actor = Flipper::Actor.new("User;1")

profile = StackProf.run(mode: :wall, interval: 1_000) do
  2_000_000.times do
    feature.enabled?(actor)
  end
end

result = StackProf::Report.new(profile)
puts
result.print_text
puts "\n\n\n"
result.print_method(/Flipper::Feature#enabled?/)

つっつきボイス:「flipperはフィーチャーフラグをWebインターフェイスでオンオフできるgemですね(ウォッチ20220131)」「ベンチマークスクリプトを書いて実行したことで遅い原因を突き止めて改善したのか」「改善の効果すごい」

jnunemaker/flipper - GitHub

  • enabled?(アクターなし): 〜35%
  • enabled?(アクター1個): 〜50%
  • enabled?(アクター3個): 〜250%
  • enabled?(アクター5個): 〜500%
  • get_all(Active Recordアダプタの2,000行): 〜800%
    同記事より

🔗 Rubyでビットマップ行列と無向グラフを扱う(Ruby Weeklyより)


つっつきボイス:「@tenderloveさんのブログです」「ビットマップ行列(bitmap matrix)は白黒2値を扱う行列らしい」「無向グラフの一種である干渉グラフ(interference graph)というものをビットマップ行列で生成するモジュールをRubyで書いたようですね」「gemにするほどでもないのでそのまま記事に貼ったと書いてある」「コード書いてて楽しかったそうです」

参考: 無向グラフ -- グラフ理論 - Wikipedia
参考: Interference graph(PDFスライド)

🔗 Rubyの配列で隣り合う要素同士を比較する(Ruby Weeklyより)


つっつきボイス:「こういう配列の要素を2個ずつ比較するんだそうです↓」「2個ずつの配列をどうやって作るかがポイントかな」

# 同記事より
nums = 10.times.map { rand(100) }.sort
=> [55, 59, 65, 70, 75, 79, 84, 87, 89, 94]

injectあたりで頑張るのかなと思ったら、each_cons(2)を使って2個ずつの配列にしている↓」「each_consなんてメソッドがあるんですね」

# 同記事より
diffs = nums.each_cons(2).map { |n1, n2| n2 - n1 }
=> [4, 6, 5, 5, 4, 5, 3, 2, 5]
diffs.min
=> 2

参考: Enumerable#each_cons (Ruby 3.2 リファレンスマニュアル)

「もうひとつの方法は、rotate(1)で要素を1個ずらした配列をzipで元の配列の要素とペアにするのか、なるほど」「その手があったか」「プロコン的な頭の体操を感じますね👍」

# 同記事より
diffs = nums.zip(nums.rotate).map{|n1 , n2| (n2 - n1).abs}
=> [4, 6, 5, 5, 4, 5, 3, 2, 5, 39]
diffs.min
=> 2

参考: Enumerable#zip (Ruby 3.2 リファレンスマニュアル)
参考: Array#rotate (Ruby 3.2 リファレンスマニュアル)

🔗 「Rubyオブジェクトモデル」クイズの最難問はどれか


つっつきボイス:「VectorLogicのクイズシリーズをこれまで何度か取り上げてきました(ウォッチ20230221ウォッチ20230322)が、今回はRubyオブジェクトモデルのクイズ↓の回答を考察する記事を翻訳し始めたところです」

参考: Test Yourself on Ruby Object Model

「当然ですが、クイズを解いてから読む方がいいですよと書かれてますね」「第6問が最難問か」「"時間制限はちょっと厳しかったかもね"、実際厳しかったな〜」「時間に追われて誤答する人、やっぱり結構いる」「全問正解や全問不正解になる問題だと測定の意味がなくなるので、問題づくりと配点は大事ですね」

🔗 その他Ruby


つっつきボイス:「RubyKaigi 2023のイベント内イベントです」「KeebKaigiってキーボードの会議なのか」「前回のRubyKaigi 2022で行われていたキーボードの展示↓が盛況だったのでイベント化したんでしょうね」


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

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

🔗 BigQueryの料金体系が変更


つっつきボイス:「料金体系が変わるんですか?」「まだ詳しく見ていませんが、圧縮されたストレージをベースにした課金モデルに変わったり、オートスケーリングの課金方法も変更されたらしい」「単純に安くなったみたいな話ではないんですね」「データの種類や使い方によっては従来より安く使えそう」

参考: Introducing new BigQuery pricing editions | Google Cloud Blog

🔗CSS/HTML/フロントエンド/テスト/デザイン

🔗 アプリ内OAuth 2.0アクセスのWebView利用が非推奨になる


つっつきボイス:「今日の社内技術トピックで話題になっていたのを取り上げました」「アプリ内WebViewでOAuth認証を使っていたアプリにとっては影響が大きいですね」

参考: OAuth 2.0 — OAuth

🔗 HTMLに<search>要素が追加される


つっつきボイス:「これまでの<input type="search">に加えて<search>要素がWHATWGの仕様に追加されたのか」「HTML5の<article><address>みたいなセマンティックな要素なんですね」

参考: § 4.4.15 The search element -- HTML Standard

<!-- html.spec.whatwg.org より -->
<body>
  <header>
    ...
    <search title="Website">
      ...
    </search>
  </header>
  <main>
    <h1>Hotels near your location</h1>
     <search>
       <h2>Filter results</h2>
       ...
     </search>
     <article>
      <!-- search result content -->
    </article>
  </main>
</body>

参考: Web Hypertext Application Technology Working Group - Wikipedia

「WAI-ARIAのLandmark Rolesでは、formmainのようなロールには対応する<form><main>要素があるのに、searchだけ対応する要素がなかったのが、今回足されたということらしい」「なるほど」

参考: WAI-ARIAの基本 - ウェブ開発を学ぶ | MDN
参考: §5.3.4 Landmark Roles -- Accessible Rich Internet Applications (WAI-ARIA) 1.2


後編は以上です。

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

週刊Railsウォッチ: Arel::Nodes::NodeにAPIドキュメントが追加、rubocop-mdほか(20230405前編)

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

Ruby Weekly


CONTACT

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