はじめに
Rails 6.0で追加された「Action Text」で挿入した画像の保存先は、デフォルトではローカルディスク(Railsアプリの実行環境)となっています。
本記事では、Action Textで挿入した画像の保存先をローカルディスクからAmazon S3やGCSといったクラウドストレージサービスに変更する方法について説明しています。
本記事ではAction Textの実装方法については説明していないので、以下の記事を参照してAction Textを実装してください。
画像の保存先について
Action Textで挿入した画像は、Active Storageという機能を使って保存されます。Active Storageの設定は、app/config/environments/development.rb
(開発環境)またはapp/config/environments/production.rb
(本番環境)で確認できます。
config.active_storage.service = :local
ここで記述している:local
という設定は、app/config/storage.yml
で定義してあります。
local:
service: Disk
root: <%= Rails.root.join("storage") %>
画像の保存先をAmazon S3やGCSに変更
前提
- AWSに登録済み、IAMとバケット作成済み
- GCPに登録済み、サービスアカウントとバケット作成済み
Amazon S3
Gemfileに以下を追加し、bundle install
を実行します。
gem 'aws-sdk-s3', require: false
app/config/environments/development.rb
(開発環境)またはapp/config/environments/production.rb
(本番環境)を以下のように変更します。
config.active_storage.service = :amazon
app/config/storage.yml
に以下を追記します。
項目 | 設定例 |
---|---|
service | S3 |
access_key_id | Credentialsで設定(後述) |
secret_access_key | Credentialsで設定(後述) |
region | バケットのリージョン |
bucket | バケットの名称 |
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: <バケットのリージョン>
bucket: <バケットの名称>
以下のコマンドを実行して、Credentialsを設定します。
$ EDITOR=vi rails credentials:edit
aws:
access_key_id: <アクセスキー>
secret_access_key: <シークレットキー>
これで画像の保存先がAmazon S3に変更できました。
GCS
Gemfileに以下を追加し、bundle install
を実行します。
gem 'google-cloud-storage'
app/config/environments/development.rb
(開発環境)またはapp/config/environments/production.rb
(本番環境)を以下のように変更します。
config.active_storage.service = :google
app/config/storage.yml
に以下を追記します。
項目 | 設定例 |
---|---|
service | GCS |
project | プロジェクト名 |
private_key_id | Credentialsで設定(後述) |
private_key | Credentialsで設定(後述、末尾に.dump をつける) |
bucket | バケットの名称 |
google:
service: GCS
project: <プロジェクト名>
credentials:
type:
project_id:
private_key_id: <%= Rails.application.credentials.dig(:gcs, :private_key_id) %>
private_key: <%= Rails.application.credentials.dig(:gcs, :private_key).dump %>
client_email:
client_id:
auth_uri:
token_uri:
auth_provider_x509_cert_url:
client_x509_cert_url:
bucket: <バケットの名称>
以下のコマンドを実行して、Credentialsを設定します。なお、private_key
は値に改行コード(\n)が含まれているので、ダブルクォーテーション("")で囲む必要があります。
$ EDITOR=vi rails credentials:edit
gcs:
private_key_id: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
private_key: "-----BEGIN PRIVATE KEY-----\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..."
これで画像の保存先がGCSに変更できました。
Credentialsが保存されない場合
上記のコマンドではCredentialsが保存されないという場合、以下のコマンドを試してみてください。Visual Studio CodeでCredentialsを編集できるようになります。
$ EDITOR="code --wait" rails credentials:edit
まとめ
Action Textで挿入した画像は、開発環境ではローカルディスク、本番環境ではクラウドストレージサービスに設定するのが一般的です。本記事を参考にしてAction Textで挿入した画像の保存先を変更していただければと思います。