0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】画像加工のツールを導入する方法について

Last updated at Posted at 2025-05-26

記事概要

Ruby on Railsに画像加工のツールを導入する方法について、まとめる

前提

  • Ruby on Railsでアプリケーションを作成している

導入するツール

Active Storage

ファイルアップロード機能を簡単に実装できるGem

ImageMagick

コマンドラインから画像に処理を加えることができるツール
画像の作成やサイズ変更、保存形式の変更などの処理がある

Gemではなくソフトウェアであるため、Homebrewからインストールする

MiniMagick

ImageMagickの機能をRubyで扱えるようにしてくれるGem
RailsでImageMagickを扱うために必要

ImageProcessing

MiniMagickでは提供できない、画像サイズを調整する機能を提供するGem

手順(ImageMagickをインストール)

  1. 下記コマンドを実行する
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # ソフトウェア「ImageMagick」をインストール
    % brew install imagemagick
    

手順(Gemをインストール)

  1. Gemfileに下記を追記
    # 最終行に、下記を記述する
    gem 'mini_magick'
    gem 'image_processing', '~> 1.2'
    
  2. MiniMagickとImageProcessingをインストールする
    インストール方法は、こちらを参照
  3. MiniMagickを使用するため、設定ファイルを変更する
    config/application.rb
    module アプリ名
      class Application < Rails::Application
        # MiniMagickの設定変更
        config.active_storage.variant_processor = :mini_magick
        # 省略
      end
    end
    
  4. サーバーを再起動する

手順(Active Storageをインストール)

  1. 下記コマンドを実行し、Active Storageに関連したマイグレーションが作成される
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # Active Storageのインストール
    % rails active_storage:install
    
  2. マイグレートする
    マイグレート方法は、こちらを参照
  3. テーブルが3つ追加されたことを確認する

手順(画像を保存するための実装)

  1. 「Active Storageのテーブル」と「画像を紐づけるテーブル」のアソシエーションを定義する
    message.rb
    class Message < ApplicationRecord
      has_one_attached :image
    end
    
  2. 画像を紐づけるテーブル(messagesテーブル)に、カラムを追加する必要はない
  3. コントローラーに、imageカラムの保存を許可する
    messages_controller.rb
    # 省略
    private
    def message_params
      # imageという名前で送られてきた画像ファイルの保存を許可
      params.require(:message).permit(:content, :image)
    end
    

手順(保存した画像を表示)

  1. image_tagメソッドを記述し、画像を表示する
    <!-- 画像が存在する場合のみimage_tagが読み込まれる -->
    <%= image_tag message.image if message.image.attached? %>
    

手順(バリデーションを設定)

  1. 画像かテキストどちらかが存在していれば、メッセージを送信できるように実装する
    message.rb
    class Message < ApplicationRecord
      has_one_attached :image
    
      # was_attached?メソッドの返り値がfalseならばバリデーションによる検証を行う
      validates :content, presence: true, unless: :was_attached?
    
      # 画像があればtrue、なければfalseを返す
      def was_attached?
        self.image.attached?
      end
    end
    

Ruby on Railsまとめ

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?