4
5

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.

MiniMagickの使い方 ArgumentError wrong number of arguments (given 4, expected 2) 

Last updated at Posted at 2020-05-01

#MiniMagickの使い方
ArgumentError  wrong number of arguments (given 4, expected 2) 

開発環境
ruby 2.7.0p0
Rails 5.2.4.1

はい、またしても出ましたArgumentError
minimagickというgemを導入したらエラーが出たので改善してみました。

なかでも『wrong number of arguments (given 4, expected 2)』についての解説です。

今回はポートフォリオにアップロードした画像のサイズを変えたり余白を設定するgemを実装した時に起きたエラーです。

今までのポートフォリオではインスタライクなサービスなのでとりあえず画像投稿機能までは作っていたのですが、画像のファイル制限はしているものの縦横サイズ感についての制限はしておらず、投稿によってはやけに縦長のトピックになってしまったりしていました。

そこでGemfile の MiniMagickを導入することにしました。

##MiniMagick とは画像リサイズしたり画像加工に使われるgem

こちらの記事を参考に導入してみました。

僕は一度つまづきましたがちゃんと上から読むと
ImageMagickを導入することが前提条件としてあります。気をつけましょう汗

$ brew install imagemagick

このコードでインストールします。意外と時間がかかるので注意です(5分程度)

アプリ制作途中でimagemagickをインストールしているかどうだったのかわからない方は以下コードで確認してください。

$ convert -version

これをうって

command not found

こちらが出ない場合は既にインストールされています。出たらインストールしましょう。

ImageMagickを導入後、MiniMagickをgemファイルに書きます。

gem ‘mini_magick’, ‘~> 4.8’

gemファイル上でコメントアウトされていることが多いと思うのでコメントを外し更新

$ bundle install

gemファイルをbundle installしたら一回rails cで止めて rails sで再起動します。

gemファイル導入できたらimage_uploader.rbに

include CarrierWave::MiniMagick

こんな感じで準備完了です

先ほどのqiitaの記事を見てimage_uploader.rbに以下記述

スクリーンショット 2020-05-01 15.26.05.png
image_uploader.rb
process resize_to_limit: [300, 200, #ffffff”, “Center”]

このコードでwidth を最大 300px、height を最大 200 px
リサイズ後のファイルの余白部分を指定色でぬりつぶすこともできるらしい。
この場合、第三引数で塗りつぶしの色を指定(#ffffff)し、第四引数で余白が発生した際の画像の配置を指定(center)。

実際に記事の通りこちらのコードを書いて処理を実行すると

スクリーンショット 2020-05-01 15.03.03.png

こちらのエラーが発生!!

前回の記事でも書いた通りArgumentErrorなので引数関係のエラーということがわかる 詳細を見ると

wrong number of arguments (given 4, expected 2)

早速検索するとこちらの記事が
https://qiita.com/TOSHIMITSU_MIYACHI/items/82417ab6126d816af4e4

つまり2つの引数を期待しているのに4つの引数がきているよ!! というエラー

先ほど書いたコードを見ると

image_uploader.rb
process resize_to_limit: [300, 200, #ffffff”, “Center”]

ここでの引数が4つになっているのでこれを

image_uploader.rb
process resize_to_limit: [300, 200, Center]

指定色を消して再度更新すると

先ほどと少し内容が変わって
スクリーンショット 2020-05-01 15.25.40.png

wrong number of arguments (given 3, expected 2)になりました。

つまり2つの引数を期待しているのに対し3つの引数になってるよというエラーです。

こうなるとprocess resize_to_limit: の書き方が間違っているのかなーと思い公式リファレンスを読んでみました。

https://github.com/carrierwaveuploader/carrierwave
そのままだと英語で難しいのでブラウザ機能で日本語化

該当箇所
スクリーンショット 2020-05-01 19.02.14.png

どうやらresize_to_limit: 元々画像サイズの指定のみのようです

##resize_and_pad:

これが縦サイズ、横サイズ、残りの領域の指定色、画像位置の指定を設定することができる方法のようです。(4つの引数)

参考にさせていただいたqiitaの記事は1年前のものだったのでバージョンが変わり仕様が変わってしまったのかもしれません。

もしくは環境が違ったりしてエラーが出てしまったのかもしれません。

なので

#解決法

image_uploader.rb
process :resize_and_pad => [500, 500, #ffffff”, “Center”]

こちらのコードで書き直すことでエラーも出ず期待通りの結果を得られるようになりました。

同じ状況で苦しんでいる方の参考になれば

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?