こんにちは、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
🔗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)」「ベンチマークスクリプトを書いて実行したことで遅い原因を突き止めて改善したのか」「改善の効果すごい」
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で行われていたキーボードの展示↓が盛況だったのでイベント化したんでしょうね」
カンファレンス会場の廊下のソファにキーボードを並べるという明らかに異常な催しが #rubykaigi pic.twitter.com/qFKEBwEwK0
— tagomoris (@tagomoris) September 9, 2022
以下はつっつき後に見つけたツイートです。
#rubykaigi のべんりまとめだ!! RubyKaigi 2023 - ruby-jp https://t.co/fKUFN4WhiY
— Kakutani Shintaro (@kakutani) April 5, 2023
🔗クラウド/コンテナ/インフラ/Serverless
🔗 BigQueryの料金体系が変更
つっつきボイス:「料金体系が変わるんですか?」「まだ詳しく見ていませんが、圧縮されたストレージをベースにした課金モデルに変わったり、オートスケーリングの課金方法も変更されたらしい」「単純に安くなったみたいな話ではないんですね」「データの種類や使い方によっては従来より安く使えそう」
参考: Introducing new BigQuery pricing editions | Google Cloud Blog
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 アプリ内OAuth 2.0アクセスのWebView利用が非推奨になる
つっつきボイス:「今日の社内技術トピックで話題になっていたのを取り上げました」「アプリ内WebViewで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では、form
やmain
のようなロールには対応する<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前編)
- 20230330後編 書籍『Rebuilding Rails』、OpenSSL 1.1.1が今年9月でEOLほか
- 20230328前編 Active SupportにObject#withが追加、カスタム名前空間のサポートほか
- 20230322 Rubyに新しくRJITがマージされた、Shopifyのタスク管理gem maintenance_tasksほか
- 20230315後編 Wasm Workers Server 1.0、mruby 3.2.0リリース、irbtoolsほか
- 20230314前編 Devise 4.9のHotwire/Turbo統合に対応する、英国政府のViewComponentほか
- 20230308後編 Ruby30周年記念イベント、37signalsのデプロイツールmrskほか
- 20230307前編 Action Mailerプレビューで全メールヘッダーを表示可能に、rubocop-graphqlほか
- 20230222後編 Ruby 3.2のData#initializeの設計、ruby-openai gemほか
- 20230221前編 Ruby30周年記念イベント、ActiveRecord APIクイズほか
- 20230215後編 Bundler 2.4リリース、RubyKaigi 2023参加募集開始ほか
- 20230214前編 AssumeSSLミドルウェア追加、Fly.ioとRails 7.1のDocker対応ほか
- 20230202後編 ShopifyのYJIT記事、RubyGemsのgem execコマンドほか
- 20230201後編 Ruby 3.2のベンチマーク記事、dry-cliで高度なCLIを作るほか
- 20230131前編 Evil Martiansが使っているgem、JavaScriptガイドが更新ほか
- 20230125前編 2022年のRails振り返り記事、RailsにDocker関連ファイルが追加ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)