【Ruby on Rails】ActiveStorageの概要とその利点、弱点
はじめに
パーフェクト ruby on railsを読んでいる中で、ActiveStorageとCarrierWaveを比較する項目が出てきました。
自分自身でアプリ開発した際は、なんとなくCarrierwaveを使用し実装しましたが、明確にActiveStorageを使用しない理由を定義出来ていないと感じたため、今回この記事を書いております。
内容に関しては勉強中になりますので、不足・誤り等ございましたら優しくご指摘いただけますと幸いです。
ActiveStorageの概要
Railsガイド及び、パーフェクトRuby on Rails内容を自分なりにまとめた内容です。
-
ActiveStorageの機能は「ActiveStorage::Attachment」と「ActiveStorage::Blob
」の主に2つから作られている。 -
下記実行すると、Active Storageが利用する3つのテーブルが作成される
①active_storage_blobs
②active_storage_attachments
③active_storage_variant_records -
他の画像アップロード用のgemは対象モデルに画像を扱うカラムを追加することが多いが、ActiveStorageはポリモーフィック関連を使用する。
①active_storage_blobs: アップロードされたファイルデータを保存する。
②active_storage_attachments: ポリモーフィックjoinテーブル。
③active_storage_variant_records: 生成された各バリアントに関するレコードを保存する。
ポリモーフィックjoinデーブル: ある1つのカラムが複数のテーブルを参照しているようなパターンの関連を表したもの (参照:ポリモーフィック関連/Active Storage/ActiveStorage::Blob/ActiveStorage::Attachment/has_one_attached
)
ActiveStorageを使用する利点・弱点
ActiveStorageを使用する利点
こちらは主に、パーフェクトRuby on Rails記載内容です。
-
ファイルへのアクセス制限
-> アップロードしたファイルにアクセスできるユーザーを制限するのに、画像を表示するためのページにはアクセス制限をかけつつ、画像そのものに対するURLには制限をかけないという対応ができる。 -
ダイレクトアップロード機能
-> アプリケーションサーバーを経由せず、ファイルを直接クラウドストレージにアップロードすることができる。
ActiveStorageの弱点
-
validationヘルパーの不足
-> バリデーション用のヘルパーメソッドがないので、自力で実装するかActive Storage Validationsなどのgem導入が必要。 -
cacheの不足
-> バリデーションエラーでデータが送信できなかった場合、再度ファイルをアップロードする必要がある。
最後に
簡単ではありましたが、ActiveStorageの概要、その利点と弱点を記載しました。
こちらの記事にある通り、erbファイルを使用するのであれば、ActiveStorageを使用しない明確な理由はないのかも、と思いました。
現状ActiveStorageに関しては勉強不足な部分もあること、また実際に手元で動かしてみないと実感できない部分もあるため、今後アプリ開発する際はActiveStorageを使用したいと思いました。
ありがとうございました。
Discussion