週刊Railsウォッチ(20190701)RMagickのメモリ使用量が劇的に改善、インスタンス変数の定義順で速度が変わる?、GitLab CIランナーをローカルで回すほか

こんにちは、hachi8833です。kazzさんのアバター画像が変わったことにお気づきでしょうか。 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください ※今回のつっつき録画に音声が入っていなかったので、今回は分割せず軽量版とします。申し訳ありません🙇。 ⚓お知らせ: 第12回公開つっつき会(無料) 応募先: 週刊Railsウォッチ公開つっつき会 第12回|IT勉強会ならTECH PLAY[テックプレイ] 開始以来ついに1年目を迎える第12回目公開つっつき会は、今週7月4日(木)19:30〜にBPS会議スペースにて開催されます。引き続き皆さまのお気軽なご参加をお待ちしております🙇。 ⚓Rails: 先週の改修(Rails公式ニュースより) ⚓スキーマダンプのstringをintegerに変更 PR: Revert schema dumper to use strings rather than integers by eileencodes · Pull Request #36525 · rails/rails # activerecord/lib/active_record/migration.rb#L1072 def get_all_versions – if schema_migration.table_exists? + schema_migration.all_versions schema_migration.all_versions.map(&:to_i) else [] end end … def load_migrated – @migrated_versions = Set.new(@schema_migration.all_versions) + @migrated_versions = Set.new(@schema_migration.all_versions.map(&:to_i)) end # activerecord/lib/active_record/schema_migration.rb#L47 def all_versions – order(:version).pluck(:version).map(&:to_i) + order(:version).pluck(:version) end ここは変更すべきと思われるが、既にRC版に入っているので6.0-stableではやらない方がいいかと思い、アプリ側の変更を必要としない変更だけに留めようとしてみた。 これは、すべてのスキーママイグレーションのバージョン番号をintegerとしてダンプしていた#36439の一部を元に戻す。この変更は振る舞いが変わらないので別段問題ではない。6.1で改めてこれを非推奨化するべき。 cc/ @rafaelfranca そちらから本変更を求められ、structureファイルが変更されている。大きな問題ではないので、GitHubの現在の更新はそのままでよいと思うが、この振る舞いの変更の方が心配なので、いったんロールバックして6.1で改めて非推奨化しようかと思う。 同PRより大意 つっつきボイス:「プルリクメッセージを見ると、これは修正すべきだけど6.0-stableじゃない方がいいかもとあったのが、Oracleアダプタやってるyahondaさんがこの修正欲しいと言って入ったようです」「to_iする方が長さが短くなってよさそうではあるけど、他に何か不都合があったのかも?🤔」 ⚓init_withのスキーマキャッシュをdeep_deduplicate commit: Also deduplicate schema cache data when using the init_with interface · rails/rails@bba7c63 # activerecord/lib/active_record/connection_adapters/schema_cache.rb#L37 def init_with(coder) – @columns = coder[“columns”] – @columns_hash = {} – @primary_keys = coder[“primary_keys”] – @data_sources = coder[“data_sources”] – @indexes = coder[“indexes”] || {} – @columns = deep_deduplicate(coder[“columns”]) + @columns_hash = @columns.transform_values { |columns| columns.index_by(&:name) } + @primary_keys = deep_deduplicate(coder[“primary_keys”]) + @data_sources = deep_deduplicate(coder[“data_sources”]) + @indexes = deep_deduplicate(coder[“indexes”] || {}) @version = coder[“version”] @database_version = coder[“database_version”] end つっつきボイス:「deep_duplicate?」「いえ、deep_deduplicateですね」「ででゅぷりけーと!」「新しいみたいでググっても出てきません😢」 同コミットより 「GitHub上で例のコードジャンプ↑が効くぞ😋:なるほど」「-valueって何だっけ?」「stringをfreezeするショートハンドですね」「あ〜そうそう」 def deep_deduplicate(value) case value when Hash value.transform_keys { |k| deep_deduplicate(k) }.transform_values { |v| deep_deduplicate(v) } when Array value.map { |i| deep_deduplicate(i) } when String, Deduplicable -value else … Continue reading 週刊Railsウォッチ(20190701)RMagickのメモリ使用量が劇的に改善、インスタンス変数の定義順で速度が変わる?、GitLab CIランナーをローカルで回すほか