0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】railsでawsのs3を使用するときの設定

Posted at

はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指している Taira です。
本日は Rails チュートリアルで出てきた AWS S3 を使う際のrequire: falseの意味と必要性についてまとめておきたいと思います

Rails で AWS S3 を使う際のrequire: falseの意味と必要性

Rails アプリで画像アップロードを行う際に AWS S3 を利用する場合、Gemfile に以下のように記述することがあります。

group :production do
  gem 'aws-sdk-s3', '1.114.0', require: false
end

この記述には 2 つの意図があります。


1. require: falseの意味

Ruby のrequire は、外部ライブラリや gem を読み込んで現在のプログラムで使えるようにするための文です。

Bundler は Gemfile に記述された gem を自動的に require するようになっていますが、require: falseを付けることで、自動で require されなくなります。

これは下記のような理由で便利です。

  • Rails 起動時のパフォーマンス向上
  • 利用場面を限定したい
  • require 順の制御

2. group :production の意味

この記述は、その gem を「本番環境のみ」で使うことを示します。

S3 は主に本番環境で画像やファイルを保存するために使われますが、開発時はローカルディスクで十分なため、ローカルにはインストールしないようにするのが理想的です。


3. bundle config set --local without 'production'

このコマンドは、「production グループに含まれる gem をインストールしない」ようにする Bundler の設定です。

これを実行した後にbundle installすれば、aws-sdk-s3 はローカルにはインストールされません。
そもそも、ローカルにインストールしない理由は、AWS の S3 を実際に使用するのは本番環境のみでローカル環境(開発環境)では使用しないからです。


4. Active Storage の場合はrequire 不要

Active Storage は自動でaws-sdk-s3を require するため、開発者が自分でrequire 'aws-sdk-s3'を書く必要はありません。

つまり:

  • Active Storage で画像を S3 にアップするだけならrequire: falseのままで OK
  • しかし、自前で S3 を操作するスクリプトを書く場合はrequire 'aws-sdk-s3'が必要

5. まとめ

条件 require 必要なし require 必要あり
Active Storage で S3 を使う ○ (Rails が自動) -
自前で S3 にアップロード - require 'aws-sdk-s3' 必要
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?