こんにちは、hachi8833です。Rails 7.2.0のマイルストーンのissueが今日になって全部クローズされました↓。
参考: 7.2.0 Milestone
🔗Rails
🔗 RubyConf 2024登壇者募集(Rails公式ニュースより)
🎉GET READY! 💎 RubyConf 2024 tickets are dropping soon! 👇
🚀 Presale: June 26
🌟 General: July 3
⏰ Early bird ends July 31 at 5PM GMT
👕 First 200 get free T-shirts!
Grab your spot on the presale list now: https://t.co/LOA2ZHVikc #RubyConf2024— RubyConf (@rubyconf) June 21, 2024
つっつきボイス:「今年のRubyConfは米国シカゴのヒルトン・ダウンタウンで開催なのね🎉」「11/13〜11/15ということはKaigi on Railsの1か月くらい後ですね」「Early birdsは7/31までか」
🔗 システムテストを単体テストに置き換える(Ruby Weeklyより)
つっつきボイス:「RSpec本でお馴染みのEverydayRailsの記事で、冒頭にDHHによる以下の記事が引用されていました↓」
「Railsへのシステムテスト導入が失敗だったという例の記事ですね: 別に騒ぐほどのものではなくて、単にシステムテストをどう位置づけるかという話だと思っています」「というと?」「システムテストはE2Eテストと位置づけるということでいいのではと思いますが、E2EテストをシステムテストとしてRailsのテストの一環として作るべきなのかはプロジェクトの構成などによっても変わってくるでしょうね」「DHHの記事でもHEYのシステムテストを全廃するのではなくシステムテストの数を減らしているところだと書かれていますね」「そうそう、E2E系のテストはゼロにする必要はなくても、本質的に時間がかかるので減らすに越したことはないし、最近だとそれ用の外部サービスを使うことも増えているようですね」
「そもそもE2Eテストをコードで実行するのがよいのかという議論もあるんですよ: アプリケーションが既にブラウザで表示して動く状態なら、E2EテストはQA担当者が手動でUIを動かしながら行う形で定義する方が、本来E2Eでテストしたい"ユーザーが実際に動かしたときに期待どおりに動作するか"のテストという視点では、より適切かもしれないとも思います」「そういえばDHHの記事にもそう書かれていましたね」
「コードによるE2Eテストだけだとエンジニアが定義しなかった項目が拾えなくなるし、E2Eテストのすべてをコードで網羅しても大変な割にあまり報われなさそう」「E2Eテストの数を増やせばテストの実行は重くなる一方だし、レンダリングタイミングの問題などで不安定なテストも増えてしまいますね」「システムテストを減らして単体テストを増やすなら、ユーザー観点の問題を見落とさないためにも、その分手動によるテストも実施するなどして、最低限正常系だけでもE2Eテストのサービスなどを利用してチェックを実施すべきでしょうね」「要するにシステムテストは増やすとしんどくなる」
🔗 rspec-wait: RSpecでウェイト処理(Ruby Weeklyより)
つっつきボイス:「RSpecのexpect
をwait_for
に置き換える形でテストにウェイトをかけられるそうです」「お、これはシステムテストなどでJavaScriptコードの実行待ちをしたいときなんかに昔から非常によく使われるパターンですね」
# 同リポジトリより
RSpec.describe Ticker do
subject(:ticker) { Ticker.new("foo") }
describe "#start" do
before do
ticker.start
end
it "starts with a blank tape" do
expect(ticker.tape).to eq("")
end
it "sends the message in Morse code one letter at a time" do
wait_for { ticker.tape }.to eq("··-·")
wait_for { ticker.tape }.to eq("··-· ---")
wait_for { ticker.tape }.to eq("··-· --- ---")
end
end
end
「予想通り、wait_timeout
もコンフィグで指定できるようになっている↓」
# 同リポジトリより
RSpec.configure do |config|
config.wait_timeout = 3 # seconds
config.wait_delay = 0.5 # seconds
config.clone_wait_matcher = true
end
🔗 Bundlerのauto_install true
(Ruby Weeklyより)
つっつきボイス:「bundlerでauto_install true
というコンフィグがあるそうです」「あ〜なるほど、インストールされていないgemがある場合に自動的にbundle install
実行時に入っていないgemがある場合に自動インストールするところまでbundle install
するところまでやってくれるんですね」「早速自分の環境にも設定しました」
# 同記事より
bundle config auto_install true
# or
bundle config --global auto_install true
「開発環境ではこの機能をonにしておくと便利だと思いますが、production環境などでは用心しておく方がよいでしょうね」「何かリスクがあるんでしょうか?」「Gemfileが何かの脆弱性で書き換え可能になってしまうといった条件が絡んでくると、自動Gemインストール時に任意スクリプトを実行するような悪意のあるgemとかと組み合わせて悪さができるかもしれないので、production環境ではoffにしておくのが良いと思います」「なるほど」
🔗Ruby
🔗 Ruby 3.4リリースまでは構文の変更を控える(Ruby Weeklyより)
つっつきボイス:「これもRuby Weeklyの記事です」「お、パーサー周りの開発を優先するために3.4リリースまではバグ修正を除いて構文の変更は控えるんですね、これは理解できる」「RubyKaigiのクロージングキーノートでも話していました」「シンタックスモラトリアムという言い方がちょっと面白い」
🔗 Graceful.Dev: Rubyを学ぶサイト
Someone asked me why I named my developer training site "https://t.co/FxXxs59CCL", so I thought I'd write about that.https://t.co/ePOVfK7Hef pic.twitter.com/5UDXJjOZKX
— Avdi Grimm (@avdi) March 30, 2023
つっつきボイス:「このRuby自習サイトはzverokさんの記事で引用されていたのを見て知りました↓」「Ruby本をいろいろ出版しているAvdi Grimmさんが中心になって作ったのね」
参考: The design decisions and evolution of a method definition - Ruby case study
「まだサイトのつくりがよくわからないけど、無料で読めるものもあるようです↓」「個別のコースは比較的軽めに作ってある感じ、意欲のある人はどうぞ👍」
- ツアー: Garden Tours - Graceful.Dev
- 無料コンテンツ: The Freebies - Graceful.Dev
-
有料コンテンツ例:
- 価格: Become a Pro Member - Graceful.Dev
🔗 (提案)デフォルトのパーサーをPrismにする(Ruby Weeklyより)
つっつきボイス:「Ruby 3.4がリリースされる前にPrismをデフォルトパーサーにしてプレビュー可能にしようという提案らしい: さすがに3.4リリースでよいのではという気はしますけどね」「Matzは3.4のプレビューでPrismをデフォルトにすることについては賛成していて、リリースするかどうかは品質次第という考えなのね」
Prismについて詳しくは同じKevin Newtonさんの以下の記事もどうぞ↓。
後編は以上です。
バックナンバー(2024年度第2四半期)
週刊Railsウォッチ: Active Recordにstrict_loading_mode追加、to_time_preserves_timezoneの扱いほか(20240625前編)
- 20240620後編 Ruby on Jets 6.0がRailsをサポートほか
- 20240619前編 Rails 8からPropshaftがアセットパイプラインのデフォルトにほか
- 20240529 Rails 8でKamalがデフォルトのデプロイツールになるほか
- 20240514後編 Ruby/Railsのアップグレード情報をscrapboxに集約ほか
- 20240513前編 Railsコンソールが最新のIRB APIに移行、assertionless_tests_behaviorほか
- 20240426後編 Prismの歴史と現況を振り返る、Steepの"narrowing"実装の内部ドキュメントほか
- 20240425前編 RailsからOpenStructを削除、Playwrightベストプラクティスほか
- 20240423後編 Kamalはゲームチェンジャーになるか、Solid Queueで使われているfugitほか
- 20240416前編 ジョブのエンキューをトランザクション完了時まで自動先延ばしほか
- 20240410後編 SeleniumでRubyの全クラスとモジュールにRBSが追加ほか
- 20240409前編 Rails公式の"rails-new"ツールでRailsプロジェクトをセットアップほか
- 20240402 solid_queueとmission_control-jobsが正式にRailsのgemに、Rubyの"チルド"文字列ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)