CarrierWaveでの画像アップロード機能の実装方法

【結論】
・CarrierWaveとは、画像アップロード機能を
 簡単に実装する為のgem

・MiniMagickと併用することで
 画像のリサイズが可能になる


【目次】


【本題】

CarrierWaveについて調べた

アプリ開発で画像アップロード機能を実装する際、
CarrierWaveを利用しているのですが、
解像度の設定など、機能面を理解していない部分が多々あったので、いろいろ調べて見ました。

CarrierWaveとは

Railsのgemの一つで、画像アップロード機能を簡単に実装できます。

github.com

CarrierWaveの実装方法

0:「ImageMagick」をインストール
CarrierWaveを使用する為には「ImageMagick」という
画像を操作したり表示したりするためのソフトウェアが必要なので、
まだ導入されていない場合は、下記をターミナルで実行し、インストールします。

brew install imagemagick


1:gemを導入する
「carrierwave 」と「minimagick」を
Gemfileに追記し、ターミナルからbundle installを実行します。

gem 'carrierwave'
gem 'mini_magick'

「minimagick」とは、画像をリサイズする為のgemです。
他にも「rmagick」という似た機能を持つgemも存在しますが、
最新版がインストール出来ない不具合があるそうなので、今回は使用を見送ります。


2:アップローダーを作成する
画像アップロード時の設定を行う為のアップローダーを作成します。
ターミナルで、下記コマンドを実行すると、
app/uploadersディレクトリ以下にimage_uploader.rbが作成されます。

rails g uploader image

3:MiniMagickで画像リサイズが出来る様に記述する
image_uploader.rbに、MiniMagickを読み込んで、
指定した設定で画像リサイズが出来る様に記述をします。

  include CarrierWave::MiniMagick
  process resize_to_fit: [800, 800]

process resize_to_fit: [800, 800]は、
縦横比を維持したまま、縦横800pxで解像度を指定します。

resize_to_fitの他にも、resize_to_limitという設定もあり、
こちらも縦横比を維持したままリサイズしますが
画像のサイズが指定された縦横のサイズ以内の場合は、
リサイズされません。


4:画像の登録用にカラムを追加する
マイグレーションを作成して、画像の登録用にカラムを追加します。
データ型はstringを指定します。

rails g migration add_image_to_users image:string
rails db:migrate

5:モデルにimage_uploaderをマウントする
カラムを追加したモデルで、image_uploaderを認識させて
使える状態にする為に、image_uploaderをマウントする記述をします。

mount_uploader :image, ImageUploader