BackEnd

Rails5で出力される「alias_method_chain is deprecated.」について

投稿日:2017年3月13日 更新日:

はじめに

直近のプロジェクトではRails5を使っているのですが、利用しているgem関連で下記のような警告が大量に出力されるので、少し調べてみました。
(「./bin/rails c」や「./bin/bundle exec rspec」を実行すると大量に出力されます。)

これは、Rails5からはActiveSupportのalias_method_chainが非推奨(deprecated)になり、代わりにModule#prependを使うように促しています。

alias_method_chainとは

まず、deprecatedになったalias_method_chainですが、下記のように利用します。

上記のコードは、alias_methodを使った場合は、下記と同等になります。

  • helloメソッドがhello_with_worldメソッドに置き換わる。
  • 元々のhelloメソッドはhello_without_worldメソッドとして使えるようになる。

実行結果を下記に記載しますが、置き換わっているのがわかると思います。

Module#prependとは

逆に推奨されているModule#prependの使い方ですが、下記のように使います。

  • prependされた HelloWithWorldモジュール は、継承関係上 HelloUser クラスより手前に位置することになる。
  • そのため、helloメソッドをオーバーライドしたような形になる。
  • HelloWithWorldモジュール のメソッド内でsuperを呼び出すことで、元々のメソッドを呼び出すことができる。

実行結果とancestorsメソッドで継承関係を表示しておきます。
ちなみにancestorsメソッドは、クラスやモジュールのスーパークラスとincludeしているモジュールを、優先順で配列に格納して返してくれます。

Rubyリファレンス-Module#ancestors-

HelloWithWorldHelloUser の前にあるのがわかると思います。

モンキーパッチなどを書くときに利用することになると思います。
(モンキーパッチなんて書かずに、githubにプルリクする方がよいですが。。。)

とりあえず、DEPRECATION WARNINGの出力をなくしたい

Rails5にしたものの、全てのgemに対して、この警告を消すための書き換えの対応をしていくのは大変。

この出力が目障りという方は、 config/application.rb に追記すれば、消すことができます。
ただし、自己責任でお願いします。

 

さいごに

deprecatedなメソッドは、今後のアップデートで利用できなくなることもありますので、しっかりと理解した上で利用し、可能であれば、置き換えていくようにしましょう。

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

PHPerだけどKotlinを勉強したって良いよね その2〜コンストラクタ編〜

1 はじめに2 コンストラクタ2.1 プライマリコンストラクタ2.2 セカンダリコンストラクタ2.3 ニックネームのみを入力した人2.4 ニックネームと email を入力した人2.5 Faceboo ...

rails

Railsで複合主キーのテーブルを扱う

1 はじめに1.1 前提条件2 実装例2.1 config2.2 マイグレーション2.3 モデル3 さいごに はじめに RailsでWebサービスを開発する際のDB設計では基本的にidが主キーになると ...

Laravelのchunkメソッドとcursorメソッドのメモリ使用量

1 はじめに2 テスト用のデータ準備3 get()4 chunk()5 chunkById()6 cursor()7 さいごに8 おすすめ書籍 はじめに テーブルの全レコードに一括で処理を行うバッチを ...

Stripe Connectを使ってCheckoutを利用した継続課金を実装

1 はじめに1.1 Checkoutを使う場合の動線2 決済画面への遷移2.1 マイグレーション2.2 Checkout Sessionの作成3 決済完了後の制御4 おまけ4.1 ローカルでWebho ...

laravel logo

LaravelのDI

1 はじめに2 DIに関する機能2.1 DIとは2.2 サービスコンテナ2.3 サービスプロバイダ3 サービスコンテナ3.1 バインド3.2 bind3.3 bindIf3.4 singletonメソ ...

フォロー

blog-page_side_responsive

2017年3月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。