スプレッドシートはデータベースの夢を見るか
近年、多くの開発者やビジネスユーザーが、データ管理のためにGoogleスプレッドシート ↗を積極的に活用しています。職種を選ばずさまざまなデータ管理ツールとして使用できるのが魅力です。直感的なインターフェースと日常的な使用経験があることに加え、専門知識やインフラ構築が不要で導入が容易なことから、多くのユーザーに選ばれています。さらに、チーム間でのデータ共有やリアルタイムな編集機能といった、現代のビジネスニーズに適した特徴も備えています。
アプリケーションにおけるデータ管理
データ管理ツールの代表格として、もう一つ「データベースソフトウェア」が挙げられます。MySQL ↗やSQLite ↗などに代表されるデータベースは、データの整合性、高度な検索機能、複雑なクエリ処理など、エンタープライズレベルのデータ管理に必要な機能を提供します。その反面、 専門的な知識やインフラ構築が必要で、導入のハードルが高いという課題があります。また、一般ユーザー(非エンジニア)にとってはSQLの習得も必要となり、即座に活用することが難しい場合があります。
Googleスプレッドシートはデータベースとなり得るのか
非エンジニアでもデータの追加や編集が手軽にでき、さらにアプリケーションからも柔軟に利用できる方法を、多くの人が探しています。データ管理用のマスタ画面をリレーショナルデータベース上に構築したり、Table Plus ↗のようなデータベースクライアントを利用したりするなど、一般的な解決方法がいくつか存在します。
しかしながら、マスタ画面の構築・運用には相当なコストがかかります。また、GUIベースのデータベースクライアントを使用する場合も、データベース接続情報の管理に伴うセキュリティ上のリスクは避けられません。
では、Googleスプレッドシートはどのような可能性を持つのでしょうか?非エンジニアの利用からアプリケーションのバックエンドまで、包括的なデータソースとして機能し得るのでしょうか?
とりあえず準備してみる
まずはプロジェクトの準備をしましょう。アプリケーションはHono ↗とNode.jsで実装します。今回は顧客管理ツールを作成していきます。
Honoプロジェクトの作成
$ pnpm create hono@latest .
✔ Using target directory … .
? Which template do you want to use? nodejs
? Do you want to install project dependencies? yes
? Which package manager do you want to use? pnpm
✔ Cloning the template
✔ Installing project dependencies
🎉 Copied project files
Get started with: cd .
{
"name": "2025-02-04_google-sheets-db",
"type": "module",
"scripts": {
- "dev": "tsx watch src/index.ts"
+ "dev": "tsx watch src/main.tsx"
},
"dependencies": {
"@hono/node-server": "^1.13.8",
"hono": "^4.6.20"
},
"devDependencies": {
"@types/node": "^20.11.17",
"tsx": "^4.7.1"
}
}
import { serve } from "@hono/node-server";
import { Hono } from "hono";
const app = new Hono();
app.get("/", (c) => {
return c.text("Hello Hono!");
});
const port = 3000;
console.log(`Server is running on http://localhost:${port}`);
serve({
fetch: app.fetch,
port,
});
Googleスプレッドシートの準備
まずはGoogleドライブから新しいGoogleスプレッドシートを作成します。一行目をヘッダーとして、以下のようなデータを入力します。
会社ID | 会社名 | 住所 | 代表電話番号 | 代表メールアドレス | メモ |
---|---|---|---|---|---|
1 | 株式会社A | 東京都港区 | 00-1234-5678 | a-company@example.com | |
2 | 株式会社B | 東京都新宿区 | 00-8765-4321 | b-company@example.com | |
3 | 株式会社C | 東京都渋谷区 | 00-2468-1357 | c-company@example.com |

Google Cloud Platformのプロジェクト作成と設定
次に、Google Cloud Platform(GCP)のプロジェクトを作成し、Google Sheets APIを有効化します。サービスアカウントを作成し、認証情報をダウンロードします。
- Google Cloud Platform ↗にアクセスし、新しいプロジェクトを作成します。プロジェクト名を入力し、作成します。
- 作成したプロジェクトを選択し、[APIとサービス] > [ライブラリ]に移動します。
- Google Sheets APIを検索し、有効にします。
- [認証情報] > [認証情報を作成]を選択し、サービスアカウントを選択します。
- サービスアカウント名とサービスアカウントIDを入力して作成します。
- サービスアカウントにスプレッドシートの読み取り権限を持つロール([Project] > [オーナー])を割り当てます。
- 作成したサービスアカウントを選択肢、[鍵] > [キーを追加] > [新しい鍵を作成] > JSONを選択し、鍵を作成してダウンロードします。
- Googleスプレッドシートの共有設定で、サービスアカウントのメールアドレスを追加します。
Google Sheets APIを利用してみる
まずは、Node.jsからGoogle Sheets APIを利用してデータを取得してみましょう。必要なパッケージをインストールしてから以下のコードをsrc/main.tsx
に追記します。
$ pnpm add googleapis @google-cloud/local-auth
import { serve } from "@hono/node-server";
import { Hono } from "hono";
import { google } from "googleapis";
// 保存したJSONをimport
import key from "./secrets/********.json" assert { type: "json" };
const app = new Hono();
app.get("/", (c) => {
// JSONファイルを読み込んで認証情報を取得する
const client = google.auth.fromJSON(key);
// 認証情報を使ってスプレッドシートAPIを利用するための認証オブジェクトを作成する
const auth = new google.auth.GoogleAuth({
scopes: ["https://www.googleapis.com/auth/spreadsheets.readonly"],
authClient: client,
});
// スプレッドシートAPIのクライアントを作成する
const sheets = google.sheets({ version: "v4", auth });
// スプレッドシートの取得ロジックを実装する
return c.text("Hello Hono!");
});
const port = 3000;
console.log(`Server is running on http://localhost:${port}`);
serve({
fetch: app.fetch,
port,
});
次に、データソースとして利用するGoogleスプレッドシートのIDを取得します。スプレッドシートのIDは、URLの/d/
と/edit
の間にある文字列です。
https://docs.google.com/spreadsheets/d/<id>/edit
そのIDを使って、スプレッドシートのデータを取得してみましょう。
...
const SHEET_ID = "**";
app.get("/", (c) => {
// JSONファイルを読み込んで認証情報を取得する
const client = google.auth.fromJSON(key);
// 認証情報を使ってスプレッドシートAPIを利用するための認証オブジェクトを作成する
const auth = new google.auth.GoogleAuth({
scopes: ["https://www.googleapis.com/auth/spreadsheets.readonly"],
authClient: client,
});
// スプレッドシートAPIのクライアントを作成する
const sheets = google.sheets({ version: "v4", auth });
// スプレッドシートの取得ロジックを実装する
return c.text("Hello Hono!");
})