Just do IT

思うは招く

Ruby 2.7.0 + Rails 6.0.2.1 で警告 warning: Using the last argument as keyword parameters is deprecated を一旦回避

結論

  • Ruby 2.7.0 にgemのアップデートがまだ追いついてないっぽい
  • 一時的に警告が出ない設定にする
  • ただし、バージョンアップで改善された場合は設定を取り消すべし

環境

OSはUbuntuだが、MacOSでも共通する解決策。

問題

rails db:migraterails db:createを叩くと、次のような警告がわんさか出て邪魔くさい。

/home/vagrant/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/home/vagrant/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here
/home/vagrant/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activerecord-6.0.2.1/lib/active_record/transactions.rb:212: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/home/vagrant/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:274: warning: The called method `transaction' is defined here

主な警告がこれ。

warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

解決

次の記事を参考にした。

Ruby 2.7 とRails 6.0.2.1でrailsコマンドをたたくとすごいwarningがでる - Qiita

とりあえず、警告が邪魔なので表示しないようにする。 Linuxの設定ファイル「.bashrc」に次の記述を追記。

export RUBYOPT='-W:no-deprecated -W:no-experimental'

書き込み方法は大きく2つ。

#1 vim 等でファイルを開き、追記
vim ~/.bashrc

#2 echoコマンドと>>で上書き
echo "export RUBYOPT='-W:no-deprecated -W:no-experimental'" >> ~/.bashrc

#2のほうが1発で終わり楽なのでおすすめ。

そして再読み込み。

source ~/.bashrc

これで警告は非表示になる。

注意!

これは問題が解決したわけではなく、警告が表示されないようになっただけ。 今後の該当gemのバージョンアップ次第では、変更を元に戻す必要が十分にある。

RailsアプリをRuby 2.7.0で動かして分かったこと – PSYENCE:MEDIA

なお、実行時に -W:no-deprecated オプションで非推奨ワーニングを抑制する方法もありますが、Railsバージョンアップ時の非推奨ワーニングなどを見逃す可能性があるため、開発時やテスト実行時にはやらない方が良いかも知れません。

よって、私は追記した記述の上にこんなコメントを残しておいた。

# Ruby 2.7.0 とRails 6.0.2.1 でマイグレーションするとたくさん警告が出て邪魔なので警告を出ないようにする
# 変更日 2020/02/07 
# ただし、バージョンアップで改善されたら、警告が出ないのは逆に危ないのでこの記述は消す
export RUBYOPT='-W:no-deprecated -W:no-experimental'

つまり、改善されたら上記の部分をまたvim等で開いて削除、source ~/.bashrcで再読み込みをすればいい。

参照