クイックスタート
npx gassma bootstrap でローカル開発環境を作り、スキーマを書いて型付きクライアントを生成し、スプレッドシートを操作するまでを一通り行います。
GAS のスクリプトエディタだけで使いたい場合は、導入方法でライブラリを追加し、GAS エディタでの利用を参照してください。
前提
clasp がインストール済みで、ログインが済んでいる必要があります。
$ npm install -g @google/clasp
$ clasp login
また、Apps Script API の設定ページ で Apps Script API を有効にしておいてください。
1. プロジェクトを作る
$ npx gassma bootstrap my-app
対話形式で質問が進み、Apps Script プロジェクトの作成からビルド設定・スキーマファイルの生成・依存パッケージのインストールまでが完了します。「Create a new spreadsheet as well?」に Yes で答えると、新しいスプレッドシートと、それに紐づくスクリプトが作られます。
完成するディレクトリは次のようになります。
my-app/
├── gassma/
│ └── schema.prisma
├── src/
│ └── index.ts
├── gassma.config.ts
├── esbuild.mjs
├── tsconfig.json
└── package.json
質問の内容や生成物の詳細は bootstrap を参照してください。
2. スキーマを書く
gassma/schema.prisma にモデルを定義します。1 つのモデルが 1 枚のシートに対応します。
generator client {
provider = "prisma-client-js"
output = "./src/generated/gassma"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
age Int
createdAt DateTime @default(now())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
authorId Int
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
}
書けるモデル・属性の一覧はスキーマにまとめています。
3. クライアントを生成する
$ npx gassma generate
output で指定したディレクトリに型定義とクライアントが生成されます。リレーションや @default などの設定は、生成されたクライアントに注入済みです。
開発中は --watch を付けておくと、スキーマの変更に追従して自動で再生成されます。
4. スプレッドシートにシートを作る
スキーマに書いたシートと列をスプレッドシート側に用意します。
$ npx gassma migrate dev --name init
このコマンドはスプレッドシートに直接アクセスしません。出力された gassma-migration.js を push して、Apps Script エディタで 1 回実行します。
$ npm run push
Apps Script エディタを開き(npm run open)、gassmaMigrate 関数を 1 回実行してください。これでシートと 1 行目のヘッダーが作られます。
migrate の直後は npm run push を使ってください。npm run deploy はビルドからやり直すため、push 前に gassma-migration.js を消してしまうことがあります。
同期の規則や --accept-data-loss については migrate / db push を参照してください。
5. コードを書く
生成されたクライアントを import して使います。
import { GassmaClient } from "./generated/gassma/schemaClient";
const gassma = new GassmaClient();
export const main = () => {
gassma.User.create({
data: { name: "Alice", email: "[email protected]", age: 28 },
});
const users = gassma.User.findMany({
where: { age: { gte: 20 } },
orderBy: { name: "asc" },
include: { posts: true },
});
console.log(users);
};
export した関数がそのまま GAS のグローバル関数になります(bootstrap で export スタイルを選んだ場合)。
6. デプロイして実行する
$ npm run deploy
ビルドして Apps Script に push されます。npm run open でエディタを開き、main を実行してください。
次に読むもの
| ページ | 内容 |
|---|---|
| 基本 | クライアントの初期化とコンストラクタオプション |
| スキーマ | モデル・属性・リレーションの書き方 |
| findMany | where / orderBy / ページネーションなど読み取りの中心 |
| リレーション定義 | include や where でのリレーション利用 |
| CLI コマンド | generate 以外のコマンド |