LINEで現役エンジニアに直接質問してみよう!登録無料

Ruby2.7.1 + Rails6.0.2.2で起動時に出るwarningエラーを回避する方法

Ruby2.7.1 + Rails6.0.2.2でアプリケーションを起動すると、下記のように「warning」がたくさん出てきます。

私の場合は、RailsアプリでRubyのバージョンを2.6系から2.7系にバージョンアップした時に発生しました。

この記事では、このエラーが発生する原因と、回避方法について解説します。

02: 13: 49 web.1       | /home/ec2-user/railsapp/vendor/bundle/ruby/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/stack.rb: 37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
02: 13: 49 sidekiq.1   | /home/ec2-user/railsapp/vendor/bundle/ruby/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/stack.rb: 37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
02: 13: 49 web.1       | /home/ec2-user/railsapp/vendor/bundle/ruby/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/static.rb: 110: warning: The called method `initialize' is defined here
02: 13: 49 sidekiq.1   | /home/ec2-user/railsapp/vendor/bundle/ruby/2.7.0/gems/actionpack-6.0.2.2/lib/action_dispatch/middleware/static.rb: 110: warning: The called method `initialize' is defined here

エラー発生の原因

エラー発生は、Ruby 2.7.0または2.7.1にgemのアップデートが追いついていないことが原因で発生するようです。

不具合ではなくあくまでこれから廃止する予定で非推奨(deprecated)になりましたよ!というお知らせなので、今すぐに対応しないと動かなくなる!ということではないので、安心してください。

また、エラーの具体的な翻訳は、下記のとおりです。

warning: Using the last argument as keyword parameters is deprecated

(警告: 最後の引数をキーワードパラメータとして使用することは非推奨になりました)

ということで、普通にRubyスクリプトを使う場合も、一番最後にキーワードパラメータを使うのは控えましょう!いずれ動かなくなるので、、

キーワード引数って何?という人は、下記記事で詳しく解説しているので、参考にしてみてください

https: //techracho.bpsinc.jp/hachi8833/2019_10_31/82588

エラー発生を一時的に止める

エラーが、今すぐには対応の必要ない警告だと理解できたと思います。ですが、このままだとログを見る時にごちゃごちゃしてわかりにくいし、より重要なエラーを見逃してしまうかもしれません。

そこで、一時的にこのようなエラーの表示を止めるようにしましょう!

やり方は簡単です。下記のように、環境変数からRubyのオプションを指定するだけです。

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

bashなどのシェルに組み込む場合は、~/.bashrcなどに書き込みましょう!

$ echo "export RUBYOPT='-W:no-deprecated -W:no-experimental'" >> ~/.bashrc

そして、再読込します。

source ~/.bashrc

これで警告の表示はなくなります。

この方法の注意点

この方法は、本質的なRubyの問題を解決するのではなく、あくまで警告表示をなくしただけです。いずれRubyのバージョンアップにより、警告を無視したプログラムは動かなくなります。

今後、RubyやGemをアップデートした時は、元に戻してあげましょう!

でないと、より重要な警告を見逃してしまうかもしれません。

なお、私の環境では、Rubyを起動する時はプロジェクトごとにProcfileを用意し、環境変数を設定して管理しています。

web: RUBYOPT='-W:no-deprecated -W:no-experimental' bundle exec rails server -p 3000 -b 0.0.0.0

このような感じですね。Gemをアップデートしたときには消す予定です。

まとめ

  • エラーの原因はRuby本体のキーワードパラメータに関する仕様が変わったため
  • エラーを一時的に出なくするにはRUBYOPT='-W:no-deprecated -W:no-experimental'を使う
  • RUBYOPT='-W:no-deprecated -W:no-experimental'はGemをアップデートした時に削除しよう

以上、Railsでwarning: Using the last argument as keyword parameters is deprecated;のエラーが出る原因と解決方法をアキ(@hackablejp)が解説しました!

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。