Google SheetsとGASでつくる簡易Webアプリ~5分で動く「なんちゃってデータベース」~

IT全般
スポンサーリンク

1. はじめに

こんにちは!スタッフのやまさきです。

新しいサービスや機能を考えたとき、まずは「動くものをサッと作って試したい」と思うことはありませんか?

アプリを作るのに「サーバーやデータベースを準備」ってどうやればいいんだ?

とはいえ、エンジニアでない方が「サーバーやデータベースを準備して環境構築を行う」のは、なかなか大変です。

そんなときに便利なのが、Google Sheetsをデータベース代わりに使う方法です。

今回はGoogle Apps Script(GAS)と組み合わせて、シンプルなWebアプリを作ってみました。

2. 全体構成イメージ

今回の仕組みは以下のようになります。

[Webページ] ⇔ [GAS (API)] ⇔ [Google Sheets]
  • Google Sheets:データの保存場所(1行=1レコード)
  • GAS:APIサーバーとしてリクエストを処理(doGet/doPost)
  • Webページ(HTML/JS):ユーザーが操作する画面

シンプルですが「Webアプリっぽい」体験ができます。

3. 実装手順

ステップ1:スプレッドシート準備

  • 新しいシートを作成し、1行目に name | email | date を入力
  • URLからスプレッドシートIDをコピー
    • 例)https://docs.google.com/spreadsheets/d/XXXXXXX/edit の XXXXXXX 部分

ステップ2:GASコードを作成

シートの「拡張機能 → Apps Script」で以下を貼り付けます。

const SHEET_ID = 'ここにシートID';   // ← コピーしたIDを貼る
const SHEET_NAME = 'シート1';

function doGet(e) {
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
  const values = sheet.getDataRange().getValues();
  return jsonResponse(values);
}

function doPost(e) {
  const data = JSON.parse(e.postData.contents);
  const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
  sheet.appendRow([data.name, data.email, new Date()]);
  return jsonResponse({ status: 'ok' });
}

function jsonResponse(obj) {
  return ContentService
    .createTextOutput(JSON.stringify(obj))
    .setMimeType(ContentService.MimeType.JSON);
}

ステップ3:ウェブアプリとしてデプロイ

  • デプロイ → 「新しいデプロイ」
  • 種類は「ウェブアプリ」
  • アクセス権限は「全員」に設定 ※セキュリティは考慮していません

このときにリクエストの許可が出ますので、許可してください。

無料のGoogleアカウントを使っている場合

以下のような表示が出ますので、画像に沿って操作してください。

「このアプリは確認されていません」

このアプリは Google による確認が済んでいません。よく知っている信頼できるデベロッパーの場合に限り続行してください。

順調に進むと、ウェブアプリのURLが発行されるので「コピー」してください。

ステップ4:テスト用HTMLを作成

ローカルのHTMLファイルでAPIを呼び出すコードを用意すると、ブラウザから実際に操作できます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>GAS APIテスト</title>
</head>
<body>
<h1>Google Sheets API テスト</h1>

<h2>追加</h2>
<input id="name" placeholder="名前">
<input id="email" placeholder="メール">
<button onclick="addData()">追加</button>

<h2>取得</h2>
<button onclick="getData()">取得</button>
<pre id="output"></pre>

<script>
const API_URL = "GASのURL";  // ← コピーしたURLを貼る

async function addData() {
  const name = document.getElementById('name').value;
  const email = document.getElementById('email').value;
  const res = await fetch(API_URL, {
    method: 'POST',
    body: JSON.stringify({ name, email })
  });
  const result = await res.json();
  document.getElementById('output').textContent = JSON.stringify(result, null, 2);
}

async function getData() {
  const res = await fetch(API_URL);
  const data = await res.json();
  document.getElementById('output').textContent = JSON.stringify(data, null, 2);
}
</script>
</body>
</html>

4. 動作確認

  • 名前とメールを入力して「追加」ボタンを押すと、Google Sheetsに即反映されます。
  • 「取得」ボタンを押すと、シートの全データがJSON形式で表示されます。

数分で「なんちゃってデータベース」が完成しました。

別々のウィンドウで開いていると、ブラウザで「追加」ボタンを押した後に、スプレッドシートへ入力される動作が確認できますよ。

おおー、自動で処理されてるー!!!!
これぞプログラミングだーーー

5. メリットと制限

メリット

  • 無料で使える(GoogleアカウントがあればOK)
  • サーバー不要、環境構築不要
  • データはスプレッドシートからすぐに確認可能
  • 試作や社内利用に最適

制限

  • データが増えると処理が遅くなる
  • GASの実行回数や時間に制限あり
  • 同時アクセスや大規模利用には不向き

6. セキュリティについて

今回のテストでは、「全員」にアクセスを許可しました。

つまり誰でも書き込みできてしまう状態です。

これは「動きを確認するためのサンプル」だから許容できますが、

商用利用や機密データ管理には必ず認証・アクセス制御が必要です。

例えば、以下の選択肢があります。

  • GASのWebアプリを「Googleアカウント限定」にする
  • OAuthを組み合わせてユーザーを制限する
  • そもそもFirebaseやSupabase、Cloud SQLといった専用データベースに移行する

7. まとめ

Google Sheets + GASを使うことで、たった数分で「データベース付きWebアプリ」を作れることが分かりました。

この方法は、

  • 新しいアイデアをサクッと形にしたいとき
  • 社内で小規模な情報共有ツールを作るとき
  • プログラミング学習やワークショップ

にとても有効です。

一方で、本格的な運用や外部公開にはセキュリティ・スケーラビリティの限界があるため、プロトタイプから本番へ移す際には別の基盤を検討する必要があります。

8. 補足:なぜこれを紹介するのか

  • プロトタイプ文化の推進:「まず作って試す」ことが新しいアイデアを育てる
  • 教育・人材育成:高校生や新人研修でも「動くアプリ」を体験できる
  • 発展可能性:今回の手法をきっかけに、Firebaseなどの本格的なクラウドサービスへステップアップできる

コメント

タイトルとURLをコピーしました