Rails
GoogleCloudStorage
ActiveStorage

RailsのActive StorageでGoogle Cloud Storageを使うときの補足

概要

Rails5.2より導入されたActive Storageにより、GCS(Google Cloud Storage)やAmazon S3などのクラウドストレージとRails Appを連携させることがぐっと楽になりました。

Active Storage の概要 | RAILS GUIDES

基本的に↑のガイドの通り行えばよしなに構築が行えます。
が、GCSを連携させようとしてこのガイドの「2.4 Google Cloud Storage Service」を見るといきなり「サービスを宣言してください」と言われます。これをやっていく過程で少し詰まったので、やり方をメモしておきます。

やり方

Google Cloud Platformに登録する

GCSはGCP(Google Cloud Platform)というプラットフォームの1機能であり、まずこれに登録する必要があります。

Google Cloud Platform

↑をクリックしてお使いのGoogleアカウントでログインすると、「$300の無料クーポンが...」みたいなメッセージが出てきます。

2018-09-23 (2).png

もらえるものはありがたくもらっておきましょう。このクーポンは1年間有効ですが、$300というのはかなりのアクセス数がないと使いきれない金額です1。つまり実質1年間無料です。

GCPコンソールにアクセスし、プロジェクトを作成する

ここです。
新しくプロジェクトを作成するよう言われるので、作成しましょう。

GCSのページにアクセスし、バケットを作成する

コンソールの左上のナビゲーションメニューから、「ストレージ」→「Storage」→「ブラウザ」でGCSのページにアクセスします。
その後ページ上部にある「バケットを作成」をクリックすると次のような画面に移ります。

2018-09-23 (1).png

  • 名前: Active Storageを素直に使う場合はなんであれ動作します
  • デフォルトのストレージクラス: Webサービスの場合「Multi-Regional」か「Regional」かと思われます。Regionalのほうが若干安くなります。NearlineやColdlineはめったに使いません。詳細はこちら
  • 場所: 日本からのアクセスが多そうなら「アジア(Multi-Regional)」か「東京(Regional)」にしましょう。

サービスアカウントを作成する

RailsがGCSの内部を操作できるようにするためのロボット用アカウントを発行する必要があります。
ナビゲーションメニューから、「APIとサービス」→「認証情報」→「認証情報の作成」→「サービスアカウントキー」で作成できます。

2018-09-23 (3).png

「新しいサービスアカウント」を選択し、適当にアカウント名とIDをつけましょう。
役割はストレージのアップロードや削除、閲覧など広く行うので「ストレージ管理者」としました2
キーのタイプは「JSON」を選択してください。

これを作成するとtxtファイルがダウンロードされます。これは次のRailsの設定で使います。

Rails側の設定

ここまで来て、ようやく最初のガイドが言っていた「サービス」の作成が完了します。
あとは先程ダウンロードしたtxtファイルの内容をconfig/storage.ymlにコピればOK...とみせかけて、落とし穴があります。

credentialsを使おう

先程のtxtファイルの中身はGCSにアクセスするためのキーです。
もしこれを素直にconfig/storage.ymlに丸コピしてしまい、Githubのパブリックリポジトリにpushなんてしてしまったら...全世界の人間があなたのGCSにアクセスし放題になってしまいます。これはとても危険です。
そういったことを防ぐためにRailsにはcredentialsという機能があります(Rails 5.2より)。これを使いましょう。

credentialsについて詳細に述べてしまうと少し長くなってしまうので、わかりやすいこちらの記事を引用させていただきます。

Rails 5.2の新機能Credentialsでパスワード等を管理する | 動かざることバグの如し

また、この時にconfig/storage.ymlの書き方に少しだけクセがあるのですが、それについて記した私の記事もよろしければ御覧ください。

Active StorageにおいてYAML syntax errorが出る問題

できた!!!

あとは最初のガイドの通り進めれば、よしなにできると思います。
Active Storageはファイルのアップロードや提供、Modelとの関連付けなどが驚くほど簡単にできる素晴らしい機能です。
ぜひ使っていきましょう!


  1. あくまで個人制作のサービスの話です。また、総DLサイズに応じて課金されるため、1リクエストで何回もアクセスするようなコードの場合は課金額が膨れ上がる恐れがありますので気をつけましょう。 

  2. ここはもしかしたらもっと小さい権限で行けるかもしれません...(要検証)