概要
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アカウントでログインすると、「$300の無料クーポンが...」みたいなメッセージが出てきます。
もらえるものはありがたくもらっておきましょう。このクーポンは1年間有効ですが、$300というのはかなりのアクセス数がないと使いきれない金額です1。つまり実質1年間無料です。
GCPコンソールにアクセスし、プロジェクトを作成する
ここです。
新しくプロジェクトを作成するよう言われるので、作成しましょう。
GCSのページにアクセスし、バケットを作成する
コンソールの左上のナビゲーションメニューから、「ストレージ」→「Storage」→「ブラウザ」でGCSのページにアクセスします。
その後ページ上部にある「バケットを作成」をクリックすると次のような画面に移ります。
- 名前: Active Storageを素直に使う場合はなんであれ動作します
- デフォルトのストレージクラス: Webサービスの場合「Multi-Regional」か「Regional」かと思われます。Regionalのほうが若干安くなります。NearlineやColdlineはめったに使いません。詳細はこちら
- 場所: 日本からのアクセスが多そうなら「アジア(Multi-Regional)」か「東京(Regional)」にしましょう。
サービスアカウントを作成する
RailsがGCSの内部を操作できるようにするためのロボット用アカウントを発行する必要があります。
ナビゲーションメニューから、「APIとサービス」→「認証情報」→「認証情報の作成」→「サービスアカウントキー」で作成できます。
「新しいサービスアカウント」を選択し、適当にアカウント名と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との関連付けなどが驚くほど簡単にできる素晴らしい機能です。
ぜひ使っていきましょう!