Railsのジェネレータにおけるfrozen string literalマジックコメント

Railsbin/rails g migration create_articles といったようにマイグレーションファイルをジェネレータで作る機会が多いと思う。

% bin/rails g migration create_articles title:string
      invoke  active_record
      create    db/migrate/20171003150532_create_articles.rb
% cat db/migrate/20171003150532_create_articles.rb
class CreateArticles < ActiveRecord::Migration[5.1]
  def change
    create_table :articles do |t|
      t.string :title
    end
  end
end

先日 Rails 本体は frozen string literal の対応がされたが、ジェネレーターで作られる Rails アプリケーションコードには frozen string literal マジックコメントは入らないため、各自入れることになる (マイグレーションに限らずジェネレータ全般の話) 。

根拠としては以下の PR でジェネレータのテンプレートにそのマジックコメントを入れる対応を送ったが、コアチームによって Close されている。詳しくはリンク先。

github.com

なので現実線として、upstream のジェネレータに頼ることなく frozen string literal マジックコメントを Rails アプリケーションコードに入れるには、エディタに設定するなり、RuboCop の Style/FrozenStringLiteralComment cop で autocorrect するなりの手段を講じることになる。

あとはコアチームを説得できる材料を持って Issue を立てるなども考えられるので、そちらの線で本気で対応しようと考える場合は考慮してみてもよいかもしれない (個人的に難易度高い気がしていますが) 。

RubyKaigi 2017 のときに、Rails コントリビューター勢での雑談でこのあたり少し話題に挙ったのを思い出したので、話題に挙った内容で記していない点や異なる点はあるが記しておいた。