Active Jobは非同期処理機能を提供するライブラリです。さまざまなバックエンド上で実行する非同期処理(メール送信、データ集計をしてCSVファイルを作成)を統一的に利用できます。時間がかかる処理を先にレスポンスをクライアントへ返しておき、バックグラウンドで処理を別途実行します。
Ruby on RailsのActiveJobとは? - Qiita
Active Jobを利用している機能:Action Mailer、Action Mailbox、Active Storage
以前はファイルアップロード機能を実装するときは、CarrierWaveなどのgemを使っていましたが、Rails 5.2からはActive Storageという公式のファイルアップロード機能が提供されています。
Active Storageの機能は主に2つのモデルで作られています。ActiveStorage::Attachment
とActiveStorage::Blob
です。どのモデルに紐づけられた画像もAttachmentとBlobを利用します。
ActiveStorage::Attachment
:主となるモデルとActiveStorage::Blob
の中間テーブル
ActiveStorage::Blob
:アップロードファイルのメタ情報を管理するテーブル
($ bin/rails active_storage:install
を実行するとこの二つのテーブルが作成されます。)
本番環境ではS3、GCS、AzureStorageなどのクラウドストレージにファイルをおきます。
Active Storageにはダイレクトアップロード機能も実装されています。application.js
ファイルに下記の記述があります。これがダイレクトアップロード用のJavaScriptライブラリです。
require("@rails/activestorage").start()
そしてファイルを添付するフォーム(file_field
)にdirect_upload: true
を追加するとsubmitボタンが押されると同時にストレージにファイルをダイレクトアップロードするようになります。複数のファイルを同時にアップロードしたいときはmultiple: true
というオプションも追加します。
Active Storageにはバリデーション用のヘルパーメソッドがありません。なので自分で実装するか、Active Storage Validationsというgemを利用する必要あります。