Rails 5.1.0 (Edge) でのDBクリーニングGemの進捗

Rails アプリケーションでのテスト時のデータクリーニングには Database CleanerDatabaseRewinder を使っていることが多いと思う。

Rails 5.1.0 の Edge つまり GitHub の master Rails に対してこれらを利用する場合は、Rails の PR 28293 に対応したパッチがあたった以下のものを使う必要がある。

それぞれの進捗を書く。

Database Cleaner

PR が既に出ていたが、2017年3月7日現在まだ master にマージされていない。

github.com

当面は以下のような感じで Gemfile に指定するなどの対処で動かすことになる。

gem 'database_cleaner', git: 'https://github.com/activefx/database_cleaner', branch: 'rails-5-1-schema-migration-table-name-fix'

DatabaseRewinder

master マージ済み。

github.com

未リリースなので、いまのところ Gemfile への git オプション指定などが必要。


これらには前述の PR で消されたActiveRecord::Migrator.schema_migrations_table_name に代わりActiveRecord::SchemaMigration.table_name を使うようにした対応が入っている。

Tip として ActiveRecord::SchemaMigration.table_name は Rails 4 では入っているため、現在メンテナンス対象となっている Rails 4.2 との互換があるため Rails のバージョンによるパッチの違いは考えなくても良い。

rails_5_1_0ブランチの準備

先日 Rails 5.1.0.beta1 がリリースされたので、Rails アプリケーションとしては master から rails_5_1_0 ブランチを切って裏で準備をはじめていることと思う (ブランチ名は Rails 本家に合わせてハイフン区切りだったり、その他いろいろあると思う) 。

話の前提知識として、2017年3月6日現在の Rails 5 系の GitHub 上の管理を書いてみるとこうなる。なお、ここでの話に関係のない beta と rc は割愛する。

  • master … Rails 5.1.0 (開発版) の Edge
  • 5.1.0.beta1 タグ … Rails 5.1.0.beta1 で RubyGems にリリースされている
  • 5.0.2タグ … Rails 5.0.2 で RubyGems にリリースされている Rails 5.0.z (安定版) の現時点の最新版
  • 5.0.1タグ … Rails 5.0.1 で RubyGems にリリースされている
  • 5.0.0.1タグ … Rails 5.0.0.1 で RubyGems にリリースされている
  • 5.0.0タグ … Rails 5.0.0 で RubyGems にリリースされている
  • 5-0-stable ブランチ … Rails 5.0.z (安定版) のメンテナンスブランチ

Rails 5.1.0 へのリリースを追うにあたり、Gemfile に 5.1.0.beta1 を指定するというのがひとつの考え方ではあるが、beta はある時点のスナップショットということで master はそこから更に進んでいることになる。つまり beta で起きていたバグが修正されていたり、beta からのリファクタリングが master に入っていたりする。

そういった理由から Gemfile には 5.1.0.beta1 よりも GitHub から直接 master を持ってくる Edge Rails を使うようにした方が良いと思っている。

Gemfile の diff で例をあらわすとこういった意味になる。

- gem 'rails', '= 5.1.0.beta1'
+ gem 'rails', git: 'https://github.com/rails/rails'

周辺の Gem に関しても、Rails 5.1.0 向けのバージョンが master で開発されているものは同様の理由から GitHub 指定となる。

Rails 5.1.0 の正式リリース、あるいは 5-1-stable メンテナンスブランチが切られたらそちらを使うように切り替える。これまでの傾向から Rails 5.1.0 が安定版となるリリースはまだ先の話になると思うので、気が向いたらアプリケーションの master でちょくちょく rebase すると良い。

SAOを観た

先日できるだけ事前知識なしで観に行った『劇場版 ソードアート・オンライン -オーディナル・スケール』が TV アニメからの続編物だったようなので、そちらをまとめて観たりしてた。

流行りから周回遅れでも BOX が販売されているくらい遅れていると、それはそれでまとめて観れるので便利。知識を持って劇場版を観るとまた違った見方ができそう。

🎎 の翌日

今月の OSS Gate 東京ミートアップ 2017-03-30 の募集ページの下書きを書いたり、以前日記に書いた『OSSにPull Requestを出すパターン』の更新をしていたりした。

koic.hatenablog.com

OSS Gate 東京ミートアップ 2017-03-30 の Doorkeeper 募集は、週明け月曜日の昼くらいに公開する予定。

あと RubyKaigi 2017 の日程と場所が公開されていたので、Google Calendar の予定に入れておいたりしてた。

社内のLT大会だった

前回同様に秋吉の焼き鳥持ち帰りで、前回の185本から260本に増量しての開催だった🐔

今回も Mithril, リストキュー, パタン・ランゲージ, E2E テストの失敗あるある, Ruby の Proc#binding, Polymer, XP の価値原則実践などといった多種多様なトークが広げられていた。

自分はボブおじさんの dX 方法論を原案にした話をしたりしていた。

www.slideshare.net

発表時は Tokyu スタイルに敬意を表して手元に🍺を忘れず置いてた。

終わった後の懇親会では次回どうする話などしたりしていた。年内にまたあるのかなと思っている。

そうそう。dx って何?っていうのは dx の文字を 180 度反転させると…

dry_require_spec_helper 0.5.0 をリリースした🎎

3月3日未明の日記ということになるけれど、dry_require_spec_helper 0.5.0 をリリースした。

dry_require_spec_helper は、.rspec の --require spec_helper オプションを使って require "spec_helper.rb" の宣言コード量を減らす dry_require_spec_helper コマンドを提供する Gem となる。

github.com

ざっくりいうと、.rspec ファイルに --require spec_helper を加えて、spec/*/_spec.rb から require "spec_helper" を消すといったことを行なうもの。

今回は、先日 RuboCop に出した PRのきっかけとして、require 'spec_helper.rb' と書かれたコードを見つけたことが発想の源流となる。滅多に見かけないため忘れていたが、require には、.rb.so といった拡張子を含めて書くことができるため、そういったケースに対応したのが今回のバージョン 0.5.0 となる。対象が RSpec 限定ということで require "spec_helper" に付く拡張子は .rb のケースのみに対応している。

上述の RuboCop への PR もこの Gem を使った結果を使ったものとなる。