スライドショー

【Rails入門】CarrierWaveを使って画像のアップロードに挑戦!

Ruby on Rails(以降、Rails)でWebアプリを開発しているときに、

・画像を投稿(アップロード)する機能が欲しいな

と思うことがありますよね。

Railsで新しい機能を追加したときに考えるべきなのは、

・よし、自分で全部実装してやるぜ!

ということではなく、

・ちょうど良いgemがないかな…?

ということですね。

今回は、CarrierWaveというgemを使って画像をアップロードする機能を追加する操作を説明しましょう!

画像をアップロードするためのCarrierWave!

Railsで開発するWebアプリに、画像をアップロードする機能を付与するには、CarrierWaveというgemを使うと簡単です。

参考:https://github.com/carrierwaveuploader/carrierwave

上記のページでは、長い説明が書かれていますが、画像をアップロードするだけの基本的な機能だけなら、この記事で説明する程度の操作で追加できます。

もちろん、CarrierWaveを使わなくてもアップロード機能を追加できますので、腕に自信のある方は挑戦してみてくださいね。

動作を確認するためのWebアプリを作成する

アップロード機能の作成方法を理解するために、Rails 5.1をインストールしてWebアプリを作ります。

(1)Railsをインストールします。

私は、以下の記事を参考に、VirtualBoxで作成した仮想パソコンにインストールしたLinux Mintに、Railsの開発環境を作成しました。

基本的には記事の手順に従って操作しますが、app/samurai/sample1ディレクトリを作成する代わりに、app/samurai/uploader-demoディレクトリを作成しました。

Railsを起動して、ブラウザで画面が表示されることを確認したら、いったんRailsを終了してから次に進みます。

初心者でもかんたん!Ruby on Rails の開発環境の構築手順(Mac/Windows 両対応)
更新日 : 2019年8月9日

Linux Mintのインストールについては、以下の記事で詳しく説明しています。

Linux Mint Cinnamonエディションを使ってみよう
更新日 : 2019年12月5日

アップロード機能を追加するために、CarrierWaveをインストールします。

(2)Gemfileの最終行に以下の内容を追記します。

gem 'carrierwave', '~> 1.0'

(3)新しい「端末」で以下のコマンドを1行ずつ順番に入力します。

cd app/samurai/uploader-demo
bundle install
bin/rails generate uploader Avatar
bin/rails generate scaffold User name:string avatar_path:string
bin/rails db:migrate

モデルを修正する

Avatarアップローダと、Userモデルに作成したフィールドavatar_pathを関連付けます。

avatar_pathにアップロードした画像をAvatarアップローダが処理するイメージです。

(1)app/models/user.rbを編集します。

変更前:

class User < ApplicationRecord
end

変更後:

class User < ApplicationRecord
  mount_uploader :avatar_path, AvatarUploader
end

ビューを修正する

アップロードするファイルを選択するUIを作成します。

Google Chromeでは「参照」ボタンが表示されます。

(1)app/views/users/_form.html.erbを編集します。

変更前:

(省略)
  
<%= form.label :avatar_path %> <%= form.text_field :avatar_path, id: :user_avatar_path %>
(省略)

変更後:

(省略)
  
<%= form.label :avatar_path %> <%= form.file_field :avatar_path, id: :user_avatar_path %>
(省略)

続けて、アップロードした画像を表示するコードを追加しましょう。

(2)app/views/users/show.html.erbを編集します。

変更前:

(省略)

Avatar path: <%= @user.avatar_path %>

(省略)

変更後:

(省略)

Avatar path: <%= @user.avatar_path %>

<%= image_tag @user.avatar_path %>

(省略)

動作を確認する

モデルとビューを修正したので、CarrierWaveの基本機能が使えるようになりました。

動作を確認してみましょう。

(1)「端末」で以下のコマンドを入力します。

bin/rails server

(2)ブラウザで「http://localhost:3000/users」にアクセスします。

(3)「New User」をクリックします。

(4)「Name」に任意の名前を入力し、「参照」をクリックします。

(5)画像を選択し、「開く」をクリックします。

(6)「Create User」をクリックします。

画像がアップロードされ、ローカルストレージに保存されます。

パスも表示されていますので、ファイルが保存されているか確認してみてください。

ここまでできたら、次のステップとして、以下のサイトを参考に、fogを使ったクラウドストレージへのファイルのアップロードに挑戦しても良いでしょう。

参考:https://qiita.com/junara/items/1899f23c091bcee3b058

Rails 5.2ならActive Storageを使おう!

Rails 5.2以降は、Active Storageという機能が提供されています。

詳しくは、以下のサイトをご覧ください。

参考:https://railsguides.jp/active_storage_overview.html

Active Storageには、CarrierWaveと同じような機能があります。

たとえば、ローカルストレージに保存するだけで無く、Amazon S3Google Cloud Storageのようなクラウドストレージへのアップロードも可能です。

Rails 5.2以降を使える場合は、Active Storageを積極的に使っていきましょう。

まとめ

今回は、CarrierWaveを使って、Webアプリに画像をアップロードする機能を追加する方法を説明しました。

標準では、アップロードした画像はローカルストレージに保存されます。

fogを使うと、Amazon S3やGoogle Cloud Storageのようなクラウドストレージにファイルをアップロードできます。

また、Rails 5.2以降であれば、CarrierWaveを使わずにActive Storageを使うと同じような機能を実装できることも紹介しました。

画像に限らずファイルのアップロードはよく使う機能です。

この記事を通じて、CarrierWaveを試したことで、Railsの階段を一段上ったと言えるでしょう。

ではまた!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説