LoginSignup
2
2

Node.jsでGoogleスプレッドシートを手軽に読み取る

Posted at

はじめに

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」シートの内容を読み取ってみます。

改めてサンプルコードを掲載します。

ts sample/spreadsheet/get-sheet-values.ts
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では他にもスタイル情報(セルの色や大きさ)を含んだシートの内容の取得、シートの内容の更新など様々な機能を提供しています。
また、それらの機能は一括でシートを取得するなど、パフォーマンス上の配慮が必要な少し高度な操作にも対応しています。

どのような機能があるかの詳細については他のサンプルコードを参照してみてください。

他の機能の詳細については、また記事にして解説できればと思っています。
気になることや、不具合、間違いなどがあればお気軽にコメント、ご連絡いただければと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2