水珈琲の日誌

気になったことなんでも屋

  • ホーム
  • 水珈琲の日誌について
  • おすすめ記事
  • プライバシーポリシー
  • Menu

  • Sidebar

  • Prev

  • Next

  • Search

  1. Home>
  2. プログラミング>
  3. Webサービス開発

RubyでGoogle Cloud Storageを使おう

2021年6月24日Webサービス開発

  •  Twitter
  •  Facebook
  • B! Hatena
  •  Pocket
  •  LINE
  •  LINE

こんにちは。
この記事ではRubyを使ってGoogle Cloud Storageにファイルをアップロード、参照、削除する方法を紹介したいと思います。
RailsではなくSinatraを使用していますが、基本的にはどちらでも大きく変わりません。

このプロジェクトの完成形はmizucoffee/gcs_sampleに、サンプルサイトはこちらにあります。
記事と合わせてご覧ください。

Contents
  • 1. 下準備
    • 1.1. サービスアカウントを作る
    • 1.2. バケットの準備
    • 1.3. プロジェクトの準備
  • 2. 使ってみよう!
    • 2.1. ファイルアップロード
    • 2.2. ファイルのURLを取得
    • 2.3. ファイルのURLを取得
  • 3. サンプルサイト

Sponsored Links

下準備

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

まずは、Google Cloud Platformでサービスアカウントを作成していきましょう。
プロジェクトはすでにあるものを使用します。無い場合は作ってください。


Google Cloud Consoleの上の検索窓に認証と入力し、「認証情報」を選びます。
開いたページにある「認証情報を作成」の中の「サービスアカウント」を選択します。


サービスアカウント名を入力します。任意のテキスト(プロジェクト名など)で大丈夫です。
入力出来たら「作成して続行」をクリックしましょう。


ロールを「Cloud Storage」の中にあるStorage オブジェクト管理者にします。
本番環境で使用する場合は最低限の権限のものになるよう見直してください。


作成したサービスアカウントの編集マーク(鉛筆マーク)をクリックします。


詳細ページが表示されるので、キーをクリックします。


鍵ページが表示されたら、「鍵を追加」の中の「新しい鍵を作成」をクリックします。


キーのタイプはJSONのまま、「作成」ボタンをクリックします。
すると、JSONファイルがダウンロードされます。このファイルが認証に必要なファイルになるので大切に保管してください。
今回はプロジェクトルートに入れておきましょう(Gitで管理している場合は必ずgitignoreに追加しておいてください)。

バケットの準備

続いてバケット(Cloud Storageでの保存場所)の準備をしましょう。
上の検索窓にStorageと入力して「Cloud Storage」を選択します。


ブラウザというページが表示されるので、「バケットを作成」をクリックします。


新しく作るバケットの名前を入力し、作成ボタンをクリックします。
バケット名は他のバケット名と重複しないようにする必要があるので、プロジェクト名+付けたい名前などにすると設定しやすいかと思います。

これでバケットの準備は完了です!

プロジェクトの準備

まずはライブラリをインストールしましょう。
Gemfileに以下を追記します。

gem 'google-cloud-storage'

Google Cloud Storageを使うにあたって必要な記述は以下の通りです。

require 'google/cloud/storage'
storage = Google::Cloud::Storage.new(
  credentials: "./credentials.json"
)
bucket = storage.bucket "gcs-sample-posts"

1行目はライブラリの読み込み、3-5行目はStorageインスタンスの初期化です。credentialsで認証情報が入ったファイルを指定しています。先程DLしたJSONファイルを指定しましょう。
7行目はバケットを指定しています。先程作ったバケット名を入力しておきましょう。

使ってみよう!

実はファイルアップロードなどはかなり簡単に書くことが出来ます。

ファイルアップロード

以下のように書くと、プロジェクトフォルダにあるabdcef.pdfをsample.pdfという名前でアップロードすることが出来ます。

file = bucket.create_file './abdcef.pdf', 'sample.pdf'

ファイルのURLを取得

以下のように書くと、Cloud Storage上にあるsample.pdfを取得し、署名の入った(=有効期限付き)URLを返してくれます。

file = bucket.file 'sample.pdf'
puts file.signed_url

ファイルのURLを取得

以下のように書くと、Cloud Storage上にあるsample.pdfを削除をします。

file = bucket.file 'sample.pdf'
file.delete

サンプルサイト

上記のコードを組み合わせて簡単なファイル転送機能を作ってみました。

こちらから見れるので見てみてください。
コード的には以下のような感じです。詳細はリポジトリをご覧ください。


require 'bundler/setup'
Bundler.require
require 'sinatra/reloader' if development?
require './models'
require 'google/cloud/storage'
require 'securerandom'
storage = Google::Cloud::Storage.new(
  credentials: "./credentials.json"
)
bucket = storage.bucket "gcs-sample-posts"
get '/' do
  @posts = Post.all
  erb :index
end
get '/file/:id' do
  data = Post.find(params[:id])
  file = bucket.file data.file
  redirect file.signed_url
end
get '/file/delete/:id' do
  data = Post.find(params[:id])
  file = bucket.file data.file
  file.delete
  data.destroy
  redirect '/'
end
post '/post' do
  if params[:file]
    img = params[:file]
    tempfile = img[:tempfile]
    file = bucket.create_file tempfile.path, SecureRandom.uuid + File.extname(tempfile.path)
    Post.create(body: params[:body], file: file.name)
  end
  redirect '/'
end

Webサービス開発cloud storage, gcs, google cloud platform, Ruby, service account, Sinatra

Posted by mizucoffee


  •  Twitter
  •  Facebook
  • B! Hatena
  •  Pocket
  •  LINE
  •  LINE
RubyでGoogle Maps Places APIを使おう
Next
【TextView】Android開発基礎シリーズ – Kotlin編
Prev

Sponsored Links

Related Posts

Ruby + SinatraでLINE Botを作ろう – Part 1

こんにちは。 この連載では、複数回に渡りRubyとSinatraを使って 本の裏 ...

Ruby + SinatraでLINE Botを作ろう – Part 2

こんにちは。 この連載では、複数回に渡りRubyとSinatraを使って 本の裏 ...

Ruby + SinatraでLINE Botを作ろう – Part 3

こんにちは。 この連載では、複数回に渡りRubyとSinatraを使って 本の裏 ...

RubyでGoogle Maps Places APIを使おう

こんにちは。 この記事ではRubyを使ってGoogle Maps Places ...

Discussion

New Comments

No comments yet. Be the first one!

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

TrackBack URL

Profile

mizucoffee
水珈琲
GitHub icon
   
気になったことなんでも屋

Search

Recent Posts

  • Touch DesignerでPythonを使いたい! 準備編
  • RubyでGoogle Maps Places APIを使おう
  • RubyでGoogle Cloud Storageを使おう
  • 【TextView】Android開発基礎シリーズ – Kotlin編
  • 【Android開発】KotlinでIDを使ってViewの操作が出来ないときは

Recent Comments

  • Takashi Higashiuchi on “Cannot use Accessory”の対処法

Archives

  • December 2022
  • June 2021
  • January 2021
  • November 2020
  • September 2020
  • December 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019

Categories

  • Androidアプリ開発
  • GPG
  • iPad
  • Webサービス開発
  • サーバー
  • ネットワーク
  • プログラミング
  • 商品レビュー
  • 技術
  • 未分類
  • 雑記

Copyright © 2025 水珈琲の日誌 All Rights Reserved.

WordPress Luxeritas Theme is provided by "Thought is free".

PAGE TOP