Rails Active Storageの使い方ガイド
Ruby on Railsには、ファイルアップロードを簡単に扱うためのモジュールとしてActive Storageが提供されています。この記事では、Active Storageを使ってファイルアップロード機能をRailsアプリケーションに組み込む方法を解説します。
1. 必要なGemのインストール
まず、Gemfileにactive_storageを追加します。Rails 5.2以降であれば、デフォルトでactive_storageはGemfileに含まれていますが、それ以前のバージョンや特定の理由で含まれていない場合は以下のように追加します。
gem 'activestorage', '~> 5.2'
追加したら、以下のコマンドを実行してgemをインストールします。
bundle install
2. Active Storageのインストール
次に、以下のコマンドを実行してActive Storageの必要なファイルやマイグレーションを生成します。
rails active_storage:install
このコマンドにより、Active Storageのためのマイグレーションファイルが生成されます。
3. マイグレーションの実行
マイグレーションファイルが生成されたら、以下のコマンドでデータベースに必要なテーブルを作成します。
rails db:migrate
以上の手順により、既存のRailsプロジェクトにActive Storageを新たに導入することができます。次にモデルの設定やストレージの設定など、Active Storageの利用に必要な設定を進めてください。
4. ストレージの設定
Active Storageはローカルストレージやクラウドストレージサービス(Amazon S3、Google Cloud Storage、Microsoft Azure Storageなど)をサポートしています。この設定はconfig/storage.ymlで行います。
例えば、開発環境でローカルストレージを使用し、本番環境でAmazon S3を使用する場合、以下のように設定します。
# config/storage.yml
local:
service: Disk
root: <%= Rails.root.join("storage") %>
amazon:
service: S3
access_key_id: your_access_key_id
secret_access_key: your_secret_access_key
region: your_region
bucket: your_bucket_name
config/environments/development.rb:
config.active_storage.service = :local
config/environments/production.rb:
config.active_storage.service = :amazon
5. モデルに添付ファイルを追加
例として、ユーザーのプロフィール画像をアップロードする機能を考えます。Userモデルに以下のように追記します。
class User < ApplicationRecord
has_one_attached :profile_image
end
has_one_attachedメソッドを使って、Userモデルにprofile_imageという名前のファイルを添付します。
5. フォームでファイルアップロードフィールドを使用する
ユーザーのプロフィール画像をアップロードするためのフォームを作成します。
<%= form_with(model: @user) do |form| %>
<div class="field">
<%= form.label :profile_image %>
<%= form.file_field :profile_image %>
</div>
<%= form.submit %>
<% end %>
6. 画像の表示
画像を表示する場合は以下のようにrails_blob_pathやrails_representation_pathヘルパーを使用します。
<%= image_tag @user.profile_image if @user.profile_image.attached? %>
以上の手順に従うことで、Active Storageを使ってRailsアプリケーションにファイルアップロード機能を追加することができます。