🤖

[Typescript] SheetAPI で GoogleSpreadSheet を簡単読み込み

2024/10/19に公開

事前準備

  • Typescriptの環境
  • GoogleCloudのアカウント作成

は完了しているものとします。

Typescript 環境構築

tsconfigなど必要なものを追加

$ mkdir sample && cd sample
$ npm init -y && tsc --init

tsconfigに以下を追加

    "rootDir": "./src",

必要なライブラリのインストール

$ npm install googleapis

main.tsファイルの作成・書き込み

$ mkdir src && touch src/main.ts

main.tsに以下を追加

import { google, sheets_v4 } from "googleapis";
import path from "path";
import { GoogleAuth } from "google-auth-library";

const SHEET_ID = "[対象のSpreadSheetのID]";
const SHEET_NAME = "[対象のシート名]";

const getSpreadsheetData = async () => {
  const credentialsPath = path.join(__dirname, "../service-account.json");
  const auth = new GoogleAuth({
    keyFile: credentialsPath,
    scopes: ["https://www.googleapis.com/auth/spreadsheets"],
  });

  const client = await auth.getClient();
  const sheets = google.sheets({ version: "v4", auth: client as any });
  const res = await sheets.spreadsheets.values.get({
    spreadsheetId: SHEET_ID,
    range: SHEET_NAME,
  });

  const rows = res?.data?.values;
  if (!rows || !rows.length) throw Error("データが見つかりません。");

  console.log(rows);
};

getSpreadsheetData();

SHEET_IDは https://docs.google.com/spreadsheets/d/[こちらに記載されている文字列]/edit を参照してください。

SHEET_NAMEは 対象のスプレットシートの下部に書かれているシート名を参照してください。
例: シート1

GCP側の設定

Google Cloud Console にアクセスし、新しいプロジェクトを作成します。

API ライブラリ から ”sheet api” で検索し Google Sheet API を有効化します。

認証情報 へ移動し、サービスアカウントを作成します。

サービスアカウント名: 指定はありません
サービスアカウントID: 指定はありません

「作成して続行」を押し このサービス アカウントにプロジェクトへのアクセスを許可する へ進み、ロールを追加します。

ロールは「参照者」と「編集者」を選択してください

サービスアカウント詳細画面 へ移動し、「キー」タブ > キーを追加 > 新しい鍵を作成 > JSON でサービスアカウントのJSONファイルを取得します。

保存したJSONファイルは service-account.json に名前を変更し、srcディレクトリと同じ階層に保存します。

.
├── package-lock.json
├── package.json
├── service-account.json  // src, package.json と同じ階層に追加
├── src
│   └── main.ts
└── tsconfig.json

GoogleSpreadSheet側の設定

service-account.json に記載されている client_email をコピーしてください。
xxxxxxxxxx@xxxxxxxxx.iam.gserviceaccount.com のような形式のもの

対象のスプレットシートの「共有」からコピーしたメールアドレスを「編集者」として招待します。

動作確認

$ ts-node ./src/main.ts
[ [ 'aaaaaaaaaaa', 'bbbbbbbbbb' ] ]

このように取得できたら成功です。

Discussion