Active Storageを使ってファイルアップロードを試してみる

今回はRails 5.2から導入されるActive Storageを試してみたいと思います。

個人で開発しているRails 5.1のアプリに導入してみることにしました。

開発自体もまだ始めたばかりで、5.2がbetaになったこともあり、Rails自体をアップグレードしてActive Storageを利用してみることにします。

Railsのアップグレード

ではさっそくRailsをアップグレードしてみます。

Gemfileに現在の最新バージョンである5.2.0.beta2を指定してbundle update railsします。

Railsアップグレードと同時にActive Storageがインストールされているのが確認できます。

READMEに従いコマンドを実行します。

そしてエラーが発生します…

gemをアップグレードしたのですが、アプリ自体のアップグレードをやっていませんでした。

とりあえずroutes.rbと、deviseの導入で修正していたdevelopment.rb以外はアップグレード後のコードを取り込む形にしました。

しかしpumaを起動したところでさらにエラーが発生。

5.2ではbootsnapというRuby, Railsの高速化のためのgemがデフォルトで導入されるのですが、そちらをインストールしていませんでした。

bootsnapについては、Bootsnapについて という記事で詳しく説明されているので参考にして下さい。

無事pumaが起動しました。

では気を取り直して再度Active Storageを導入を開始したいと思います。

あれ…?どうやらconfig/application.rbでActive Storageを読み込む部分がコメントアウトされていたためRakeタスクが見つからなかったようです。

これで無事インストールが完了しました。

下記のようなマイグレーションファイルが生成されました。

Active Storageを使ってファイルをアップロードしてみる

それではさっそくファイルアップロードを試してみます。

今回は開発環境で試すのでクラウド環境へのアップロードではなくローカルへファイルを保存することにします。

Active Storage Overview — Ruby on Rails Guides を参考に進めます。

まずはActive Storageの設定ファイルであるconfig/storage.ymlを作成します。

また使用するストレージの種類を設定します。Local以外にもAmazon S3、Google Cloud Storage、 Microsoft Azure Storageなどが利用できるようです。

今回はlocalを設定します。

ファイルを添付するモデルに定義を追加します。

StrongParameterに上記の属性を追加します。deviseを利用しているので定義の内容は違いますが、やっていることは基本的に同じです。

最後にフォームにフィールドを追加して準備完了です。

これでcarrierwaveやpaperclipのようにファイルアップロードが可能になりました。

アップロードした画像を表示する

今度はアップロードしたファイルを表示してみます。表示にはurl_forを使うようです。

サイズが大きかったりした場合はresizeすることができます。

resizeするにはmini_magickが必要なのでインストールします。

これでファイルをresizeして表示できるようになりました。

まとめ

今回は駆け足でActive Storageの使い方を紹介しました。まだまだ新しいライブラリなので色々と地雷がありそうですが、使い続ける中で発生した問題はTipsなどは随時紹介していきたいと思います。

 

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です