- Ruby / Rails関連
週刊Railsウォッチ: Kaigi on Rails 2023プロポーザル募集、rubocop-magic_numbersほか(20230721後編)
こんにちは、hachi8833です。
🔗Rails
🔗 Rails Worldのチケットが即完売(Rails公式ニュースより)
We love your enthusiasm for Rails: #RailsWorld sold out in 45 minutes! Stay tuned for more speaker announcements, and we will see you all in Amsterdam this October. https://t.co/rQ6gnk2j03 pic.twitter.com/pTbPo226Re
— Ruby on Rails (@rails) June 23, 2023
つっつきボイス:「10月に開催される第1回Rails Worldのチケットが販売開始後45分で売り切れですって」「すごい」「開催はオランダのアムステルダムか」「これは例のThe Rails Foundationが発足して以来初めて主催するイベントということになりますね」
参考: Ruby on Rails — The Rails Foundation
🔗 セキュリティ検査の一部を自動化(Ruby Weeklyより)
つっつきボイス:「bundle-audit
によるgemのセキュリティ更新チェックや、brakemanやspektrによるRailsコードの静的セキュリティ解析は定番ですね」「spektrってスペクターって読むのか」
参考: Dependabot を使う - GitHub Docs
「もうひとつ別記事があるんですが、こちらも内容的に似ていますね↓」「こっちの記事はbundler audit
のように表記しているけど、bundle
とbundler
は同じコマンド」「そうそう、bundle outdated
でgemが更新されているかどうかをチェックできますね」
参考: Keep Your Ruby App Secure with Bundler | AppSignal BlogAutomate some of your security - Rails Tricks Issue 13 | Greg Molnar(Ruby Weeklyより)
🔗 コードクイズ出題サイトでスキルをアップ(Ruby Weeklyより)
つっつきボイス:「以下のようなコードクイズ出題サイトを1年間やってみてスキルをアップしたというEvil Martiansの記事です」「こういうサイトはいろいろありますよね」「頭の体操によさそう」「少なくともCodewarsは問題もちゃんとしていて、同じクイズをいろんな言語でできたりと、なかなかよかった覚えがあります👍」「Leetって何だろうと思って調べてみたら、Elite(エリート)をもじった新しめの言葉みたいですね」
- LeetCode - The World's Leading Online Programming Learning Platform
- HackerRank - Online Coding Tests and Technical Interviews
- Codewars - Achieve mastery through coding practice and developer mentorship
🔗 has_one
のcreate_association
の挙動変更
つっつきボイス:「create_association
(注: association
は関連付け名)の挙動変更が話題になっていましたね」「"has_one
関連で、すでに関連先が永続化されているときに新しく関連先を作ろうとすると、既存の関連先は削除される"、マジか!」「しかもdependent
オプションによって挙動が変わるとは」「TechRachoのRailsリリース情報にもこの変更は見当たりませんでした」「has_one
はそもそも使う機会が少ないのと、has_one
でcreate_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より)
- イベント: Kaigi on Rails 2023
【💎Kaigi on Rails 2023 開催します!】
おまたせしました、今年はオンラインとオフラインのハイブリッド開催となります🎉
日程:10月27日(金)、28日(土)
公式サイトもオープンしておりますので、ぜひチェックしてみてください🤗https://t.co/53a4ue7DTF#kaigionrails— Kaigi on Rails (@kaigionrails) April 13, 2023
つっつきボイス:「少し前のツイートですが、今年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の大規模コードベースで実際に動かせているぐらい高速ですね」
「そういえば少し前にGitHubでRBSがシンタックスハイライトされるようになったそうです↓」「お〜いつの間に🎉」
rbs/core/array.rbs at 3c7387eb43c70f2f3f1d0158c9f0993ab387500f · ruby/rbsより
🔗 Rubyパーサー「YARP」のドキュメント
- ドキュメント: New Ruby parser - Google ドキュメント
つっつきボイス:「おかげさまで以下のYARP記事↓にブクマをたくさんいただいたんですが、その中で上のYARPのドキュメントが紹介されていました」
「YARPがマージされたおかげで、パーサーのメンテナがあの巨大なparse.yと戦わなくて済むようになるのは大きい」「言語のパーサーを丸ごと作り直すという大工事をよくぞやり遂げましたよね」「ShopifyがRubyに積極的に投資し続けてくれているのは本当に凄い」
参考: ruby/parse.y at master · ruby/ruby
🔗 rubocop-magic_numbers: コードのマジックナンバーをチェック(Ruby Weeklyより)
つっつきボイス:「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 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も使い始めています」
🔗DB
🔗 SQLite3拡張をgemでインストールできるようにした(Ruby Weeklyより)
つっつきボイス:「libsqliteをインストールしなくてもSQLite3をインストールできるようにするのかなと思ったら、SQLite3の拡張をPythonやnpmなどで手軽にインストールできるように整備する作業をやっていて、Rubyのgemでもインストールできるようにしたということみたい↓」「なるほど、そんな感じですね」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 GitHubのパスキー
つっつきボイス:「すろっくさんがやってみた↓というので私もブラウザでGitHubのパスキーを設定してみました」「今のブラウザならひととおりパスキーに対応しているはずですし、使って問題ないと思います👍」
GitHubパスキー対応きたー!作ってたスライド公開しますかねhttps://t.co/z3x46Nzkry
— すろっくさん (@srockstyle) July 12, 2023
参考: GitHub.comにパスワードレス認証の導入 - GitHubブログ
参考: iOS・Androidも対応「パスキー」とはなにか? パスワード時代の終焉 - Impress Watch
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 CSSの値と単位
つっつきボイス:「viewportやフォントにもいろいろ単位や値が増えていて、関数にも増えているんですね」「lvw
とかdvb
とか、略しまくっててクイズみたい」「ついていけてません😆」「使いこなせるだろうか...」「昨今のWeb UIはコンポーネント化が進んでいて従来より影響範囲を絞り込めるので、こういう新しい単位や値をコンポーネント内で使いやすくなっていそう」「全部覚えなくても、コンポーネントで必要になったものを使えばよさそうですね」
参考: CSS の値と単位 - ウェブ開発を学ぶ | MDN
後編は以上です。
バックナンバー(2023年度第3四半期)
週刊Railsウォッチ: 複合主キー関連の実装進む、Action TextでHTML5サニタイザほか(20230719前編)
- 20230705後編 AWS LambdaでRailsをRackで動かすLambyほか
- 20230704前編 productionのforce_ssl=trueがデフォルトで有効に、rakeタスクをthorで書くほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)