💻 システム開発

README

最終更新 2026年04月29日 / 31_システム開発部/TERASU_Lens/_README.md

TERASU Lens — HP超厳しいチェックツール

TERASU で作った納品前HPを業界トップ100社レベルで超厳しく評価する独立ツール。
Claude Opus 4.7 + PageSpeed Insights + 業種別評価基準で、10カテゴリ・1000点満点で品質判定。


30秒で全体像

観点 一言
核心 AIが業界トップクラスの厳しさで評価 → 人手不要レベルの自動品質保証
本番URL https://terasu-lens.pages.dev/
ローカル /Users/oogushiyuuki/terasu-lens/
技術 Next.js 16 + React 19 / Tailwind v4 / Recharts / Cloudflare Pages Functions / Supabase / Anthropic Claude Opus 4.7 / PageSpeed Insights API
DB Supabase (terasu_lens_jobs / terasu_lens_results / terasu_lens_industry_rules)
開発状況 Phase 1 / Phase 2 / Phase 3 全て完了 (2026-04-28・1セッション完結) — A2 ZIP のみ R2 セットアップ要のため Phase 4 として未実装
環境変数 ANTHROPIC_API_KEY / SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY / PAGESPEED_API_KEY / TERASU_LENS_API_KEY

注意事項(重要)

日本語パス問題でルートを変更

依頼書では /Users/oogushiyuuki/株式会社SCALE/terasu-lens/ を推奨だったが、Next.js 16 (Turbopack) は日本語パスで panic するため、/Users/oogushiyuuki/terasu-lens/ (英語パス)に配置している。
scale-base と同じく、Next.js 系は英語パスがマスト。

環境変数とSupabase

初回セットアップは SETUP.md を参照。
完了するまで /api/healthhas_* が全部 false になり、評価は動かない。


保護資産(絶対に消さない・変えない)

機能(Phase 1 / Phase 2 / Phase 3 全完了)

ID 機能 実装ファイル
A1 URLからHP取得・解析 functions/_lib/parse.ts fetchPage()
A3 TERASU案件管理 API連携 受信 functions/api/jobs.ts (x-terasu-lens-key) + functions/api/webhook/reevaluate.ts
A4 スクショ取得(PageSpeed Insights screenshot) functions/_lib/pagespeed.ts runPageSpeed()
A5 HTML/CSS/JS パース・前処理 functions/_lib/parse.ts parseHtml()
B1 デザイン評価(Vision 70% + 自動シグナル 30%) score.ts buildAutoDesignSignals() + Vision
B2 コピー評価(Vision 40% + Claude Text 40% + 自動 20%) score.ts buildAutoCopySignals() + Claude Text + Vision
B3 UX評価(Vision 65% + 自動シグナル 35%) score.ts buildAutoUxSignals() + Vision
B4 モバイル対応評価 score.ts buildMobileScore()
B5 パフォーマンス評価(Lighthouse相当) score.ts buildPerformanceFromPageSpeed()
B6 SEO評価 score.ts buildSeoCategoryScore()
B7 アクセシビリティ評価 score.ts buildAccessibilityFromPageSpeed()
B8 セキュリティ評価 score.ts buildSecurityScore()
B9 法的要件評価 score.ts buildLegalScore()
B10 業種適合度評価 score.ts buildVisionDrivenScore('industry_fit') + 9業種ルール
C1 Claude Vision 超厳しい3視点プロンプト prompts.ts buildVisionPrompt() + claude.ts claudeVision()
C2 Claude Text コピー添削 prompts.ts buildCopyPrompt() + claude.ts claudeText()
C3 業界トップ100社目線 _lib/industries.ts (9業種×3-5社の代表例)
C4 競合HP比較分析 functions/_lib/competitor.ts analyzeCompetitors()
D1 スコアダッシュボード + レーダーチャート src/components/CategoryRadar.tsx + ScoreOverview.tsx
D2 致命的・改善必須・できれば改善の3段階リスト src/components/IssueList.tsx
D3 Claude Code 改修指示書 Markdown 自動生成 src/lib/instructionDoc.ts + InstructionDocActions.tsx
D4 TERASU案件管理 結果送信 webhook functions/_lib/terasu.ts sendToTerasuMgmt()
D5 PDF レポート出力(印刷専用CSS + window.print) globals.css @media print + InstructionDocActions.tsx
E1 スコア850以上で自動承認フラグ evaluate.ts で approved を result に保存
E2 改修後の再評価自動トリガー functions/api/webhook/reevaluate.ts
E3 5回ループでエスカレーション parent_job_id を辿った iteration カウント
E4 完全自動モード DB 対応 terasu_lens_jobs.auto_approve カラム

関数(grepで必ず存在確認)

functions/_lib/parse.ts:
  - export async function fetchPage()
  - export function parseHtml() (内部)

functions/_lib/pagespeed.ts:
  - export async function runPageSpeed()

functions/_lib/claude.ts:
  - export async function claudeVision()
  - export async function claudeText()
  - export function extractJson()

functions/_lib/score.ts:
  - export function buildSeoCategoryScore()
  - export function buildAccessibilityFromPageSpeed()
  - export function buildPerformanceFromPageSpeed()
  - export function buildSecurityScore()
  - export function buildLegalScore()
  - export function buildMobileScore()
  - export function buildVisionDrivenScore()
  - export function buildAutoDesignSignals()      ← Phase 2
  - export function buildAutoCopySignals()        ← Phase 2
  - export function buildAutoUxSignals()          ← Phase 2
  - export function mergeVisionIssues()
  - export function mergeCopyTextIssues()         ← Phase 2
  - export function calcOverallScore()
  - export function scoreToTier()

functions/_lib/evaluate.ts:
  - export async function evaluateJob()  ← メイン評価フロー

functions/_lib/competitor.ts:                     ← Phase 3
  - export async function analyzeCompetitors()

functions/_lib/terasu.ts:                         ← Phase 3
  - export async function sendToTerasuMgmt()

functions/api/jobs.ts:
  - export const onRequestPost
  - export const onRequestGet

functions/api/jobs/[id].ts:
  - export const onRequestGet

functions/api/health.ts:
  - export const onRequestGet

functions/api/webhook/reevaluate.ts:              ← Phase 3
  - export const onRequestPost (E2 再評価トリガー)

src/lib/instructionDoc.ts:                        ← Phase 2
  - export function buildInstructionMarkdown()
  - export function downloadMarkdown()
  - export function copyMarkdownToClipboard()

評価10カテゴリ(各100点・総合1000点)

死守する評価軸:
1. デザイン(Vision駆動)
2. コピー(Vision駆動)
3. UX(Vision駆動)
4. モバイル(PageSpeed Mobile + viewport + tap-targets + Vision)
5. パフォーマンス(PageSpeed Mobile Performance + LCP/CLS/TBT/画像/JS/CSS/フォント)
6. SEO(title/meta/OGP/JSON-LD/canonical/internal_links)
7. アクセシビリティ(PageSpeed Accessibility + 主要audit)
8. セキュリティ(HTTPS/HSTS/CSP/X-Frame/Mixed-Content/SSL/inline-script)
9. 法的要件(プライバシー/特商法/Cookie/著作権/業種別広告ガイドライン/連絡先)
10. 業種適合度(Vision駆動)

「超厳しい」プロンプトの3視点

functions/_lib/prompts.tsbuildVisionPrompt():
1. 年商10億円規模 BtoB CEO(顧客視点)
2. ベイジ・LIG・グッドパッチ主席ディレクター(制作視点)
3. 業界誌「Web Designing」月間レビュー担当(業界視点)

→ お世辞・遠慮・忖度を一切禁止する明示プロンプト。ここを薄めるのは絶対NG

過去FB対応済みポイント

FB(一般原則) 対応
changelog 必須 src/lib/changelog.ts 最上段に追記
関数を消さない 上記関数リストを grep で確認
デプロイ前バックアップ tar.gz を ~/terasu-lens-backups/
ハッシュ付きURL を共有しない 本番は https://terasu-lens.pages.dev/
日本語パス禁止(Next.js) 実装は /Users/oogushiyuuki/terasu-lens/

スモークテスト項目

□ https://terasu-lens.pages.dev/ にアクセスして HTTP 200
□ /api/health が has_anthropic / has_supabase_url / has_supabase_key 全部 true
□ トップフォームで baigie.me を投げて 5〜10分以内に結果が出る
□ 結果ページに 10カテゴリスコア + レーダーチャート + 3段階リストが描画される
□ 致命的問題(fatal)を最低1件は検出(業種EC で特商法なし などで再現可能)
□ /api/jobs/[id] が job + result を返す
□ コンソールエラーが出ない

残タスク

Phase 4(任意・将来拡張)

  • A2 ZIPアップロード対応:Cloudflare R2 一時ホスティング基盤の構築が前提(独立タスク)
  • C4 拡張:競合 PageSpeed 評価追加(現状は HTML+text のみで Claude Text 比較)
  • E4 UI 露出:フォームに auto_approve チェックボックスを露出(DB スキーマは対応済)

TERASU 案件管理連携フロー(参考)

TERASU 案件管理                              TERASU Lens
     |  POST /api/jobs (terasu_project_id付)     |
     |  + x-terasu-lens-key                      |
     |------------------------------------------>|
     |  {job_id, status: pending}                |
     |<------------------------------------------|
     |                                            | (5-10分の評価)
     |  POST {TERASU_MGMT_WEBHOOK_URL}           |
     |  + x-terasu-lens-signature                |
     |  Body: {overall_score, approved, issues, differentiation_proposals, ...}
     |<------------------------------------------|
     | 改修タスクをworkflowに自動展開             |
     | (改修完了後)                               |
     | POST /api/webhook/reevaluate              |
     | {parent_job_id, terasu_project_id, url}   |
     |------------------------------------------>|
     |                                            | iteration++ で再評価
     |                                            | 5回以上でescalation

7. 実装記録

2026-04-28 — Phase 1 / Phase 2 / Phase 3 全完了(1セッション完結)

Phase 1(ミニマム動作):
- 新規リポジトリ作成(Next.js 16 + React 19 + Tailwind v4 + Cloudflare Pages Functions)
- Supabase スキーマ作成(terasu_lens_jobs / terasu_lens_results / terasu_lens_industry_rules)
- A1/A4/A5/B5/B6/B7/C1/D1/D2 実装

Phase 2(自動シグナル拡充・Claude Text・改修指示書):
- B1/B2/B3 自動シグナル評価追加
- C2 Claude Text コピー添削
- C3 業界トップ100社リスト 9業種×3-5社
- D3 改修指示書 Markdown 自動生成 + ダウンロード/クリップボード

Phase 3(TERASU連携・自動ループ・PDF・競合分析):
- C4 競合HP比較分析
- D4 TERASU 案件管理 webhook 送信
- D5 PDF レポート(印刷専用CSS)
- E1/E2/E3/E4 自動ループ機構

  • 本番デプロイ:https://terasu-lens.pages.dev/
  • コード規模:約 4,000行・28ファイル
  • セットアップ手順書(SETUP.md

関連ノート


更新履歴

日付 内容
2026-04-28 初版作成(Phase 1 完了:A1/A4/A5/B5-B10/C1/D1/D2 + デプロイ)