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

週刊Railsウォッチ: Kaigi on Rails 2023プロポーザル募集、rubocop-magic_numbersほか(20230721後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

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

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

🔗Rails

🔗 Rails Worldのチケットが即完売(Rails公式ニュースより)


つっつきボイス:「10月に開催される第1回Rails Worldのチケットが販売開始後45分で売り切れですって」「すごい」「開催はオランダのアムステルダムか」「これは例のThe Rails Foundationが発足して以来初めて主催するイベントということになりますね」

参考: Ruby on Rails — The Rails Foundation

🔗 セキュリティ検査の一部を自動化(Ruby Weeklyより)


つっつきボイス:「bundle-auditによるgemのセキュリティ更新チェックや、brakemanやspektrによるRailsコードの静的セキュリティ解析は定番ですね」「spektrってスペクターって読むのか」

presidentbeef/brakeman - GitHub
gregmolnar/spektr - GitHub

参考: Dependabot を使う - GitHub Docs

「もうひとつ別記事があるんですが、こちらも内容的に似ていますね↓」「こっちの記事はbundler auditのように表記しているけど、bundlebundlerは同じコマンド」「そうそう、bundle outdatedでgemが更新されているかどうかをチェックできますね」

参考: Keep Your Ruby App Secure with Bundler | AppSignal BlogAutomate some of your security - Rails Tricks Issue 13 | Greg MolnarRuby Weeklyより)

🔗 コードクイズ出題サイトでスキルをアップ(Ruby Weeklyより)


つっつきボイス:「以下のようなコードクイズ出題サイトを1年間やってみてスキルをアップしたというEvil Martiansの記事です」「こういうサイトはいろいろありますよね」「頭の体操によさそう」「少なくともCodewarsは問題もちゃんとしていて、同じクイズをいろんな言語でできたりと、なかなかよかった覚えがあります👍」「Leetって何だろうと思って調べてみたら、Elite(エリート)をもじった新しめの言葉みたいですね」

🔗 has_onecreate_associationの挙動変更


つっつきボイス:「create_association(注: associationは関連付け名)の挙動変更が話題になっていましたね」「"has_one関連で、すでに関連先が永続化されているときに新しく関連先を作ろうとすると、既存の関連先は削除される"、マジか!」「しかもdependentオプションによって挙動が変わるとは」「TechRachoのRailsリリース情報にもこの変更は見当たりませんでした」「has_oneはそもそも使う機会が少ないのと、has_onecreate_associationするとレコードが重複する可能性があるという既知の問題は一応ありましたけどね」

後で調べると、#46790が7-0-stableブランチにバックポートされたことによるようです。

参考: Backport create_association fix to 7-0-stable by casperisfine · Pull Request #46799 · rails/rails
参考: Small refactor on build singular association by lazaronixon · Pull Request #46790 · rails/rails

「記事によると、7.0.5でDELETEしてからINSERTするように挙動が変わったんですね: これはたしかに書き方によってはbreaking changeになりうるけど、本来はトランザクション処理をちゃんと書いていれば起きない問題ではあります」「なるほど」「管理画面を急いで作ったりすると踏みそう」「互換性を別にすれば、基本的には新しい振る舞いの方が望ましいでしょうね」

参考: §4.1.1.5 create_association!(attributes = {}) -- Active Record の関連付け - Railsガイド

🔗 その他Rails(Ruby Weeklyより)


つっつきボイス:「少し前のツイートですが、今年10月に開催予定のKaigi on Rails 2023のプロポーザル募集が7月いっぱいだそうです」「タイムテーブルが決まるのはその後ということですね」「開催地は東京の浅草橋か」「自分行けるかな...」

参考: 浅草橋ヒューリック ホール&ヒューリック カンファレンス ー 東京都内浅草橋駅徒歩1分のイベントホール・貸し会議室

🔗Ruby

🔗 RBSでRuby 3の型チェック(Ruby Weeklyより)


つっつきボイス:「RBSで型チェックする短めの記事です」

# 同記事より
# basic_math.rbs

class BasicMath
  @num1: Integer
  @num2: Integer

  def initialize: (Integer num1, Integer num2) -> void
  def first_less_than_second?: -> bool
  def add: -> Integer
end

「RBSはコードベースが大規模になってくると型チェックが遅くなるけど、SorbetはShopifyの大規模コードベースで実際に動かせているぐらい高速ですね」

ruby/rbs - GitHub
sorbet/sorbet - GitHub

「そういえば少し前にGitHubでRBSがシンタックスハイライトされるようになったそうです↓」「お〜いつの間に🎉」


rbs/core/array.rbs at 3c7387eb43c70f2f3f1d0158c9f0993ab387500f · ruby/rbsより

🔗 Rubyパーサー「YARP」のドキュメント


つっつきボイス:「おかげさまで以下のYARP記事↓にブクマをたくさんいただいたんですが、その中で上のYARPのドキュメントが紹介されていました」

Rubyパーサーを一新するYARPプロジェクトの全容と将来(翻訳)

「YARPがマージされたおかげで、パーサーのメンテナがあの巨大なparse.yと戦わなくて済むようになるのは大きい」「言語のパーサーを丸ごと作り直すという大工事をよくぞやり遂げましたよね」「ShopifyがRubyに積極的に投資し続けてくれているのは本当に凄い」

参考: ruby/parse.y at master · ruby/ruby

🔗 rubocop-magic_numbers: コードのマジックナンバーをチェック(Ruby Weeklyより)

meetcleo/rubocop-magic_numbers - GitHub


つっつきボイス:「RuboCopに新メンバーが加わったそうです」「マジックナンバーは、コードの中に値を説明無しで書き込んじゃっているヤツのことですね」「引数、代入、デフォルト値、戻り値でマジックナンバーが使われているかどうかをチェックする、なるほど」「マジックナンバーの修正は、名前を考えるのが手間なんですよね...」

# 同リポジトリより
# BAD
def calculate_annual_earnings
  pay_per_shift = 50.0
  pay_per_shift * 5 * 52
end

# GOOD
PAY_PER_SHIFT = 50.0
SHIFTS_PER_WEEK = 5
WEEKS_PER_YEAR = 52
def calculate_annual_earnings
  PAY_PER_SHIFT * SHIFTS_PER_WEEK * WEEKS_PER_YEAR
end

参考: マジックナンバー (プログラム) - Wikipedia

「なかなかよさそうなので案件によっては入れてみてもいいかも👍」

🔗 ruby-definitions: ShopifyのRubyビルド定義(Ruby Weeklyより)

Shopify/ruby-definitions - GitHub


つっつきボイス:「Shopifyでは、いわゆる"Ruby head"バージョンではなく独自にカスタマイズしてビルドしたRubyを使っていて、それに使っているのがruby-definitionsだそうです」「こういう感じでパッチを当てているんですね↓」「パッチによっては本家に反映したりもしているようです」「Shopify、こういうところにもリソースを割り当てているのか」「Shopifyの貢献半端ないですね」

# 同リポジトリより
$ shopify-ruby versions
3.0.0-pshopify9
3.0.1-pshopify2
3.0.2-pshopify3
3.1.0-pshopify1
3.1.1-pshopify2
3.1.2-pshopify2
3.1.3-pshopify1
3.1.4-pshopify1
3.2.0-pshopify2
3.2.1-pshopify5
3.2.2-pshopify3
3.2.2-pshopify4

🔗 その他Ruby


つっつきボイス:「ruby-jp Slackの#typesチャンネルが活発に動いていて、soutaroさんがそこで行った修正などが今回のsteep 1.5に反映されたそうです🎉」「RubyMine歴長いんですけど、型チェックをやっている人にVSCodeユーザーが多いせいか、リモートインタプリタがVSCodeだと圧倒的に速いので、最近VSCodeも使い始めています」

soutaro/steep - GitHub

🔗DB

🔗 SQLite3拡張をgemでインストールできるようにした(Ruby Weeklyより)


つっつきボイス:「libsqliteをインストールしなくてもSQLite3をインストールできるようにするのかなと思ったら、SQLite3の拡張をPythonやnpmなどで手軽にインストールできるように整備する作業をやっていて、Rubyのgemでもインストールできるようにしたということみたい↓」「なるほど、そんな感じですね」


同リポジトリより

asg017/sqlite-ecosystem - GitHub

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

🔗 GitHubのパスキー


つっつきボイス:「すろっくさんがやってみた↓というので私もブラウザでGitHubのパスキーを設定してみました」「今のブラウザならひととおりパスキーに対応しているはずですし、使って問題ないと思います👍」

参考: GitHub.comにパスワードレス認証の導入 - GitHubブログ
参考: iOS・Androidも対応「パスキー」とはなにか? パスワード時代の終焉 - Impress Watch

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

🔗 CSSの値と単位


つっつきボイス:「viewportやフォントにもいろいろ単位や値が増えていて、関数にも増えているんですね」「lvwとかdvbとか、略しまくっててクイズみたい」「ついていけてません😆」「使いこなせるだろうか...」「昨今のWeb UIはコンポーネント化が進んでいて従来より影響範囲を絞り込めるので、こういう新しい単位や値をコンポーネント内で使いやすくなっていそう」「全部覚えなくても、コンポーネントで必要になったものを使えばよさそうですね」

参考: CSS の値と単位 - ウェブ開発を学ぶ | MDN


後編は以上です。

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

週刊Railsウォッチ: 複合主キー関連の実装進む、Action TextでHTML5サニタイザほか(20230719前編)

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

Ruby Weekly


CONTACT

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