GoogleCloudDatastoreのBookshelfチュートリアル(Rails版)やる

#はじめに
前述のGoogleCloudDataStoreを始めるにあたって、
ログイン実装 + サンプルデータの格納など基本的な動作を検証するために、
Bookshelfのチュートリアルを行なったので要点のみの覚書です。
Googleログイン認証 + 本の管理(テキスト+写真)ができるようになります。
言語はRails版をやりましたが、他の言語でも手順は同じです。

##Bookshelfチュートリアル
これをやっただけ。
https://cloud.google.com/ruby/getting-started/authenticate-users?hl=ja

##gem
ORMを使うようなgemは、GoogleCloudDatastoreで使えないことが多そう。。
例えば、ユーザー管理でお馴染みのDeviseなどは
ActiveRecordかMongoDB(mongoid)対応なので、使えない様子。

##ORM
Go言語だとgormなど選択肢があるようだが、Ruby言語ではあまり情報がなさそう？
調べている中で、ActiveModel-DataStoreというのを発見しました。
https://github.com/Agrimatics/activemodel-datastore

#ダッシュボード上での事前準備

##1.サービスアカウントキーの作成
手元のPCからrailsアプリケーションをDataStoreに接続するなど、deployせずに開発をするために必要な作業。このキーが漏れてしまわないように注意が必要。

###1-1.サービスアカウントキーを選択
<img width="776" alt="スクリーンショット 2018-01-24 11.40.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/858afbbc-a025-ebf2-dae6-80e849104591.png">

###1-2.jsonを選択
<img width="742" alt="スクリーンショット 2018-01-24 11.40.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/241a9d1c-65a2-33ce-44f0-e30a5a73317c.png">

###1-3.手元のコンソールでexportする

```
export GOOGLE_APPLICATION_CREDENTIALS=/Users/test1/Documents/googlecloudplatform_key/test-key.json
```

##2.CloudDatastoreの用意
今回DBとして使うCloudDatastoreを用意します。
https://console.cloud.google.com/datastore/

###2-1.試してみる>エンティティを作成
<img width="1095" alt="スクリーンショット 2018-01-22 15.38.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/2b894b30-1266-7427-7d83-1942c803c1f7.png">

##3.OAuth認証の用意
ログイン実装で使うOAuth認証の準備をします。
https://console.cloud.google.com/apis/credentials/oauthclient?project=smiling-audio-97113&hl=ja

###3-1.認証情報を作成>OAuthクライアントIDの作成
<img width="544" alt="スクリーンショット 2018-01-22 15.31.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/cd57508c-73a3-0616-60d7-b539dff7b931.png">

###3-2.ウェブアプリケーション>http://localhost:3000/auth/google_oauth2/callback
<img width="643" alt="スクリーンショット 2018-01-22 15.31.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/c29ee2c6-2400-fcce-7dc5-8e27818a4441.png">

###3-3.クライアントIDとシークレットを取得
![スクリーンショット 2018-01-22 15.33.36.png](https://qiita-image-store.s3.amazonaws.com/0/43766/43246ecd-8477-d46f-5582-3920b79e8831.png)

##4.bucketの作成
画像を保管するバケットを作成します。一意の名前である必要があるのでproject名にすると良いかも。
###4-1.バケット作成
![スクリーンショット 2018-01-24 11.09.56.png](https://qiita-image-store.s3.amazonaws.com/0/43766/e896aeb7-68e6-ef13-e725-e9e224c9407a.png)
![スクリーンショット 2018-01-24 11.02.26.png](https://qiita-image-store.s3.amazonaws.com/0/43766/03e4c9ee-b4ee-8b45-59ba-7590e4e7b3a1.png)

###4-2.バケットへのアクセス権の設定
bucketのaccess_key_idとsecret_access_keyを取得します
![スクリーンショット 2018-01-23 18.17.38.png](https://qiita-image-store.s3.amazonaws.com/0/43766/6b1abed6-6b0c-278d-86d4-d362f3c7edb4.png)
![スクリーンショット 2018-01-23 18.17.50.png](https://qiita-image-store.s3.amazonaws.com/0/43766/aec5c829-d547-9e8f-bc1a-00b5f9688bf5.png)

#手順開始

##1.gcloudコマンドを使えるようにする

```
$ curl https://sdk.cloud.google.com | bash
$ source .bash_profile
```

##2.ログインして、プロジェクトIDとNUMBERを見る

```
$ gcloud auth login
$ gcloud projects list
PROJECT_ID         NAME        PROJECT_NUMBER
gcp-demo-12345     gcp-demo    12345
```

##3.cloneする

```
$ git clone https://github.com/GoogleCloudPlatform/getting-started-ruby/
$ cd getting-started-ruby/4-auth
$ source .bashrc
```

##4.インストール

```
$ bundle install
```

##5.DBの接続

```
$ cp config/database.example.yml config/database.yml
```

```config/database.yml
development:
  dataset_id: gcp-demo-12345
production:
  dataset_id: gcp-demo-12345
test:
  dataset_id: gcp-demo-12345
```

##6.Authの設定

```
$ cp config/settings.example.yml config/settings.yml
```

事前準備で取得したclient_idとclient_secretを書く

```
default: &default
  oauth2:
    client_id: aaaa
    client_secret: bbbb
  cloud_storage:
    bucket: your-bucket-name
    access_key_id: your-access-key-id
    secret_access_key: your-secret-access-key
development:
  <<: *default
production:
  <<: *default
```

##7.起動

```
$ rails server
```

##8.手元で起動する(やったね)
<img width="780" alt="スクリーンショット 2018-01-24 12.38.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/6450edc2-0375-6258-7549-c1b737863e73.png">



#本番にdeployする
ここまでできていれば本番へdeployするのはとても簡単。

```
//リストを見る
$ gcloud projects list
//どれかのプロジェクトに紐づける
$ gcloud config set project mongo-demo-182807
//デプロイする
$ gcloud app deploy
//初回は5分くらいコンソールが進むのを待つ
.....
//準備ができたらブラウザで開く
$ gcloud app browse
```