大阪探検隊
REAL-WORLD EXAMPLE — BUILT WITH AI

姉妹サイト「大阪探検隊」は、AIとこうして作られた

ここ AI探検隊 | Discover AI の姉妹サイト 「大阪探検隊 | Discover Osaka」 は、どんな技術で作られ、どんなAIでまとめられているのか。 フレームワークを使わないの設計思想から、のセキュリティ、 ニュースを毎日かき集める自動集約エンジン、そして3つのによる 協働開発まで——AIで個人がサイトを作って運営する“実例”の舞台裏をぜんぶ公開します。

Static HTML / CSS / JS Vercel Supabase CSP strict WebP JSON-LD AI × 3 agents

00はじめに — 「軽くて・速くて・壊れにくい」を個人で

大企業のチームではなく、個人運営。だからこそ選んだ「シンプルで長持ちする」作り方の話です。

このページの黄色いマーカーが付いた専門用語は、クリック(タップ)すると意味の解説がポップアップで開きます。Web制作やAIが初めての方も、わからない言葉はその場で確認しながら読み進められます。

姉妹サイト「大阪探検隊」は、派手な裏側の仕組みを持たない、徹底して身軽な静的サイトです。ページは素の、見た目は、動きは必要最小限の。 そこに、「ニュースの自動集約」「画像の自動最適化」「AIによる調査・記事化」を足し算して運営しています。

個人運営でも、表示は速く・セキュリティは堅く・更新は楽に。そのために選んだ技術と運用を、専門用語をかみくだいて順番に紹介します。 このページ自体も、その方針で作られた1ページです。🛠️

01🧱 技術スタック全体図

→ 自動化」の4階層。各層でいちばん身軽な選択肢を採っています。

AIの脳とノートPCのコード、CODE・API・DATABASE・機械学習・自然言語処理・AIエージェントのアイコンが繋がった、AI開発環境のイメージ
🧠 AIと一緒に組み立てる開発環境。コード・・データベース・自動化を、AIエージェントと行き来しながら形にしています。
フロント
FRONTEND
素のHTML5 + CSS + も使いません。CSSは (cssnano)で、JSは でバンドル&し、本番では dist/*.min.* を配信。 HTML5PostCSSesbuildGoogle Fonts
配信
HOSTING
すると自動でビルド&。世界中のから配信され、・キャッシュ最適化も標準で効きます。 VercelCDNAuto Deploy
データ
DATA
ギャラリー写真や掲示情報など「動くデータ」は 。全テーブルで を有効化。記事や一覧は data/*.json をJSが読み込むSupabasePostgreSQLRLSJSON
自動化
AUTOMATION
スクリプト群が、ニュース収集・画像変換・サイトマップ生成・構造化データ更新を自動化。人手は「企画と最終確認」に集中できます。 Node.jssharpPython

02⚡ なぜ「素のHTML」なのか

流行りのフレームワークを"あえて使わない"理由。

  • 速い。 余分なJavaScriptを読み込まないので、スマホでも一瞬で表示。万博関連の情報をサッと見たい人に最適です。
  • 壊れにくい。 依存ライブラリが少ないほど、数年後も動き続けます。流行が変わっても「ただのHTML」は生き残る。
  • 軽い運用。 個人運営でも、ビルドが単純なら保守が楽。トラブルの原因も追いやすい。
  • SEOに素直。 中身が最初からHTMLにあるので、検索エンジンに正しく読まれやすい(このページの本文も全部HTMLに書かれています)。

03🔒 セキュリティ — CSP厳格化の物語

個人サイトでも、守りは本気で。いちばん力を入れているのが Content-Security-Policy(CSP) です。

CSPは「このページが読み込んでいい素材(スクリプト・スタイル・画像など)」をブラウザに宣言する仕組み。万一、悪意あるコードが紛れ込んでも、宣言にない素材はブラウザ側で実行をブロックします。当サイトは、もっとも緩みやすい スクリプト・スタイルの両方から完全に撤去しました。

😰 ありがちな作り(撤去前の世界)

  • <script>…</script> をHTMLに直書き
  • style 属性をタグに直書き
  • onclick などでイベント処理
  • (スクリプト注入)の入口になりやすい

✅ このサイトの作り(厳格化後)

  • JSは外部ファイル /js/dist/*.min.js に分離
  • 装飾は専用クラス+外部CSSのみ
  • イベントは で付与
  • → インライン要素ゼロを毎回チェックして担保

多層的なセキュリティヘッダー

  • (常時HTTPS強制)/X-Frame-Options: DENY防止)
  • X-Content-Type-Options: Referrer-PolicyPermissions-Policy(カメラ・位置情報等を一括拒否)
  • Cross-Origin-Opener/Resource-Policy でクロスオリジンの分離
  • 外部CDN(Supabase JS)は でファイル改ざんを検知
  • データベースは全テーブルRLS有効。公開して良い行だけが読める設計

04📰 ニュース自動集約エンジン

「横浜花博 最新情報まとめ」を支える、毎日の自動収集の仕組み。

Node.jsの小さなスクリプトが、横浜花博の公式サイトGoogleニュースのを巡回し、新しい見出しを拾い集めます。集めた情報は data/yokohama_news.json に蓄積され、ページを開いたときにJavaScriptが日付順に並べて表示・集計します。

STEP 1🔍 収集公式サイト+GoogleニュースRSSを巡回
STEP 2🧹 整理IDで重複を除き、新着だけ追記。履歴は消さない
STEP 3🗂️ 保存日付の新しい順に並べJSONへ(上限80件)
STEP 4📊 描画JSがカード表示+件数・傾向を自動グラフ化

著作権への配慮

保存するのは「見出し・日付・出典リンク」だけ。記事本文は転載せず、続きは必ず各出典先で読んでもらう設計にしています。依存ライブラリもゼロ(Node.js標準機能のみ)で、軽く・壊れにくく動きます。

05🖼️ 画像最適化パイプライン

写真が多いサイトだからこそ、画像は「軽さ」が命。

新しい画像を追加するときは、必ず同じ工程を通します。これにより、見た目の品質を保ちながらファイルサイズを大きく削減し、スマホでの表示を速くしています。

STEP 1🧽 除去撮影位置などのメタ情報を削除(プライバシー保護)
STEP 2🔄 変換高効率フォーマットへ(quality 82)
STEP 3📱 モバイル版小さめサムネを別途生成し で出し分け
STEP 4🗑️ 原本整理変換後は元ファイルを削除して容量を節約

この工程は (Node.js)や スクリプトで自動化。ファイル保存時に自動で走る仕掛けも用意しています。例えば、このページに使う国旗画像も、すべてこの工程でWebP化しています(21枚で合計わずか約18KB)。🚩

06🔎 検索に強くするSEO設計

「探している人に、ちゃんと届く」ための地味で大事な工夫。

  • 各ページが「何の記事か・いつ更新か・パンくず・FAQ」などを機械可読な形でも宣言。検索結果でリッチに表示されやすくなります。
  • の自動生成。 各ページの <lastmod>(最終更新日)を、の最終日から自動算出。手作業の更新漏れを防ぎます。
  • SNSでシェアされたときの見た目(タイトル・説明・画像)を全ページで設定。
  • /yokohama-news のように拡張子なしの綺麗なURL。.html からは自動で
  • 多言語の地理シグナル。 ページの対象地域・言語をメタ情報で明示。

07🚀 ビルドとデプロイ

一発で、安全に本番へ。

に変更を すると、Vercel が次の工程を順番に実行してから世界へ配信します。

ワイヤーフレーム(設計図)が、都市の風景を背景にした完成済みWebサイトへと変わっていく、ビルドから公開までのイメージ
🚀 ワイヤーフレームから、公開まで。設計図を形にして、git push 一発で世界へ届けます。
設定注入公開キー等をから安全に埋め込み
構造化データ更新ニュース一覧のSEOデータを再生成
sitemap更新最終更新日をGit履歴から自動算出
CSS/JS最小化PostCSS+esbuildで dist を生成
ソース除去未使用の素ファイルを本番から削除

最後の「ソース除去」は、本番に必要のない元ソース(未参照のCSS/JSやビルド用スクリプト)を配信物から取り除く工程。万一HTMLから参照が残っていれば消さない付きで、本番404を防ぎます。

08🤖 3つのAIエージェントによる協働開発

このサイトは、役割の違う3つのAIが分担して作っています。

それぞれ専用の設定ファイル(ルールブック)を持ち、共通ルール(AGENTS.md)のもとで協調。main への直接作業や を禁止し、ai/<エージェント>-<作業>-<日付> という命名のブランチで安全に作業します。

Claude ロゴ
Claude Code
コード実装・リファクタリング・セキュリティ担当。このページもClaudeが実装。
CLAUDE.md
Antigravity(Gemini)ロゴ
Antigravity(Gemini系)
コンテンツ生成・画像処理・ドキュメント担当。
GEMINI.md
OpenAI Codex ロゴ
OpenAI Codex
ブラウザ確認・テスト・データ管理担当。
CODEX.md

たとえば「海外報道まとめ」はこう作られた

大阪探検隊の記事「世界はGREEN×EXPO 2027をどう見ているか」は、Anthropic社のAI「Claude」を Claude Code 上で用いて作成しました。 英語・中国語(簡体字/繁体字)・韓国語などで横断的にWeb検索し、AIPH・BIE・米国植物園などのを直接確認。AIが下調べと文章化を担い、事実は一次ソースで人が照合する——という分業です。 AIは万能ではないので、重要な情報は必ず各出典元・公式サイトでもご確認ください。

多言語Web検索英・中・韓・欧を横断
一次ソース確認公式・原典を直接読む
分析・構造化論点を整理して記事化
人による照合事実と引用を最終確認

09🧬 実際のコードをのぞく

言葉だけでなく、実際に動いている設定の“現物”を抜粋で公開します。コピーして自分のサイトの土台にしても構いません。

vercel.jsonHTTP Header
{
  "key": "Content-Security-Policy",
  "value": "default-src 'self'; script-src 'self';
            style-src 'self' https://fonts.googleapis.com;
            font-src https://fonts.gstatic.com;
            img-src 'self' data:; connect-src 'self' https://*.supabase.co;
            frame-ancestors 'none'; base-uri 'self'; object-src 'none'"
}

① CSPヘッダー。 'unsafe-inline' がどこにも無いのがポイント。スクリプトもスタイルも 'self'(=自分のドメイン)からしか読み込めず、注入されたはブラウザが実行を拒否します。frame-ancestors 'none'も封鎖。

tools/optimize.jsNode.js / sharp
// EXIF除去 → WebP(q82) → モバイル用 640w を別生成
const sharp = require("sharp");

await sharp(src)                      // 元画像
  .rotate()                           // 向きを正規化(EXIFは引き継がない=メタ除去)
  .webp({ quality: 82 })              // 高効率フォーマットへ
  .toFile(dest);                      // 例: hero.webp

await sharp(src)
  .resize(640)                        // スマホ用サムネ
  .webp({ quality: 80 })
  .toFile(mobileDest);                // 例: mobile/hero.webp → srcset で出し分け

② 画像最適化。 同じ工程を必ず通すから、写真が増えても表示は軽いまま。(撮影位置など)も同時に落としてプライバシーも守ります

<head> 内JSON-LD (構造化データ)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "AIで作った実例 — 大阪探検隊はこうして作られた",
  "datePublished": "2026-06-06T09:00:00+09:00",
  "dateModified": "2026-06-12T09:00:00+09:00",
  "author":    { "@type": "Organization", "name": "AI探検隊 | Discover AI" },
  "publisher": { "@type": "Organization", "name": "AI探検隊 | Discover AI" }
}
</script>

検索エンジンに「これは技術記事で、いつ書かれ・誰が書いたか」を機械可読で宣言。検索結果でリッチに扱われやすくなります。実はこのページ自身も、まさにこの宣言を持っています。

ターミナルGit / AI協働の運用
# mainへの直接作業・force pushは禁止。命名規則で安全に分業する
$ git switch -c ai/claude-security-fix-20260613

#  ↓ AIエージェントが実装 → 人間が画面で確認 → レビュー後にmainへ
$ git add -A && git commit -m "fix(security): CSPから unsafe-inline を撤去"
$ git push origin ai/claude-security-fix-20260613

#  main に入った瞬間、Vercel が自動でビルド&世界配信(約3分)

④ AI協働の運用ルール。 ai/<エージェント>-<作業>-<日付>で作業し、失敗してもいつでも戻せる状態を保ちます。3つのAIが同じ main を壊さずに分担できるのは、この規律のおかげ。

10✍️ そのまま使えるプロンプト集

この実例を、あなたのサイトで再現するための“最初の一言”。AIチャットやAIエージェントにそのまま貼り付けて使えます。

01土台のページを作る

「フレームワークを使わず、素のHTML・CSS・JavaScriptだけで〇〇のランディングページを作って。CSSは外部ファイルに分け、装飾はすべてクラスで指定。インラインのstyle属性とscriptは禁止(CSP厳格化のため)。スマホ優先のレスポンシブで。」

02セキュリティを固める

「このサイトのContent-Security-Policyを 'unsafe-inline' を使わずに設計して。script-src と style-src は 'self' を基本に、必要な外部(Google Fonts等)だけドメインを列挙。あわせてHSTS・X-Frame-Options・nosniff などの推奨セキュリティヘッダーも提案して。」

03画像を自動で軽くする

img/ 配下の画像を、EXIF除去 → WebP(quality 82)変換 → 元ファイル削除 までまとめて行うNode.js(sharp)スクリプトを書いて。あわせて幅640pxのモバイル版も生成し、srcset で出し分けられるようにして。」

04情報を毎日自動で集める

「指定した公式サイトとGoogleニュースのRSSを巡回して、見出し・日付・出典リンクだけを重複なくJSONに追記するNode.jsスクリプトを、外部ライブラリゼロ(標準機能のみ)で書いて。記事本文は転載しない設計で。」

05検索に強くする

「このページに、schema.orgの構造化データ(JSON-LD)を追加して。種類は記事に合わせ、headline・datePublished・dateModified・author・breadcrumb・FAQ を含めて。あわせてOGP/Twitterカードのメタタグも一式そろえて。」

コツは「目的 → 制約 → 出力形式」の順で頼むこと。上の例も、すべてこの形になっています。返ってきたコードは必ず自分の画面で動作確認を——AIは強力ですが、最終確認はいつも人間の仕事です。具体的な手順は 「AIでWebサイトを作る方法」 でも解説しています。

※ 本ページは当サイトの制作・技術方針を一般向けにかみくだいて紹介したものです。具体的な設定値・構成は改善のため随時変更される場合があります。掲載情報は2026年6月時点。サイトの利用にあたっては各ページの注記・公式情報もあわせてご確認ください。

あなたも、
AIで「つくる側」へ。

この記事で紹介した技術は、特別なチームがなくても再現できます。AIエージェントと無料ツールを組み合わせれば、ひとりでもWebサイトを作って公開できる。まずは「AIでWebサイトを作る方法」から、そして実際に動いている“実例”=姉妹サイト「大阪探検隊」を覗いてみてください。