AI防御 デプロイチェックリスト

作成日: 2026-03-01 | 全7プロジェクトのAIクローラー防御とログ管理

進捗: 0 / 0
1
Supabase テーブル作成
endai-system のデータベースにアクセスログテーブルを作成(デプロイ前に必須)
必須手動 Supabase ダッシュボードを開く
https://supabase.com/dashboard → endai-system プロジェクトを選択
必須手動 SQL Editor で以下を実行
左メニュー「SQL Editor」→ 「New query」→ 以下を貼り付けて「Run」
-- アクセスログテーブル CREATE TABLE IF NOT EXISTS public.access_logs ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created_at TIMESTAMPTZ NOT NULL DEFAULT now(), ip_address TEXT NOT NULL, user_agent TEXT, path TEXT NOT NULL, method TEXT NOT NULL DEFAULT 'GET', status_code INTEGER, is_bot BOOLEAN NOT NULL DEFAULT FALSE, is_ai_crawler BOOLEAN NOT NULL DEFAULT FALSE, bot_category TEXT, bot_name TEXT, bot_confidence REAL, action_taken TEXT, project TEXT NOT NULL DEFAULT 'endai-system', referer TEXT, country TEXT ); -- インデックス CREATE INDEX IF NOT EXISTS idx_access_logs_created_at ON public.access_logs (created_at DESC); CREATE INDEX IF NOT EXISTS idx_access_logs_is_ai_crawler ON public.access_logs (is_ai_crawler) WHERE is_ai_crawler = TRUE; CREATE INDEX IF NOT EXISTS idx_access_logs_bot_category ON public.access_logs (bot_category); CREATE INDEX IF NOT EXISTS idx_access_logs_project ON public.access_logs (project); CREATE INDEX IF NOT EXISTS idx_access_logs_ip ON public.access_logs (ip_address);
必須手動 RLS + ビュー + クリーンアップ関数を実行
同じ SQL Editor で続けて以下も実行
-- 日別集計ビュー CREATE OR REPLACE VIEW public.access_logs_daily_summary AS SELECT date_trunc('day', created_at)::date AS log_date, project, bot_category, bot_name, action_taken, COUNT(*) AS request_count, COUNT(DISTINCT ip_address) AS unique_ips FROM public.access_logs GROUP BY 1, 2, 3, 4, 5 ORDER BY 1 DESC; -- AIクローラー専用ビュー CREATE OR REPLACE VIEW public.ai_crawler_logs AS SELECT * FROM public.access_logs WHERE is_ai_crawler = TRUE ORDER BY created_at DESC; -- RLS有効化 ALTER TABLE public.access_logs ENABLE ROW LEVEL SECURITY; -- 管理者のみ閲覧可能 CREATE POLICY "Admins can view access_logs" ON public.access_logs FOR SELECT USING ( EXISTS ( SELECT 1 FROM public.profiles WHERE id = auth.uid() AND role IN ('admin', 'organizer') ) ); -- 古いログの手動クリーンアップ用関数 CREATE OR REPLACE FUNCTION public.cleanup_old_access_logs( days_to_keep INTEGER DEFAULT 90 ) RETURNS INTEGER LANGUAGE plpgsql SECURITY DEFINER AS $$ DECLARE deleted_count INTEGER; BEGIN DELETE FROM public.access_logs WHERE created_at < now() - make_interval(days => days_to_keep); GET DIAGNOSTICS deleted_count = ROW_COUNT; RETURN deleted_count; END; $$;
必須手動 テーブル作成を確認
左メニュー「Table Editor」→ access_logs テーブルが表示されること確認。
「Authentication」→「Policies」→ access_logs に「Admins can view access_logs」ポリシーがあること確認。
2
Vercel 環境変数の確認
SUPABASE_SERVICE_ROLE_KEY がないとログ記録ができない
必須手動 Vercel で SUPABASE_SERVICE_ROLE_KEY を確認
Vercel ダッシュボード → endai-system → Settings → Environment Variables
SUPABASE_SERVICE_ROLE_KEY が Production / Preview の両方に設定済みか確認。
未設定の場合: Supabase ダッシュボード → Settings → API → service_role キーをコピーして設定。
SUPABASE_SERVICE_ROLE_KEY は RLS をバイパスできる強力なキーです。
絶対に NEXT_PUBLIC_ プレフィックスを付けないでください。フロントエンドに露出します。
3
endai-system をデプロイ
メインプロジェクト(ボット検知+ログ記録+ダッシュボード)
endai-system コードをプッシュ
cd C:\Users\kawag\work\endai-system
git add -A && git commit -m "feat: AIクローラー防御+アクセスログ機能" && git push
Vercel が自動デプロイを開始。デプロイ完了を待つ。
4
Vite プロジェクト 6つをデプロイ
robots.txt + メタタグ + X-Robots-Tag ヘッダーの適用
各プロジェクトで git push するだけでOK。Vercel が自動デプロイします。
updrs-tracker プッシュ
cd C:\Users\kawag\work\updrs-tracker
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
rehab-fee-calculator プッシュ
cd C:\Users\kawag\work\rehab-fee-calculator
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
dysphagia-risk-check プッシュ
cd C:\Users\kawag\work\dysphagia-risk-check
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
productivity-health-survey プッシュ
cd C:\Users\kawag\work\productivity-health-survey
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
dementia-risk-suite プッシュ
cd C:\Users\kawag\work\dementia-risk-suite
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
dementia-risk-check プッシュ
cd C:\Users\kawag\work\dementia-risk-check
git add -A && git commit -m "feat: AI防御(robots.txt+headers)" && git push
5
動作確認
デプロイ完了後に各項目をテスト
以下の確認はターミナル(PowerShell / Git Bash)で実行してください。
ドメインが異なる場合は適宜置き換えてください。
robots.txt の確認(endai-system)
curl https://endai-system.vercel.app/robots.txt
「GPTBot」「ClaudeBot」等に Disallow: / が表示されること。
X-Robots-Tag ヘッダーの確認
curl -I https://endai-system.vercel.app/
レスポンスヘッダーに X-Robots-Tag: noai, noimageai が含まれること。
重要 AIクローラーのブロック確認
curl -H "User-Agent: GPTBot/1.0" https://endai-system.vercel.app/
HTTP 403 Forbidden が返ること。

curl -H "User-Agent: ClaudeBot/1.0" https://endai-system.vercel.app/
こちらも HTTP 403 が返ること。
通常アクセスが正常に動作すること
curl -o /dev/null -s -w "%{http_code}" https://endai-system.vercel.app/
200 が返ること(通常のブラウザアクセスがブロックされていないこと)。
Supabase にログが記録されていること
Supabase ダッシュボード → Table Editor → access_logs
上記の curl テスト後、GPTBot / ClaudeBot のブロックログが記録されていること確認。
管理ダッシュボードの確認
ブラウザで /admin/access-logs にアクセス(admin権限でログイン済みの状態で)。
グラフとログテーブルが表示されること確認。
Viteプロジェクトの robots.txt 確認(1つでOK)
curl https://updrs-tracker.vercel.app/robots.txt
AIクローラーの Disallow が表示されること。他の5プロジェクトも同様。
M
定期メンテナンス(月1回推奨)
放置すると DB 容量を圧迫するため
古いログの削除(90日以上前)
Supabase SQL Editor で以下を実行:
SELECT public.cleanup_old_access_logs(90);
削除された件数が返る。Supabase無料枠は500MB(約100万件分)。
新しいAIクローラーの追加確認
管理ダッシュボード(/admin/access-logs)で「不明なボット」カテゴリに
新しいAIクローラーが来ていないかチェック。見つけたら bot-detector.ts に追加。