突然ですが、画像を送信・投稿する機能を持ったアプリケーションってたくさんありますよね。むしろ今時、テキストのみで画像投稿ができないアプリケーションは見たことがありません。
そこで今回は数ある画像送信方法の中でも、CarrierwaveとMiniMagickを使った画像投稿の手順について解説したいと思います。
Carrierwaveとは
Carrierwaveとは、ファイルアップロード用のgemです。
gemfileに「gem ‘carrierwave’」記載し、「bundle install」を実行する必要があります。Ruby on Railsの画像投稿の仕組みで、よく使われるgemの1つです。
MiniMagickとは
MiniMagickとは、画像加工をしてくれるgemです。
Carrierwaveと同じく、gemfileに記載し「bundle install」する必要があります。前提として、MiniMagickを使うにはImageMagickというものをインストールする必要があるので注意しましょう。
ImageMagickは、画像処理ライブラリです。
- 画像サイズ変更
- 画像反転
- 画像回転
- 画像フォーマット変換
- 色調整
- グラデーション
といった様々な画像処理を行うことができます。
画像投稿機能の実装
では実際に、CarrierwaveとMiniMagickを使って画像投稿機能を実装してみます。以下の手順で実装を進めていきましょう。
まずはMiniMagickを使用するために、ImageMagickをインストールします。
↓ ターミナル
$ brew install imagemagick
次に、CarrierwaveとMiniMagickをgemfileに記述し、「bundle install」を実行しましょう。
↓ gemfile
gem 'carrierwave'
gem 'mini_magick'
↓ ターミナル
$ bundle install
続いて画像のアップローダーを作成します。ターミナルで、「rails g uploader image」コマンドを実行すると、app/uploadersディレクトリ以下にimage_uploader.rbが作成されます。
↓ ターミナル
$ rails g uploader image

次に、先ほど作成したアップローダーを関連するモデルと紐付けます。今回の場合は、Messageモデルと紐付けると仮定します。
↓ Messageモデル
class Message < ApplicationRecord
mount_uploader :image, ImageUploader
end
最後にimage_uploader.rbを編集して、MiniMagick経由で画像のリサイズを行えるようにしましょう。これで画像投稿の実装は終了です。
↓ image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process resize_to_fit: [400, 200]
end
まとめ
- Carrierwaveとは、ファイルアップロード用のgemである
- MiniMagickとは、画像加工をしてくれるgemである
- MiniMagickを使うにはImageMagickというものをインストールする必要がある
今回は数ある画像送信方法の中でも、CarrierwaveとMiniMagickを使った方法について解説しました。画像に限らず、ファイルのアップロードは必須機能と言っても過言ではないので、ぜひこの機会に学習してみてください。