Morizou on Rails

行動・努力・俯瞰

Active Storage

概要・導入方法

Railsガイド曰く…

Active StorageとはAmazon S3Google Cloud Storage、Microsoft Azure Storageなどの クラウドストレージサービスへのファイルのアップロードや、ファイルをActive Recordオブジェクトにアタッチする機能を提供します。

アプリケーションのデータベースで active_storage_blobsとactive_storage_attachmentsという名前の2つのテーブルを準備して$ rails active_storage:installを実行。(もちろん$ rails db:migrateも)

そして
config/storage.yml

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

というように宣言。

実際に利用するサービスをActive Storageに認識させるには各環境で
config/environments/development.rb

config.active_storage.service = :local

とすればOK。

使えるようになるもの

has_one_attached
レコードとファイルの間に1対1のマッピングを設定し、各レコードには1つのファイルを添付できる。(1対多の関係の時はhas_many_attached)
例えばUserモデルとかがあった場合は、has_one_attached :avatarみたいな感じで設定すると、通常のカラムと同じような感じで利用できるようになる。
ただそれだけならカラムを作ればいいじゃんってなるけど、ここからが少し違うところ。
既存のuserに添付する時user.avatar.attach(params[:avatar])みたいな感じで書ける。
特定のuserがavatarを持っているかどうかをuser.avatar.attached?で調べられる。
ファイルをモデルから削除する場合はuser.avatar.purgeのようにpurgeメソッドを使える。
その他も色々あるっぽいがとりあえずこれくらいにしとく。

Variant
プラスでgem ‘mini_magick’を設定している場合は利用可能。
avatar.variant(resize:’100x100’)のように引数にサイズを設定したら、variantでActive Strageで保存された画像を実際にそのサイズに設定をしてくれる。
また後ろにprocessedを設定することで既に同じサイズで設定してある画像だった場合は、変換処理をしないため、何度も呼び出す場合は時間がかからなくなる。

参考URL

https://railsguides.jp/active_storage_overview.html
https://qiita.com/kazuomatz/items/3cdbd2c40576c2e9d89b