週刊Railsウォッチ(20181112)Ruby 2.6.0-preview3リリース、非同期スレッドのテストはつらい、MySQL 8のGROUP BYほか

こんにちは、hachi8833です。そろそろ身が持たないのでウォッチのボリューム削減を図っています。 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを社内有志でつっついたときの会話です👄 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください ⚓Rails: 先週の改修(Rails公式ニュースより) ⚓.freezeをごっそり削除 元記事: Add `Style/RedundantFreeze` to remove redudant `.freeze` by yahonda · Pull Request #32031 · rails/rails Rails 6ではRuby 2.4.1以降がサポート対象になるので、従来のマジックコメントをRubocopのStyle/FrozenStringLiteralCommentに一元化するそうです。 # .rubocop.yml#L133 +Style/RedundantFreeze: + Enabled: true + Exclude: つっつきボイス:「RailsでサポートされるRubyもいよいよ2.4.1以降か〜: この処置は納得、つかrubocop -aで自動的に.freezeを消せたと思うから作業はラク😋」 rubocop -aでスキッと消えました。 ⚓マルチDB系改良: 接続切り替え用基本API PR: Part 4: Multi db improvements, Basic API for connection switching by eileencodes · Pull Request #34052 · rails/rails つっつきボイス:「これはこの間のつっつきでもチェックした気がしてきた」「connects_toとか既視感ありますね👁: プルリクの番号は違いますが」「前回はサンプルコードがなかったからその辺もカバーしたんでしょうね」 プルリクを雑に訳してみました。 1) モデルで複数データベースに接続できるconnects_toメソッドを追加: class AnimalsModel < ApplicationRecord self.abstract_class = true connects_to database: { writing: :animals_primary, reading: :animals_replica } end class Dog < AnimalsModel # 書き込み用のanimals_primary、読み出し用のanimals_replicaという2つのDBに接続される end 2) connected_toブロックメソッドを追加: 接続のロール切り替えや、モデルで接続していなかったDBへの接続に用いる。そのブロック内でデータベースに接続できると、slow_replicaなど普段は接続したくないが、コンソールや特定のコードブロックで接続したい場合に便利。 ActiveRecord::Base.connected_to(role: :reading) do Dog.first # AnimalsBaseに接続されたreplicaでdogをfind Book.first # readingで接続していないためエラーをraise end ActiveRecord::Base.connected_to(database: :slow_replica) do SlowReplicaModel.first # DB設定にslow_replica設定があれば探索し、なければエラーをraise end ⚓MySQL 8.0.13のデフォルト式などに対応 PR: Support default expression and expression indexes for MySQL by kamipo · Pull Request #34307 · rails/rails MySQL 8.0.13については「SQL」にもエントリを置きました。 つっつきボイス:「MySQL、マイナーバージョンアップにしてはいろいろ追加されてるみたいですね」「MySQLは結構いろいろアップデートされますよ🤓」「何がアップデートされたのかな👀」 元記事: The MySQL 8.0.13 Maintenance Release is Generally Available | MySQL Server Blog 「ほうほう、まずdefault function/expressionはCREATE TABLE t2 (a BINARY(16) DEFAULT uuid_to_bin(uuid()));みたいにデフォルト値に式や関数を置けるようになったと: むしろ今までできなかったのが驚き😳」「へぇ〜!」「ぽすぐれでは普通にできる😋」 「functional indexは今までもMySQLでできた気がするけど、お、”not a column”ということは、カラムを作らなくてもfunctional indexできるようになったってことか!🤓: つまり今まではカラムを作らないとできなかったと」「そうでしたか!」「MySQLもついにという感じ🥳」「kamipoさんが速攻このプルリクを出したということは待ち望んでいたのかもしれないですね」「これはそれなりのRDBMSが備えている機能ですね」 ⚓Railsガイドにデバッグ用詳細ログ出力方法を追加 PR: Add guides section on verbose query logs to Debugging by olivierlacan · Pull Request #34257 · rails/rails 同PRより つっつきボイス:「今までRailsガイドに記載されてなかったのかー: … Continue reading 週刊Railsウォッチ(20181112)Ruby 2.6.0-preview3リリース、非同期スレッドのテストはつらい、MySQL 8のGROUP BYほか