nodeJSとGoogleSpreadSheet(スプレッドシート)を連携する方法

nodeJSとスプレッドシートを連携して、スプレッドシート上の値を取得するところまでを解説します。

順序
①. auth情報を取得する
②. スプレッドシート側で権限を確認する
③. nodeJSのコードを書いて実行する

の３本立てで説明しました。

##①. auth情報を取得する
Google Cloud Platform(Google API)でGoogleSpreadSheetのAPIを有効化させます。すでに"サービスアカウント"の認証情報のjsonを持っている人は不要です

「プロジェクトの選択」→「新しいプロジェクト」へ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/195ce167-6a16-1cc5-1492-43052512c939.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/e6b5fee9-8a72-cf1b-da93-97aa3ecb8d85.png)
必須の入力箇所のみ適当に入れてあとは空白（もしくは任意）で進めていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/acd58c0b-300d-fd14-aaae-19986df7a53b.png)
プロジェクトを立てたら「APIとサービス」へいって下記の流れでGoogle Spread Sheet APIを有効化させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/54158888-349f-e4d5-8a5e-71123d6788e4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/415c56ef-2553-f765-3f00-47a9b427f379.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/0766bd84-f2bf-15b6-806d-df8164b41a56.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/73266ffc-ab95-66f6-fea8-c3231248837c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/035e5edd-808b-861b-4039-7698b3bd4422.png)

画面の左端の方の「認証情報」をクリックしてから「認証情報を作成」をクリックします。下記の流れで"サービスアカウント"を作成してキーの入ったjsonファイルをDLします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/9bbea8bc-0c03-b680-bb78-f9815d1a31ce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/d3d684f0-9e4d-a5ed-e397-ea930df899dd.png)
必須項目より他は空白で大丈夫です（もしくは任意）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/9b32589c-0253-3bc3-d756-e3f5f8c75200.png)
画面左端の「認証情報」のページを改めて開くと"サービスアカウント"の中にアカウントが追加されているのでクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/dfa4134f-c7d7-da3d-3c3f-5102467deadb.png)

ここでjsonファイルとして鍵をDLすればGoogle API側の準備は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/0f7cfdba-d442-4574-8206-a7f368e9d930.png)


##②. スプレッドシート側で権限とスプレッドシートIDを確認する
次に対象となるスプレッドシート側で権限を確認しましょう。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/7782f914-1ecb-4d88-1e7a-fa5f33a7ab81.png)

ユーザーやグループと共有の中に自分が権限を与えたいメールアドレスが含まれているかどうかを確認し、なければ追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651103/8b3370b9-3391-8358-9bae-3d346fdd1eaf.png)

ここで、①. で用意した秘密鍵の中身を確認してください。

```
{
  "type": "service_account",
  "project_id": "test",
  "private_key_id": "hoge",
  "private_key": "hoge,
  "client_email": "ここにスプレッドシート側で権限が付与されているメールアドレスを入力する",
  "client_id": "hoge",
ー以下略ー
}

```
client_emailの中のメールアドレスはスプレッドシート側で権限を付与されたメールアドレスになります。


次にスプレッドシートIDを確認します。
スプレッドシートのページのURLに含まれており、ランダムな英字と記号となっています。スプレッドシートの部分をコピーしておきます。
https://docs.google.com/spreadsheets/d/スプレッドシートID/edit=hoge


##③. nodeJSのコードを書いて実行する
では①. と ②.の過程で準備した情報を使って見ます。ライブラリを用意。

```
yarn add google-spreadsheet-as-promised
or
npm install --save google-spreadsheet-as-promised
```

Auth認証→スプレッドシートの1行目のAからDまでを取得するコードです。スプレッドシートに適当な文字を入力して、下記コードを実行してみてください。

```spreadsheet.js
const GoogleSpreadsheetAsPromised = require('google-spreadsheet-as-promised');
const CREDS = require('./GoogleCloudからDLしてきた鍵.json');
const SHEET_ID = 'あなたのスプレッドシートID';

const spreadSheet = async() => {
  console.log('GoogleSpreadSheetへアクセス開始します');
  const sheet = new GoogleSpreadsheetAsPromised();;
  await sheet.load(SHEET_ID, CREDS);
  console.log('auth完了');

  const worksheet = await sheet.getWorksheetByName('sheet1');
  const cells = ( await worksheet.getCells('A1:D1') ).getAllValues(); // A1からD1までの値を取得する
  console.log(cells);

  return(sheet);
}

spreadSheet();

```

```
  const worksheet = await sheet.getWorksheetByName('sheet1');
```
のところは任意のシート名にします。読み込めなかった場合はシート名も見直してみてください。

結果として配列の結果が取得できたと思います。