Оказалось, что в гугл-таблицах можно не просто подключить
google apps scripts (далее GAS), но и настроить обновление скриптов для таблицы из удобной IDE/репозитория с кодом.Поскольку в моем случае таблица уже существовала, как и GAS, то мне нужно было взять идентификатор скрипта и подключить clasp для разработки у себя на ноуте (локально, не на сайте с таблицей).
Вкратце сетап выглядит так:
-
Husky + lint-staged прогоняют prettier и eslint перед каждым коммитом -> ошибки ловятся до релиза- для тестов используется Jest на чистые функции (парсинг ответов API, форматирование, без выхода в интернет)
Релиз в нашем случае - загрузка обновлений из репозитория в GAS на сайте с гугл-таблицей.
Подключение к уже существующей Таблице проходит так:
1. Откройте гугл-таблицу
2. Расширения → Apps Script
3. Из URL скопируйте
Script ID: https://script.google.com/home/projects/<SCRIPT_ID>/edit.4. Локально создайте
.clasp.json:{ "scriptId": "<SCRIPT_ID>", "rootDir": "src" }5.
npm run pull — заберёт текущий код из GAS в src/. Дальше работаете локально.Важные детали:
- один GAS-проект = одна гугл-таблица, потому что
Script ID привязан к конкретному контейнеру. Для другой Таблицы — другой .clasp.json-
Apps Script V8 не поддерживает ES-модули (import/export), поэтому весь код — глобальный скоуп, приватность через IIFE. Переименовали функцию — проверьте все src/-
SpreadsheetApp, UrlFetchApp и т. п. в Jest не работают - их мокают или тестируют только в живом GAS после релиза- локальная разработка без clasp невозможна; веб-редактор GAS — это просто ещё один клиент к тому же API.
clasp — официальный инструмент от гугла.———
Скорее всего, бОльшая часть информации тут будет выглядеть непонятно - и это нормально. На некоторые штуки я оставил ссылки, а остальное можно загуглить/закинуть в агента и получить работающий сетап ✅
Основное преимущество/удобство этого подхода: полноценная разработка с версионированием, тестами и релизами с помощью пары команд 👍