ファイルアップロード(ActiveStorage, CarrierWave)

Railsの「その他の応用テーマ」としての「ファイルアップロード(ActiveStorage, CarrierWave)」について、以下に詳しく解説します。


ファイルアップロードとは

ファイルアップロードとは、ユーザーが画像・PDF・音声などのファイルをWebアプリケーションにアップロードし、保存・参照できる機能です。Railsでは以下のようなライブラリや仕組みを用いて実装します。


1. ActiveStorageによるファイルアップロード

概要

ActiveStorageは、Rails 5.2以降に標準搭載されたファイルアップロード機能です。画像・動画・PDFなどのアップロードや外部ストレージ(Amazon S3、Google Cloud Storageなど)との連携が可能です。

特徴

  • Rails公式サポート

  • マルチストレージ対応(ローカル/クラウド)

  • 画像のリサイズや変換が可能(ImageMagickやvipsと連携)

  • バージョン管理は非対応

利用手順

  1. インストールと設定

bash
bin/rails active_storage:install bin/rails db:migrate
  1. モデルにアタッチメントを追加

ruby
class User < ApplicationRecord has_one_attached :avatar end
  1. フォームでのファイル入力

erb
<%= form_with model: @user, local: true do |form| %> <%= form.file_field :avatar %> <% end %>
  1. ファイルの表示

erb
<%= image_tag user.avatar.variant(resize_to_limit: [100, 100]) if user.avatar.attached? %>

2. CarrierWaveによるファイルアップロード

概要

CarrierWaveは、Railsで古くから使われているファイルアップロードのgemです。画像のリサイズ・バージョン管理・保存先の柔軟な設定などが可能で、MiniMagickとの組み合わせが一般的です。

特徴

  • 柔軟なアップローダークラス定義

  • 複数バージョンの生成が可能(例:サムネイル、オリジナル)

  • S3などの外部ストレージとの連携も容易

  • ActiveRecordやMongoidに対応

利用手順

  1. Gemの導入

ruby
gem 'carrierwave' gem 'mini_magick' # 画像処理用
bash
bundle install
  1. アップローダークラスの作成

bash
rails generate uploader Avatar
  1. モデルにマウント

ruby
class User < ApplicationRecord mount_uploader :avatar, AvatarUploader end
  1. フォームでのファイル入力

erb
<%= form_with model: @user, local: true do |form| %> <%= form.file_field :avatar %> <% end %>
  1. ファイルの表示

erb
<%= image_tag @user.avatar.url if @user.avatar? %>

ActiveStorageとCarrierWaveの比較

項目 ActiveStorage CarrierWave
標準搭載 ×(gem必要)
ストレージ切替 容易 設定が必要
複数バージョン △(サポート限定)
拡張性 低(ブラックボックス寄り) 高(クラスベース)
メンテナンス Rails本体が管理 OSSコミュニティに依存

結論

  • Railsの標準的な構成でシンプルに構築したい場合はActiveStorageがおすすめ。

  • 高度なカスタマイズ画像処理ファイルのバージョン管理が必要な場合はCarrierWaveが適しています。

要件に応じてどちらを使うかを選択することが重要です。

ChatGPT4o 生成日:2025/06/21