27
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails 6.0の "Active Storage's ImageProcessing transformer doesn't support :combine_options" という警告に対処する方法

Last updated at Posted at 2019-12-05

困っていたこと

Rails 5.2時代にActiveStorageでこんなコードを書いていました。

user.avatar.variant(
  combine_options: { 
    resize: "150^", 
    gravity: "Center", 
    crop: "150x150+0+0", 
    auto_orient: true  
  }
)

やっていることは縦長だったり横長だったりする画像を、中心で正方形に切り抜いて150x150サイズに縮小することです。(mini_magickを使用)

つまり、この画像↓を、
3500x1500-1.png

こうするわけです↓
3500x1500.png

このコードをRails 6.0に上げるとこんな警告が出ました。

DEPRECATION WARNING: Generating image variants will require the image_processing gem in Rails 6.1. Please add `gem 'image_processing', '~> 1.2'` to your Gemfile. 

なにやらimage_processing gemをインストールしろ、と言われているので、言われたとおりGemfileに追加します。

Gemfile
gem 'image_processing', '~> 1.2'
bundle install

すると、今度は警告の内容が次のように変わりました。

DEPRECATION WARNING: Active Storage's ImageProcessing transformer doesn't support :combine_options, as it always generates a single ImageMagick command. Passing :combine_options will not be supported in Rails 6.1.

こちらの警告は:combine_optionsはRails 6.1でサポートされなくなるぜ!と言われてるものの、具体的な修正方法がわかりません。

解決方法

この警告が導入されたコミットを確認した結果、どうやら:combine_optionsをなくしてこう書けば良いっぽいです。

user.avatar.variant( 
  resize: "150^", 
  gravity: "Center", 
  crop: "150x150+0+0", 
  auto_orient: true  
)

これで警告が消え、画像の切り抜きもうまくいきました。

ただ、これがベストプラクティスかどうかは確信がないので、もっと良い解決策を知ってる人がいたらコメントお待ちしています!

追記:こんなやり方があった!

同僚の @aki77 が「こんなやり方がありますよー」と、もっと便利な書き方を教えてくれました。(どうもありがとう!)

確かもうちょっと簡単に書けるようになったはずと思って調べてみました。
多分↓で良さそう。

user.avatar.variant(resize_to_fill: [150, 150])
https://edgeguides.rubyonrails.org/active_storage_overview.html#transforming-images

carrierwaveでも同じだったなーと思ったら、あっちもimage_processing使ってるんですね。
https://github.com/carrierwaveuploader/carrierwave/blob/master/carrierwave.gemspec#L27

ということで、Rails 6ではこれだけでOKです!
auto_orient: trueもデフォルトでセットされます)

user.avatar.variant(resize_to_fill: [150, 150])

めっちゃシンプルになりましたね!やったー🙌

27
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?