ホーム/ブログ/Claude CodeとgwsコマンドでAppSheetの土台となるスプレッドシートDBを構築する方法

Claude CodeとgwsコマンドでAppSheetの土台となるスプレッドシートDBを構築する方法

AppSheetの業務アプリは裏側でGoogleスプレッドシートをデータベースとして使います。Claude CodeからGoogle Workspace公式CLI「gws」を使い、テーブル設計からスプレッドシート作成・ヘッダー投入・検証までをコマンドで組み立てる実践的な手順を解説します。

結論:AppSheetは「データベースを直接構築するAPI」を持っていません。AppSheetの業務アプリは裏側でGoogleスプレッドシートをデータソースとして使う仕組みなので、土台となるスプレッドシートさえ正しく作っておけば、AppSheet側は最後にそれを読み込むだけで済みます。Claude CodeからGoogle Workspace公式CLIのgwsコマンドを使えば、テーブル設計をコマンドでそのままスプレッドシートに反映でき、シート追加・ヘッダー行・サンプルデータの投入までブラウザ操作なしで完結します。手作業でシートを組むより速く、列のズレや入力ミスも起きにくいのが利点です。

AppSheetのDB設計を手作業のスプレッドシートに頼ると起きること

AppSheetで業務アプリを作るとき、最初につまずきやすいのは「アプリの中身」より前段階、土台となるGoogleスプレッドシートの設計です。担当者マスタ、拠点マスタ、記録用のトランザクションシートといった複数のシートを、列名・型・IDの振り方まで揃えて手作業で作っていくと、次のような問題が起きがちです。

  • シートごとに列の並びや命名がバラバラになり、あとからAppSheet側でカラムの対応付けをやり直す羽目になる

  • マスタとトランザクションの主キー・外部キーの対応関係を、画面を目視しながら手入力するため時間がかかる

  • 設計を変更するたびに複数シートを開き直して手直しする必要があり、直すたびに入力ミスのリスクが積み上がる

こうした手戻りを減らすために有効なのが、テーブル設計そのものをClaude Codeと一緒に固めたうえで、Google Workspace公式CLIのgwsコマンドでスプレッドシートを組み立ててしまうやり方です。

前提知識:gwsコマンドとは何か

gwsは、googleworkspace/cliとして公開されているGoogle Workspace公式のコマンドラインツールです。npmで配布されており、次のようにインストールします。

npm install -g @googleworkspace/cli
gws auth login

gws auth loginを実行すると認証情報が~/.config/gws/credentials.jsonに保存され、以降はこの資格情報でSheets・Drive・Gmailなど各種Google Workspace APIを呼び出せるようになります。コマンドの基本形は次の通りです。

gws <service> <resource> [sub-resource] <method> [flags]

スプレッドシートを扱うsheetsのほか、drive(ファイル・フォルダ管理)、docs、gmail、calendarなど幅広いサービスに対応していますが、AppSheetそのものはgwsのサービス一覧に含まれていません。そのため実務では「AppSheetの母体になるスプレッドシート側をgwsで作り込み、AppSheet側は最後にそれを読み込むだけにする」という役割分担が現実的なやり方になります。

各APIメソッドが要求するJSONの形は、覚えるよりgws schemaで毎回確認するのが確実です。

gws schema sheets.spreadsheets.create

全体の流れ:設計→gwsで構築→AppSheetで接続

  • ステップ1:Claude Codeとテーブル設計(マスタ・トランザクションの構成、列名・型・主キー)を先に固める

  • ステップ2:gws sheets spreadsheets createでスプレッドシート本体とシート(タブ)を作る

  • ステップ3:gws sheets spreadsheets values batchUpdateで各シートのヘッダー行・サンプルデータを一括投入する

  • ステップ4:gws sheets spreadsheets values getで書き込み結果を検証する

  • ステップ5:AppSheetエディタ(ブラウザ)でこのスプレッドシートをデータソースとして接続する

ステップ1:テーブル設計を先に固める

例えば「担当者が複数の拠点を回って作業記録を残す」という、巡回・記録系の業務アプリでよくあるパターンで考えてみます。担当者マスタ・拠点マスタ・種類マスタのような「マスタ」と、実際の作業を記録する「記録(トランザクション)」を分けて正規化しておくのが基本です。

  • 担当者マスタ:id, 氏名, 連絡先

  • 拠点マスタ:id, 拠点名, 住所

  • 種類マスタ:id, 種類名

  • 記録(トランザクション):id, 日付, 担当者ID, 拠点ID, 種類ID, 数量・メモ

この設計をスプレッドシートに落とし込む前に、Claude Codeに業務の流れを日本語で伝え、テーブル定義(シート名・列名・型・どれが主キーでどれが外部キーか)をいったんMarkdownの設計メモとして書き出させておくと、次のステップで作るJSONの精度が上がります。ここを飛ばしていきなりコマンドを打ち始めると、あとで列の追加・並べ替えが発生し、AppSheet側のカラム対応も含めて手戻りが増えます。

ステップ2:gws sheets spreadsheets createでスプレッドシートを作る

設計が固まったら、スプレッドシート本体と必要なシート(タブ)を1コマンドで作成します。

gws sheets spreadsheets create --json '{
  "properties": { "title": "現場管理DB" },
  "sheets": [
    { "properties": { "title": "担当者" } },
    { "properties": { "title": "拠点" } },
    { "properties": { "title": "種類" } },
    { "properties": { "title": "記録" } }
  ]
}'

実行結果のJSONに含まれるspreadsheetIdが、以降のすべてのコマンドで使うキーになります。Claude Codeに実行させる場合は、このIDをその場で変数やメモファイルに控えさせておくと、後続のコマンドに渡し忘れずに済みます。あとからシートを追加したい場合は、valuesではなく構造変更用のgws sheets spreadsheets batchUpdateにaddSheetリクエストを渡します。

ステップ3:values batchUpdateでヘッダー行とサンプルデータを投入する

シートの箱ができたら、各シートの1行目にヘッダー(列名)を、必要なら数行のサンプルデータを一括で書き込みます。valuesを書き込む場合、対象のspreadsheetIdは--paramsで、書き込む値の中身は--jsonで渡すのがgwsの作法です。

gws sheets spreadsheets values batchUpdate \
  --params '{"spreadsheetId": "<先の手順で控えたID>"}' \
  --json '{
    "valueInputOption": "USER_ENTERED",
    "data": [
      { "range": "担当者!A1:C1", "values": [["id", "氏名", "連絡先"]] },
      { "range": "拠点!A1:C1", "values": [["id", "拠点名", "住所"]] },
      { "range": "種類!A1:B1", "values": [["id", "種類名"]] },
      { "range": "記録!A1:F1", "values": [["id", "日付", "担当者ID", "拠点ID", "種類ID", "数量"]] }
    ]
  }'

複数シートのヘッダーをまとめて1回のコマンドで流し込めるのがbatchUpdateの利点です。設計メモの列名をそのままJSONのvaluesに転記するだけなので、Claude Codeに「ステップ1の設計メモをこのJSON形式に変換して」と依頼すれば、手打ちよりずっと速く正確に組み立てられます。

ステップ4:values getで結果を検証する

書き込んだ内容が意図通りかは、スプレッドシートをブラウザで開かなくても、読み取りコマンドで確認できます。

gws sheets spreadsheets values get \
  --params '{"spreadsheetId": "<ID>", "range": "記録!A1:F10"}'

Claude Codeにこの結果を読ませて「ヘッダーの列名が設計メモと一致しているか」をチェックさせておくと、あとになって「AppSheet側でカラムが認識されない・型が合わない」といったトラブルの芽を早い段階で潰せます。

ステップ5:AppSheet側でこのスプレッドシートをデータソースとして接続する

ここから先はgwsの守備範囲外で、AppSheetエディタ(ブラウザ)での作業になります。AppSheetで新規アプリを作成し、データソースとして先ほどgwsで構築したスプレッドシートを指定すると、AppSheetがシート構成とヘッダー行から自動的にテーブル・カラムを認識します。View(画面)のレイアウト、入力フォームの見た目、承認フローやBotの設定、ユーザーごとの権限管理といった「業務アプリとしての型」は、AppSheet側の機能に任せるのが現実的です。Claude Code+gwsができるのは、あくまでその土台となるデータベース部分の構築までという期待値を持っておくと、役割分担で迷いません。

実際にやってみて分かった注意点

  • JSONは長くなりがち:シート数・列数が増えると--jsonに渡すJSONも長くなり、シェル上で崩れやすくなります。Claude Codeに一度JSONファイルとして書き出させ、それを読み込ませる形にすると事故が減ります。

  • 設計変更は手戻りのコストが高い:スプレッドシートの列構成を後から変えると、AppSheet側でもカラムの対応付け直しが発生することがあります。ステップ1の設計を先に固めてから流し込む方が、結果的に速く済みます。

  • 認証情報の扱い:~/.config/gws/credentials.jsonにはGoogleアカウントの認証情報が保存されます。共有端末や複数人で使うマシンでClaude Codeからgwsを実行する場合は、資格情報の置き場所とアクセス権限に注意してください。

  • できるのは「土台作り」まで:AppSheetの無料プランの制約など、DBを作った後に効いてくる注意点は当社の別記事「AppSheetで10人より多くのユーザーを無料で使う方法」でも解説しています。あわせてご確認ください。

まとめ

AppSheetの業務アプリは、結局のところGoogleスプレッドシートというデータベースの上に成り立っています。そのスプレッドシート側の構築を、Claude CodeからGoogle Workspace公式CLIのgwsコマンドで自動化すれば、テーブル設計から実際のシート構築までを一気通貫でコマンド化でき、手作業でシートを組むよりも速く、列のズレのようなミスも起きにくくなります。AppSheet自体の画面設定や権限管理は引き続きAppSheetエディタの仕事ですが、「土台となるDB部分を整える」作業をClaude Codeに任せられるのは、業務アプリ構築のスピードを左右する現実的なメリットです。

「AppSheetアプリの土台となるスプレッドシート設計を効率化したい」「Claude Codeを業務アプリ構築に使ってみたい」という場合は、当社(Kirakuna)にご相談いただければ、業務の流れに合わせて一緒に設計いたします。


※本記事の内容は執筆時点(2026年9月)の情報および実際の検証に基づきます。gws・AppSheetの仕様は変更される場合があるため、最新情報は各公式ドキュメントでご確認ください。