✦ ARCHITECTURE DOCUMENT ✦

DQX攻略サイト
アーキテクチャ説明書

個人開発のドラクエ10攻略ガイドサイトが、どのような技術・サービスで動いているか、無料でどこまで実現できているかを1枚にまとめた技術資料です。

対象URL: https://dqx-guide.pages.dev/ / 作成日: 2026-06-29

01サイトの概要

「無料体験版でVer4.4までしっかり遊べる」をテーマに、ドラクエ10オンラインの攻略情報を50本のガイドにまとめた個人サイトです。友人・知人限定共有を想定し、検索エンジンには非公開(noindex)にしています。

50
ガイド本数
7
カテゴリ
PWA
対応
¥0
月額運用費

特徴(5つの実装ポイント)

📱
スマホアプリ化
ホーム画面追加でアプリのように起動。全画面表示・アドレスバーなし。
📴
オフライン閲覧
Service Workerで50ページ丸ごとキャッシュ。ネットなしでも読める。
🔔
更新自動検知
サイト更新時に「新しい版があります」とスマホにトースト通知。
🔍
Google検索連携
クエスト名クリックで自動的にGoogle検索、詳細情報にジャンプ。
📮
Discordフィードバック
右下ボタンから誤字報告・要望を送信。Bot対策あり・Discordに即通知。

02アーキテクチャ全体像

3つの登場人物(開発者・利用者・Cloudflare(クラウド))と、それらを繋ぐ静的HTMLファイル群で成り立っています。データベースやサーバーサイド処理はゼロ。

👨‍💻 開発者 (Windows PC) Claude Code Python / Bash wrangler CLI HTMLを編集 → デプロイ deploy wrangler pages ☁️ Cloudflare Pages (グローバルCDN) 静的ホスティング(無料) HTTPS自動化・DNS 帯域無制限・SLA無し 世界中のエッジからHTML配信 HTTPS HTML/CSS/JS 📱 利用者 (スマホ / PC) Safari / Chrome PWAとして起動 オフライン閲覧OK ホーム画面から1タップ 🗂️ サイトを構成する53ファイル(HTML/JS/PNG/JSON) HTML × 50 index.html contents.html taikenban.html ... 各種ガイド 自己完結・CSS内蔵 PWA基盤 × 3 manifest.json sw.js(Service Worker) pwa.js(クライアント) アプリ化・オフライン 更新検知 アイコン × 2 icon-192.png icon-512.png 紺 + 金の 「DQX / 攻略」 運用スクリプト update-version.py └ 全HTMLのバージョン更新 apply_pwa.py └ PWAタグ一括追加 開発者側だけで使用
開発者 → Cloudflare Pages → 利用者 の一方向配信。ただしフィードバック(利用者 → 開発者)だけは、Cloudflare Pages Functions + Turnstile + Discord Webhook で実現(詳細は Section 05)

03使用しているサービス・技術

すべて無料枠だけで完結しています。個人開発でこの規模のサイトが月額¥0で運営できる時代です。

☁️Cloudflare Pages ホスティング

世界中のCDNから配信する静的サイトホスティングサービス。GitHub Pagesと似た位置づけ。独自ドメイン・HTTPSも自動化。

💰 Free プラン:帯域・リクエスト無制限(静的サイト)

🔧wrangler CLI デプロイツール

Cloudflare公式のコマンドラインツール。wrangler pages deployでローカルのHTMLをそのままアップロード。

💰 完全無料(オープンソース)

🅰️Google Fonts Webフォント

ドラクエ風のドット絵フォント「DotGothic16」を配信。CDNから自動読み込み・キャッシュも効く。

💰 完全無料・商用OK

🌐Web標準 仕様

Service Worker API(オフライン化)、Web App Manifest(アプリ化)、Fetch API(バージョン検知)など。ブラウザ標準機能のみでPWAを実現。

💰 標準仕様(無料)

🤖Claude Code AI開発補助

Anthropic製のAIコーディング支援ツール。50ページ規模のガイド作成・調査・整合性チェックをAIエージェント並列で実施。

🐍Python / Bash 運用スクリプト

全HTMLの一括更新・バージョン管理・PWAタグ挿入などの自動化。update-version.py --deployでワンコマンドデプロイ。

💰 標準環境(無料)

Cloudflare Pages Functions サーバーレス関数

Cloudflare Pages内でエッジ実行される軽量なサーバー関数。/feedback エンドポイントで Discord Webhook中継+Turnstile検証を担当。DB無しでも「送信 → 通知」が成立。

💰 Free プラン:10万リクエスト/日まで無料

🛡️Cloudflare Turnstile Bot対策 / CAPTCHA

reCAPTCHA代替のBot対策サービス。ユーザーの操作パターンから人間かBotかを自動判定し、ほぼクリックレスで検証完了。フィードバック送信フォームに埋め込み。

💰 完全無料・無制限

💬Discord Webhook 通知先

Discordのチャンネルへ「投稿するだけ」の特殊URL。Discord Bot登録不要・OAuth不要で、Cloudflare Functions から POST するだけで整形されたカード(embed)が届く。

💰 完全無料(Discord標準機能)

04PWA(スマホアプリ化)の仕組み

PWA = Progressive Web App。Webサイトなのにネイティブアプリのように振る舞う技術の総称。今回のサイトは以下3つの機能を実装:

① ホーム画面追加・全画面起動

スマホのブラウザで開いて「ホーム画面に追加」すると、アイコンが並んで普通のアプリと見分けがつかない。起動時はアドレスバーが消え、全画面表示(standalone モード)。

② オフライン閲覧(Service Worker)

Service Workerとは、ブラウザとサーバーの間で動く「代理人」。初回起動時に50ページを丸ごとダウンロードしてキャッシュし、2回目以降はネット接続がなくても閲覧できる。

③ 更新検知トースト

サイトを更新した時、「新しい版があります」とスマホの画面下部にトースト通知が出る。ETagが使えないCDN環境でも動くよう独自実装。

05Discordフィードバック機能

右下の 「📮 フィードバック」ボタン から、誤字報告・情報の間違い・要望・感想を送信できます。ユーザーの送信内容は 数秒後にDiscordチャンネルへ届くので、私は即座に確認できます。DBは不要。

実装の3サービス連携

サイト(クライアントJS) → Cloudflare Turnstile(Bot対策)→ Cloudflare Pages Functions(サーバー関数)→ Discord Webhook(通知先)の4段構成。

① ユーザーが送信 📮 📮 フィードバックボタン モーダルに入力 (カテゴリ+本文+任意で名前) ② Bot対策 🛡️ Cloudflare Turnstile 人間 or Bot判定 → 通過トークン発行 ③ サーバー処理 Pages Functions POST /feedback 検証→embed整形→POST ④ 通知 💬 Discord Webhook 📮 誤字脱字 「〇〇のページに誤字がありました。〜〜」 ページ /tane.html - タネ・きのみ お名前 (匿名) 国/IP JP / (匿名化) dqx-guide.pages.dev 2026-06-29 22:00 ユーザー送信→Bot判定→サーバー中継→Discord整形通知 まで数秒。DB無し・ログイン無し・OAuth無し。
送信 → 判定 → 中継 → 通知。すべてCloudflareインフラ上で完結・DBなし

送信できる内容(5カテゴリ)

カテゴリ用途
📝 誤字脱字ページ内の誤字・タイポ報告
❗ 情報の間違い攻略情報の誤り(数値・仕様変更等)
💡 要望「〇〇のガイドが欲しい」等
😊 感想フリー感想
❓ その他上記に当てはまらないもの

セキュリティ・プライバシー対策

なぜこの構成なのか(設計判断)

06入出力フロー図(3シナリオ)

「誰が・何を・どうやりとりしているか」を3つの代表シナリオで示します。

シナリオA:開発者がサイトを更新する

開発者 HTMLを 修正・追加 update-version.py 全HTMLの site-version 一括更新 v9 → v10 wrangler CLI HTTPS で 51ファイルを送信 API経由アップロード Cloudflare Pages 世界中のCDNエッジへ 数秒で伝播完了 Deploy Complete ✓ コマンド1発(python update-version.py --deploy)で 修正 → バージョン更新 → 全世界配信 まで自動化

シナリオB:利用者が初回アクセス〜アプリインストール

① Safari で開く 📱 HTTPS リクエスト dqx-guide.pages.dev ↓ 返ってくるもの ・HTML (self-contained) ・pwa.js / sw.js ・manifest.json ・アイコン画像 ② SW 自動登録 ⚙️ pwa.js が実行される Service Worker 登録 50ページ + 資産を バックグラウンドで キャッシュ → オフライン準備完了 ③ ホーム画面追加 🏠 共有 → ホーム画面に追加 アイコンが並ぶ (紺+金の DQX/攻略) タップで起動 アドレスバーなし 全画面表示 📱 アプリ化完了 オフラインOK 通知OK

シナリオC:更新検知トーストが出る仕組み

アプリ起動 キャッシュから HTML即返し 現在の site-version 保持 JSが同時実行 fetch('./index.html', {cache: 'no-store'}) SWを素通しでネット直行 Cloudflare 最新HTMLを返す (キャッシュではなく) 最新のsite-version入り バージョン比較 埋め込み値と 最新値を照合 a !== b で判定 🎉 違う → 画面下にトースト表示 「✨ 新しい版があります [再読み込み]」 タップ → location.reload() → 新版で読み直し

07運用コストと制約

💰 月額運用費:¥0(完全無料)

Cloudflare Pages Free プランは 静的サイトの帯域・リクエスト無制限、Google Fonts / Web標準技術も無料。開発コスト(Claude Code)を除けば、ゼロ円で運営できています。

Cloudflare Pages Free プランの制限(実務上ほぼ問題なし)

項目制限実運用への影響
ビルド回数500回/月1日16回デプロイしても余裕。実運用では月10回程度
並列ビルド1個人サイトなので問題なし
ファイル数20,000ファイル現在53ファイル。余裕
1ファイル最大サイズ25MiB画像でも十分
帯域幅無制限友人共有〜不特定多数まで対応可能
リクエスト無制限同上
Pages Functions10万リクエスト/日フィードバック用途では実質使い切れない
Cloudflare Turnstile無制限Bot対策の呼び出し回数制限なし

技術的な制約と対策

08まとめ:このサイトが証明していること

この構成が示すのは、「今の時代、個人でもここまで作れる」ということです。

10年前なら数十万円かかったであろう「アプリ配信・サーバー・CDN」が、いまはすべて無料または月数千円で組めます。プログラミングというより組み合わせと設計の勝負に変わっています。