Rails/OSSパッチ会 2021年8月

Rails/OSS パッチ会だった。オンライン開催になって、それなりに回数も経ってきたところ。

自分は仕事で bin/rails db:schema:load の実行が遅いのが気にかかっていて、結構前に手元で試していた高速化のアイデアについて話したりしていた。

bin/rails db:schema:load は内部的に db/schema.rb を load しているだけなのでリニアに実行される。

そこで、ひとつの高速化アイデアとしてのキーワードは「並列化」。db/schema.rb のうち create_table do ... end, add_foreign_key のコードをそれぞれコレクションにして、1. create_table のコレクションを (Parallel gem なんかで) パラレル実行、2. add_foreign_key のコレクションをパラレル実行、最後に ActiveRecord::Schema.define を実行するとかどうだろうというものだった。

手元にあるアプリケーションへのモンキーパッチによる PoC だと、前段のコレクションに詰める仕込み部分で db/schema.rb を RuboCop を使って AST プログラミングするという異能を使っている (のでこれで upstream に送ることはない) が、そこはさすがに method_missing とか使うとかした方が良いだろうなどコメントをもらいながら話していた。

さらにその先の結論としては、MySQL なんかでの bin/rails db:schema:load はそんなに遅くないらしく、どうも Oracle adapter のスキーマ処理まわりにボトルネックがありそうで、そちらを解決した方が良さそうというオチだった。まあ、そうですよね。

次回の Rails/OSS パッチ会は 2021年9月30日(木) 17:00-19:00 です。