React on GAS on Spreadsheet 環境構築

24078 ワード

はじめに

React を スプレッドシート上で動かすための環境構築について記述します。

create vite

yarn create vite {projectName} --template react-ts
cd {projectName}
yarn

server と client に分ける

mkdir src/client
mkdir src/server
mv src/*.* src/client/.
sed -i -e "s/main.tsx/client\/main.tsx/g" index.html #main.tsx の場所が変わったことに対応

server 側

types をダウンロード

yarn add -D @types/google-apps-script

server/main.tsを作成

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const onOpen = () => {
  const menu = SpreadsheetApp.getUi().createMenu("メニュー").addItem("ダイアログ表示", "openDialog");
  menu.addToUi();
};

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const openDialog = () => {
  const html = HtmlService.createHtmlOutputFromFile("index").setWidth(600).setHeight(600);
  SpreadsheetApp.getUi().showModalDialog(html, "タイトル");
};

interface SheetData {
  name: string;
  numOfRows: number;
}

// TODO: テスト用の関数なので、適切なものに変更する
const getSheetData = (): SheetData => {
  const sheet = SpreadsheetApp.getActiveSheet();
  return {
    name: sheet.getName(),
    numOfRows: sheet.getMaxRows(),
  };
};

// TODO: テスト用の関数なので、適切なものに変更する
const appendRowsToSheet = (sheetName: string, rowsToAdd: number): void => {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  if (!sheet) return;
  sheet.insertRowsAfter(sheet.getMaxRows(), rowsToAdd);
  sheet.getRange(1, 1, 5, 5).setValues([
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15],
    [16, 17, 18, 19, 20],
    [21, 22, 23, 24, 25],
  ]);
};

export { getSheetData, appendRowsToSheet };

client 側

gas-client を追加