【AWS】S3を用いた画像のアップロード(Carrierwave)


目的

AWSのS3を使用し、画像をアップロードする。

開発環境

macOS: Big Sur
Rubyバージョン: 2.6.5
Railsバージョン: 6.0.0

前提

手順

  1. はじめに
  2. Gemのインストール
  3. アップローダーの編集
  4. carrierwave.rbの編集
  5. 環境変数の設定

はじめに

今回はAWSのS3を用いた画像アップロードを実装していきます。

Gemのインストール

以降のコードを編集する際はmasterブランチで作業していきます。

それでは早速始めていきます!
S3を使用するために必要なfog-awsというGemをインストールします!

Gemfile
#省略
gem 'fog-aws'
ターミナル
% bundle install

これでインストールできました!

アップローダーの編集

続いて、画像の保存先をlocalからS3に保存されるように設定を変更します!
storage :filestorage :fogに変更することでS3へアップロードすることができます。

app/uploaders/avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  # storage :file
  storage :fog
#省略

これで画像の保存先が変更できました。

carrierwave.rbの編集

次に、S3で使用するバケット名リージョン名環境変数を記述します。
carrierwave.rbを作成し、以下のコードを追記します。

config/initializers/carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
    config.storage :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory  = 'バケット名' # バケット名
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], # 環境変数
      aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], # 環境変数
      region: 'ap-northeast-1', # リージョン
      path_style: true
    }
end 

「バケット名」の箇所には、自分のバケット名を入力します!

環境変数の設定

環境変数はこちらを参考に設定します。【AWS】S3を用いた画像のアップロード

設定後、正しくできているかを確認するために、下記のコマンドを入力してください。

% heroku config

確認できたら、コミットしてHerokuに反映させます。

ターミナル
% git push heroku master

その後、本番環境で挙動確認し問題がなければ完了です。

最後に

以上で、S3を用いた画像アップロード機能実装は完了です。
では。