はじめに
Node.jsでGoogleスプレッドシートを読み書きするためには、公式のnpmとしてgoogleapisが提供されており非常に便利ですが、より少ないコード量で手軽に様々な機能を扱うためのラッパーであるgoogle-api-tool-boxを公開したので、使い方を解説します。
インストール
Node.jsのプロジェクトを作成し、@genta-mz/google-api-tool-box
をインストールしてください。
$ npm i @genta-mz/google-api-tool-box
GoogleAPIでアクセスするための認証情報をセットアップする
一番簡単なのはGCPプロジェクトのサービスアカウントを利用する方法です。
サービスアカウントの作成についてはこちらを参考にしてください。
スプレッドシートの値を取得する
初期化
初期化コードはこれだけです。
const toolBox = new GoogleAPIToolBox({
auth: {
serviceAccountKeyFile: 'ダウンロードしたサービスアカウントのkeyJsonへのパス'
}
});
spreadsheet
を経由してスプレッドシートを読み書きするためのAPIにアクセスできます。
以下はスプレッドシートの値を二次元配列の形式で取得するコードです。
const spreadsheetId = 'スプレッドシートのID';
const range = 'スプレッドシートのシート名、もしくはrange';
// 指定したシートからデータを取得する
const ranges = await toolBox.spreadSheet.getSheetValues({
spreadsheetId: spreadsheetId,
range: range,
});
// レスポンスから指定したシートの内容を取り出す
const values = ranges.get(range);
if (!values) {
throw new Error('指定したシートやrangeが見つからなかった。');
}
// 二次元配列のレスポンスをカンマ区切りで表示する
for (const row of values) {
console.log(row.join(','));
}
このように、かなり少ないコードでスプレッドシートのデータを取得することができます。
サンプルを動作させてみる
公開しているサンプルコードを動作させてみましょう。
サンプルはyargsを使用したCLIツールとして実装しています。
手元でサンプルを動かすために
genta-mz/google-api-tool-boxを手元にcloneしてください。
また、実行するためにはnpm(version 10)と、node20のインストールが必要です。
git clone https://github.com/genta-mz/google-api-tool-box.git
google-api-tool-boxリポジトリの直下でnpmをインストールします。
cd google-api-tool-box
npm i
実行する
まずはアクセスしたいスプレッドシートに対してサービスアカウントへ権限を付与します。
この「sample-sheet-get-values」シートの内容を読み取ってみます。
改めてサンプルコードを掲載します。
import { GoogleAPIToolBox } from '@genta-mz/google-api-tool-box';
import yargs from 'yargs';
(async () => {
const argv = await yargs
.option('keyFile', {
type: 'string',
alias: 'k',
description: 'Path to service account key file',
demandOption: true,
})
.option('spreadsheetId', {
type: 'string',
alias: 's',
description: 'Spreadsheet id',
demandOption: true,
})
.option('sheetName', {
type: 'string',
alias: 'n',
description: 'Sheet name or range specification',
demandOption: true,
})
.help().argv;
const toolBox = new GoogleAPIToolBox({ auth: { serviceAccountKeyFile: argv.keyFile } });
const ranges = await toolBox.spreadSheet.getSheetValues({
spreadsheetId: argv.spreadsheetId,
range: argv.sheetName,
});
const values = ranges.get(argv.sheetName);
if (!values) {
throw new Error('Sheet name or range not found.');
}
for (const row of values) {
console.log(row.join(','));
}
})();
こちらを実際にCLIから実行します。
npx ts-node sample/spreadsheet/get-sheet-values.ts -k 'ダウンロードしたサービスアカウントのkeyJsonへのパス' -s 'スプレッドシートのID' -n 'sample-sheet-get-values'
結果は以下のようになります。
version,id,name
0.0.1,0,genta
0.0.1,1,mizumoto
0.0.1,2,hoge
シートに記載されている値を取得することができていますね。
おわり
基本的な使い方は以上となります。
google-api-too-boxでは他にもスタイル情報(セルの色や大きさ)を含んだシートの内容の取得、シートの内容の更新など様々な機能を提供しています。
また、それらの機能は一括でシートを取得するなど、パフォーマンス上の配慮が必要な少し高度な操作にも対応しています。
どのような機能があるかの詳細については他のサンプルコードを参照してみてください。
他の機能の詳細については、また記事にして解説できればと思っています。
気になることや、不具合、間違いなどがあればお気軽にコメント、ご連絡いただければと思います。