[Typescript] SheetAPI で GoogleSpreadSheet を簡単読み込み
事前準備
- 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