最終更新 2026-07-15
デプロイと環境
このページの対象
meridian をデプロイする人向け。一般訪問者には不要な設定です。動作デモには OPENWEATHER_API_KEY のみ;それ以外は任意の stretch。
必須環境
OPENWEATHER_API_KEY — 天気と geocode に必須。DATABASE_PATH — SQLite ファイル(既定 ./data/meridian.db);本番では永続ボリュームでキャッシュと購読が再起動後も残ること。NEXT_PUBLIC_SHOW_HOME_STRETCH=0 でダッシュボード広告 + Journal を非表示(既定オン)。NEXT_PUBLIC_SHOW_DEMO_POPULAR_SEARCHES=0 で API 空時のデモ人気都市を無効。
ヒーロー画像環境
UNSPLASH_ACCESS_KEY — 任意;場所ヒーローの第一写真プロバイダー(サーバーのみ、hero_image_cache にキャッシュ)。PEXELS_API_KEY — Unsplash と Wikimedia Commons の後の第三プロバイダー。NEXT_PUBLIC_CITY_HERO_OSM — 0 で衛星地図ヘッダー無効(既定オン)。NEXT_PUBLIC_CITY_HERO_STREET_VIEW=1 — OSM オフ時の Google Street View オプトイン。NEXT_PUBLIC_GOOGLE_MAPS_API_KEY — Street View iframe 用任意 Maps Embed API キー。
メール環境
platform_settings のアクティブコネクタ経由のマルチ ESP(管理画面選択):Resend(RESEND_API_KEY、RESEND_FROM_EMAIL)、SendGrid(SENDGRID_API_KEY、SENDGRID_FROM_EMAIL)、Amazon SES(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SES_REGION、AWS_SES_FROM_EMAIL)、SMTP(SMTP_HOST、SMTP_PORT、SMTP_USER、SMTP_PASSWORD、SMTP_FROM_EMAIL、SMTP_SECURE)。NEXT_PUBLIC_APP_URL — メール内配信停止リンクのベース URL(.env.example に記載;本番必須)。
Cron と管理
CRON_SECRET — /api/cron/* 用 Bearer(本番で unset なら拒否)。ADMIN_SECRET — 管理セッション cookie 署名とコネクタシークレット暗号化。ADMIN_PASSWORD — ADMIN_EMAIL のみの root ログイン。Dev bypass は NODE_ENV=development、ALLOW_DEV_ADMIN_BYPASS=1、ADMIN_SECRET unset のときのみ。docs/SECURITY.md 参照。外部で cron スケジュール:weekly-digests(例:月曜朝)、weather-alerts(例:15–30分ごと)。
AdSense 環境
GOOGLE_ADSENSE_CLIENT_ID(ca-pub-…)。GOOGLE_ADSENSE_SLOT_DASHBOARD、SLOT_HERO、SLOT_RECENT、SLOT_CITY_DETAIL、SLOT_DEFAULT — ディスプレイユニット ID。AdSense Management API OAuth:GOOGLE_ADSENSE_OAUTH_CLIENT_ID、GOOGLE_ADSENSE_OAUTH_CLIENT_SECRET、任意 GOOGLE_ADSENSE_OAUTH_REDIRECT_URI(既定 ${NEXT_PUBLIC_APP_URL}/api/admin/adsense/oauth/callback)。クライアント ID はホストシークレットのみ。/ads.txt は実行時にクライアント ID から生成。
Analytics 環境
NEXT_PUBLIC_GA_MEASUREMENT_ID — consent.analytics オン時の任意 GA4 ローダー。NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION — Search Console メタタグ。
npm スクリプト
dev、build、start — Next.js。lint、test、test:watch、verify — 品質ゲート(verify = lint + test + build)。copy:icons — Meteocons を public へ(postinstall も)。seed:checks — North England デモスナップショット。backfill:city-slugs — 既存 locations に city_slug を投入。email — React Email プレビューサーバー。audit:deps — npm audit --omit=dev。
SQLite テーブル
コア天気:weather_snapshots、api_call_log。場所と checks:locations、location_weather_checks、weather_observations、weather_forecast_archive。購読:subscriptions、subscription_send_log。プラットフォーム:platform_settings(シングルトン)。ヒーロー:hero_image_cache。収益化:adsense_report_snapshots。Analytics:site_analytics_events。メール/CMS:email_templates、cms_pages。管理:admin_users、admin_invites、admin_password_resets、admin_audit_log。スキーマは src/lib/db/index.js。初回オープンで platform_settings を refresh 1h、stale 2h、daily limit 1000、soft block 950、warning 800、per-minute 60 で seed。
Middleware
src/middleware.js が docs.localhost ホストをローカルドキュメントサブドメイン用に /docs へリライト。メインアプリルートに auth middleware なし。
ブラウザストレージキー
storage-keys.js より:meridian:client-id、meridian:saved-cities、meridian:checked-cities、meridian:user-location、meridian:weather-cache、meridian:theme、meridian:cookie-consent、meridian:subscriptions、meridian:tier(予約)、meridian:consent、meridian:accessibility、meridian:city-detail-accordion、meridian:temperature-unit、meridian:preferred-locale、meridian:weather-refresh-mode。sessionStorage meridian_analytics_sid — ファーストパーティ analytics セッション ID。管理 cookie meridian_admin_session(HttpOnly、サーバー設定)。カスタムイベント meridian:storage が書き込み後にフックを同期。