🦔

【Ruby on Rails】ActiveStorageの概要とその利点、弱点

2024/07/15に公開

はじめに

パーフェクト 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
)

Image from Gyazo

ActiveStorageを使用する利点・弱点

ActiveStorageを使用する利点
こちらは主に、パーフェクトRuby on Rails記載内容です。

  • ファイルへのアクセス制限
    -> アップロードしたファイルにアクセスできるユーザーを制限するのに、画像を表示するためのページにはアクセス制限をかけつつ、画像そのものに対するURLには制限をかけないという対応ができる。

  • ダイレクトアップロード機能
    -> アプリケーションサーバーを経由せず、ファイルを直接クラウドストレージにアップロードすることができる。

ActiveStorageの弱点

  • validationヘルパーの不足
    -> バリデーション用のヘルパーメソッドがないので、自力で実装するかActive Storage Validationsなどのgem導入が必要。

  • cacheの不足
    -> バリデーションエラーでデータが送信できなかった場合、再度ファイルをアップロードする必要がある。

最後に

簡単ではありましたが、ActiveStorageの概要、その利点と弱点を記載しました。
こちらの記事にある通り、erbファイルを使用するのであれば、ActiveStorageを使用しない明確な理由はないのかも、と思いました。

現状ActiveStorageに関しては勉強不足な部分もあること、また実際に手元で動かしてみないと実感できない部分もあるため、今後アプリ開発する際はActiveStorageを使用したいと思いました。
ありがとうございました。

参考

Discussion