静的サイトビルド時に Google Spreadsheet から展示会データを取得し、Eleventy + TypeScript(HTMLテンプレートは Nunjucks)で一覧と詳細ページを生成するプロジェクトです。Cloudflare Pages へのデプロイを前提とし、Winston で構造化ログを出力します。
- Node.js 24 LTS
- npm 10 以上
- Google Sheets API が有効なプロジェクト(OAuth2 クライアント ID / リフレッシュトークン)
- 依存関係をインストールします。
npm install
.envを作成し、以下の値を設定します。作品スプレッドシートの初期設定や必要な列についてはGOOGLE_SHEETS_REFRESH_TOKEN="..." GOOGLE_SHEETS_SPREADSHEET_ID="..." GOOGLE_SHEETS_RANGE="Exhibitions!A:O" GOOGLE_SHEETS_CLIENT_ID="..." GOOGLE_SHEETS_CLIENT_SECRET="..." GOOGLE_SHEETS_TOKEN_URL="https://oauth2.googleapis.com/token" GOOGLE_ARTWORK_SPREADSHEET_ID="..." GOOGLE_ARTWORK_RANGE="Artworks!A:N"
specs/004-google-spreadsheet-google/quickstart.mdを参照してください。- 動作確認を行います。
npm run test npm run lint npm run typecheck npm run build
Tailwind CSS バンドルは npm run test 実行時に 120KB (gzip) 以内であることを検証します。上限を超えた場合は scripts/check-css-size.ts が失敗します。
npm run devで TypeScript ウォッチ + Tailwind JIT + Eleventy ローカルサーバーを同時に起動します。- 変換ロジックやテンプレートは
src/data/src/pages以下の.ts/.11ty.tsファイルで管理しています。 tests/以下に Vitest の契約・統合・ユニットテストが配置されています。
Cloudflare Pages を利用します。
wrangler.tomlに Pages 設定と環境変数のキーを定義しています。public/_headersとpublic/_redirectsでセキュリティヘッダーとリダイレクトポリシーを管理します。- 本番環境では Cloudflare ダッシュボードで同名の環境変数を登録したうえで
npm run buildを実行してください。
| コマンド | 目的 |
|---|---|
npm run dev |
TypeScript ウォッチ + Tailwind JIT + Eleventy サーバー |
npm run build |
TypeScript コンパイル + Tailwind ビルド + Eleventy ビルド |
npm run test |
Tailwind ビルド → Vitest → CSS バジェット検証 |
npm run lint |
ESLint チェック |
npm run format |
Prettier フォーマット |
npm run typecheck |
TypeScript 型チェック(パスエイリアス解決設定が整備済みの場合) |
npm run tailwind:build |
Tailwind CSS を単体でビルドし dist/assets/styles/ へ出力 |
npm run tailwind:watch |
Tailwind CSS をウォッチモードで出力 |
npm run css:budget |
dist/assets/styles/exhibitions.css の gzip サイズ上限 120KB を検証 |
src/
data/ # Google Sheets 取得・整形ロジック
pages/ # Eleventy テンプレート (.njk) と `_includes` ディレクトリ
_includes/ # layouts, components, partials for exhibitions
lib/logger.ts # Winston JSON ロガー
public/ # Cloudflare Pages 用設定 (ヘッダー・リダイレクト)
specs/001-google-spreadsheet-exhibitions/ # ドキュメントとタスクリスト
- Eleventy 実行時は
src/lib/logger.tsの Winston ロガーを通じて JSON ログが出力されます。 eleventy.config.tsではビルド開始・終了イベント、並び替えフィルタ、グローバルデータの登録を行っています。