Railsからスプレッドシートに出力する方法

# はじめに
この記事では、Railsからスプレッドシートに出力する方法をご紹介いたします！

**前提：Railsの環境構築済み、Railsのテスト用プロジェクト作成済み、Googleアカウント取得済み**

# GoogleDriveAPI
Googleのアカウントは作成済みであることを前提に進めていきます。
まず、GoogleSpreadSheetに出力するために、GoogleDriveAPIを有効化する必要があります。有効化することによって、クライアントID・シークレットIDを取得できますので、そのIDをRailsに埋め込んでいく形になります。
この作業を行なっている方は飛ばしていただいて大丈夫です！

# Google Cloud Platformへアクセス
URL:https://console.cloud.google.com
に使用するGoogleアカウントでログイン後、アクセスしてください。
すると、Googleのクラウドサービスがいくつか出てくると思います。ここはとりあえず無視して、左上にあるナビゲーションバーから、APIとサービスをクリックしてください。
![google_cloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/d5db97af-a35c-133a-0259-27f689711448.png)

そして、認証情報をクリックしてください！
まだプロジェクトを一度も作成したことがない場合はこうなります。
![google_cloud02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/365f89e1-dc44-6a36-df8a-d858b6846b18.png)

次に`作成`をクリックしてください。
`プロジェクト名`を入力してください。ここでは、`RailsProject`と入力します。
下記のようになれば問題ありません。
![google_cloud03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/55810ce1-5ea0-ee5d-b916-de0b61b3bab4.png)

次に`認証情報を作成`をクリックします。
そしたら`OAuthクライアントID`をクリックしてください。
次に`同意画面を設定`をクリックしてください。
そしたら下記のような画面になると思います。
![google_cloud04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/21a25c5d-8dd1-6d7e-a5c5-7dc06f3f1796.png)

ここでは`アプリケーション名`を適宜入力してください。好きな名前で大丈夫です。後々このアプリケーション名が必要になったりはしないので。
アプリケーション名を入力したら、下にスクロールして、保存をクリックしてください。

そして、アプリケーションの種類を`ウェブアプリケーション`に設定して、作成ボタンをクリックしてください。
![google_cloud05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/c18a8fa8-bade-5b90-8953-2d440293cc8a.png)

そしたら一定時間ローディングされると思います。
それが終わると、クライアントIDとシークレットIDが表示されると思います。
この2つのIDはRailsで使用するものになりますので、どこかに取っておいてください。

長かったですが、以上がGoogleDriveAPIを使用するためのIDを取得する手順でした！
まだ続きます。。
ここからが本番ですね。。。

# 設定ファイルの作成
先ほど取得したIDをRailsに伝えてあげます。そのために`config.json`ファイルを作成します。作成する場所はRailsアプリケーション直下で大丈夫です。Atomというエディタで作った場合このようになります。
<img width="271" alt="atom_config_json.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485469/1631fce1-442e-9582-2744-70969435d96b.png">

そして、`config.json`ファイルを下記のように書き込みます。

```json
{
  "client_id": "クライアントID",
  "client_secret": "シークレットID"
}
```

# Gemfileに追加
Gemfileにgoogle-drive-rubyというgemを追加します。

```rb
gem 'google_drive'
```

`bundle install`コマンドを忘れずに行なってください！

# スプレッドシートを取得して出力する
APIを記述する場所はコントローラーでもモデルでも呼び出せれば問題ありません。
ここでは、homeコントローラ、topアクションを作成してあるとしてご説明いたします。

この記事と同じようにするには、`rails g controller home top`というコマンドを打ち、`routes.rb`に`root home#top`とすると良いと思います。

本題のスプレッドシートを取得して出力する処理は下記になります。

```rb
# GoogleDriveのセッションを取得する
@session = GoogleDrive::Session.from_config("config.json")
# 書き込むシートを指定する
@sheets = @session.spreadsheet_by_key("*****************").worksheet_by_title("シート名")
# スプレッドシートへの書き込み
@sheets[1, 1] = "Hello World"
# シートの保存
@sheets.save
```

これでスプレッドシートに出力されると思います。
spreadsheet_by_keyで指定する文字列は、スプレッドシートを開いたときのURLに含まれる文字列になります。URLは`https://docs.google.com/spreadsheets/d/・・・`となっており、・・・の部分にランダムっぽい文字列がありますので、それをコピーして、keyと指定すれば大丈夫です。

またシート名はスプレッドシートの下の方にあるシート名を適宜変更してもらいます。初期設定のままの人は`シート1`と書けば大丈夫かと思います。

最後に、`@sheets[1, 1]`は最初の1が行、次の1が列になります。
ですので、`@sheets[2, 1]`と指定したら2行目の1列目(A列)にHello Worldが出力されると思います！


# 終わりに
以上が『Railsからスプレッドシートに出力する方法』でした！
記事に画像をちょくちょく入れてみました。

APIを使いこなせるようになると、できることがさらに増えますし、ドキュメントを読む必要になってきますので、技術の幅も広がると思います^^
ぜひ挑戦してみてください！