Skip to content

Repository files navigation

html-cat(秘密のHTMLかんたん共有君)

Google Workspace(Apps Script / Drive / Spreadsheet)だけで動く社内向け静的HTML共有サービス。設計は DESIGN.md を参照。

セットアップ

npm install
npx clasp login                 # 初回のみ。ブラウザでGoogleアカウント認証

.clasp.json に既存の GAS プロジェクトの scriptId が設定済みであること。無い場合は:

npx clasp create-script --title "html-cat" --type standalone --rootDir dist

初回のみ、Apps Script の実行用に「Apps Script API」を有効化しておく(script.google.com/home/usersettings)。

開発フロー

npm run verify   # typecheck + lint + test
npm run build    # esbuild で src/ -> dist/main.js
npm run push     # verify + build + clasp push

初回 push 後、Apps Script エディタを開いて setup 関数を選択し、直接実行するclasp run-function は認可まわりの制約で失敗するため使わない)。

これにより Drive の Hosting フォルダと sites スプレッドシートが作成される。

Hosting フォルダを既存の Drive フォルダ(共有ドライブ配下など)に固定したい場合は、setup() 実行前に Apps Script エディタの「プロジェクトの設定 > スクリプト プロパティ」で HOSTING_FOLDER_ID にそのフォルダIDを設定しておく。

未設定なら My Drive 直下に自動作成される。

デプロイ / 再デプロイ

npx clasp create-deployment --description "initial"   # 初回のみ。実行結果の deploymentId を控えておく

以降、コードを更新して同じ URL のまま反映したい場合は create-deployment ではなく update-deployment を使う

create-deployment は毎回新しい URL を発行してしまい、既存の共有リンクが壊れるため。

npm run push
npx clasp update-deployment <deploymentId> --description "変更内容のメモ"

テスト

src/core/ src/app/ は GAS API に依存しない純粋ロジックなので vitest でユニットテストできる。 src/gas/ は GAS API を呼ぶだけの薄い層としてユニットテストの対象外にしている。

ESLintの no-restricted-globals で、core/app/ui から GAS API を直接呼ぶことも禁止している。

npm run test
npm run test:watch

アーキテクチャ

src/main.ts   … doGet/doPost 等のグローバル関数のみ
src/di.ts     … 合成ルート
src/core/     … 純粋関数(HTML/CSS書き換え、パス解決、ルーティング等)
src/ports/    … インターフェース定義のみ
src/app/      … ユースケース(UploadService / Renderer / Viewer)。ports にのみ依存
src/ui/       … 管理画面ビュー(文字列を返す純粋関数)
src/gas/      … GAS API を呼ぶ唯一の層(Drive / Spreadsheet 操作、マニフェストによるキャッシュなど)

サイトごとのファイル索引(.hc-manifest.json)や、更新(マージ/フルリプレイス)の意味など、詳細な設計判断は DESIGN.md を参照。

About

🌐🐈️

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages