00はじめに — 「軽くて・速くて・壊れにくい」を個人で
大企業のチームではなく、個人運営。だからこそ選んだ「シンプルで長持ちする」作り方の話です。
このページの黄色いマーカーが付いた専門用語は、クリック(タップ)すると意味の解説がポップアップで開きます。Web制作やAIが初めての方も、わからない言葉はその場で確認しながら読み進められます。
姉妹サイト「大阪探検隊」は、派手な裏側の仕組みを持たない、徹底して身軽な静的サイトです。ページは素の、見た目は、動きは必要最小限の。 そこに、「ニュースの自動集約」「画像の自動最適化」「AIによる調査・記事化」を足し算して運営しています。
個人運営でも、表示は速く・セキュリティは堅く・更新は楽に。そのために選んだ技術と運用を、専門用語をかみくだいて順番に紹介します。 このページ自体も、その方針で作られた1ページです。🛠️
01🧱 技術スタック全体図
「 → → → 自動化」の4階層。各層でいちばん身軽な選択肢を採っています。
FRONTEND
dist/*.min.* を配信。
HTML5PostCSSesbuildGoogle Fonts
HOSTING
DATA
data/*.json をJSが読み込む。
SupabasePostgreSQLRLSJSON
AUTOMATION
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-Policy/Permissions-Policy(カメラ・位置情報等を一括拒否)
- Cross-Origin-Opener/Resource-Policy でクロスオリジンの分離
- 外部CDN(Supabase JS)は でファイル改ざんを検知
- データベースは全テーブルRLS有効。公開して良い行だけが読める設計
04📰 ニュース自動集約エンジン
「横浜花博 最新情報まとめ」を支える、毎日の自動収集の仕組み。
Node.jsの小さなスクリプトが、横浜花博の公式サイトとGoogleニュースのを巡回し、新しい見出しを拾い集めます。集めた情報は data/yokohama_news.json に蓄積され、ページを開いたときにJavaScriptが日付順に並べて表示・集計します。
著作権への配慮
保存するのは「見出し・日付・出典リンク」だけ。記事本文は転載せず、続きは必ず各出典先で読んでもらう設計にしています。依存ライブラリもゼロ(Node.js標準機能のみ)で、軽く・壊れにくく動きます。
05🖼️ 画像最適化パイプライン
写真が多いサイトだからこそ、画像は「軽さ」が命。
新しい画像を追加するときは、必ず同じ工程を通します。これにより、見た目の品質を保ちながらファイルサイズを大きく削減し、スマホでの表示を速くしています。
この工程は (Node.js)や スクリプトで自動化。ファイル保存時に自動で走る仕掛けも用意しています。例えば、このページに使う国旗画像も、すべてこの工程でWebP化しています(21枚で合計わずか約18KB)。🚩
06🔎 検索に強くするSEO設計
「探している人に、ちゃんと届く」ための地味で大事な工夫。
- 。 各ページが「何の記事か・いつ更新か・パンくず・FAQ」などを機械可読な形でも宣言。検索結果でリッチに表示されやすくなります。
- の自動生成。 各ページの
<lastmod>(最終更新日)を、の最終日から自動算出。手作業の更新漏れを防ぎます。 - 。 SNSでシェアされたときの見た目(タイトル・説明・画像)を全ページで設定。
- 。
/yokohama-newsのように拡張子なしの綺麗なURL。.htmlからは自動で。 - 多言語の地理シグナル。 ページの対象地域・言語をメタ情報で明示。
07🚀 ビルドとデプロイ
一発で、安全に本番へ。
の に変更を すると、Vercel が次の工程を順番に実行してから世界へ配信します。
git push 一発で世界へ届けます。dist を生成最後の「ソース除去」は、本番に必要のない元ソース(未参照のCSS/JSやビルド用スクリプト)を配信物から取り除く工程。万一HTMLから参照が残っていれば消さない付きで、本番404を防ぎます。
08🤖 3つのAIエージェントによる協働開発
このサイトは、役割の違う3つのAIが分担して作っています。
それぞれ専用の設定ファイル(ルールブック)を持ち、共通ルール(AGENTS.md)のもとで協調。main への直接作業や を禁止し、ai/<エージェント>-<作業>-<日付> という命名のブランチで安全に作業します。
たとえば「海外報道まとめ」はこう作られた
大阪探検隊の記事「世界はGREEN×EXPO 2027をどう見ているか」は、Anthropic社のAI「Claude」を Claude Code 上で用いて作成しました。 英語・中国語(簡体字/繁体字)・韓国語などで横断的にWeb検索し、AIPH・BIE・米国植物園などのを直接確認。AIが下調べと文章化を担い、事実は一次ソースで人が照合する——という分業です。 AIは万能ではないので、重要な情報は必ず各出典元・公式サイトでもご確認ください。
09🧬 実際のコードをのぞく
言葉だけでなく、実際に動いている設定の“現物”を抜粋で公開します。コピーして自分のサイトの土台にしても構いません。
{
"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' でも封鎖。
// 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 で出し分け
② 画像最適化。 同じ工程を必ず通すから、写真が増えても表示は軽いまま。(撮影位置など)も同時に落としてプライバシーも守ります。
<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>
③ 。 検索エンジンに「これは技術記事で、いつ書かれ・誰が書いたか」を機械可読で宣言。検索結果でリッチに扱われやすくなります。実はこのページ自身も、まさにこの宣言を持っています。
# 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エージェントにそのまま貼り付けて使えます。
「フレームワークを使わず、素のHTML・CSS・JavaScriptだけで〇〇のランディングページを作って。CSSは外部ファイルに分け、装飾はすべてクラスで指定。インラインのstyle属性とscriptは禁止(CSP厳格化のため)。スマホ優先のレスポンシブで。」
「このサイトのContent-Security-Policyを 'unsafe-inline' を使わずに設計して。script-src と style-src は 'self' を基本に、必要な外部(Google Fonts等)だけドメインを列挙。あわせてHSTS・X-Frame-Options・nosniff などの推奨セキュリティヘッダーも提案して。」
「img/ 配下の画像を、EXIF除去 → WebP(quality 82)変換 → 元ファイル削除 までまとめて行うNode.js(sharp)スクリプトを書いて。あわせて幅640pxのモバイル版も生成し、srcset で出し分けられるようにして。」
「指定した公式サイトとGoogleニュースのRSSを巡回して、見出し・日付・出典リンクだけを重複なくJSONに追記するNode.jsスクリプトを、外部ライブラリゼロ(標準機能のみ)で書いて。記事本文は転載しない設計で。」
「このページに、schema.orgの構造化データ(JSON-LD)を追加して。種類は記事に合わせ、headline・datePublished・dateModified・author・breadcrumb・FAQ を含めて。あわせてOGP/Twitterカードのメタタグも一式そろえて。」
コツは「目的 → 制約 → 出力形式」の順で頼むこと。上の例も、すべてこの形になっています。返ってきたコードは必ず自分の画面で動作確認を——AIは強力ですが、最終確認はいつも人間の仕事です。具体的な手順は 「AIでWebサイトを作る方法」 でも解説しています。
※ 本ページは当サイトの制作・技術方針を一般向けにかみくだいて紹介したものです。具体的な設定値・構成は改善のため随時変更される場合があります。掲載情報は2026年6月時点。サイトの利用にあたっては各ページの注記・公式情報もあわせてご確認ください。