Web Lukes
💻

モダンブログサイトの技術アーキテクチャ全容解説 - Remix + Cloudflare + MDX

公開日: 2025/1/30更新日: 2025/1/30

このブログサイトの技術アーキテクチャ全容を詳細に解説します。高速・低コスト・高機能を実現する技術選定の理由と実装について、実際の運用データとともに紹介します。

🏗️ システム全体アーキテクチャ

アーキテクチャ概要図

MERMAID
graph TB
A[MDX記事ファイル] --> B[ビルドシステム]
B --> C[JSON静的ファイル]
B --> D[Remix App]
D --> E[Cloudflare Pages]
E --> F[グローバルCDN]
G[Cloudflare Images] --> F
H[開発環境] --> I[リアルタイム編集]
I --> A

💰 「どんだけ安く作ったの?」コスト内訳

全部で月額500円以下です 😲

何を使ってる?なんで選んだ?いくらかかる?
Remix + React「速いし、SEOもバッチリ」0円 🎉
Cloudflare Pages「無料でこの機能はヤバい」0円〜500円
MDX + Git「記事管理がWordPressより簡単」0円
Cloudflare Images「画像が自動で軽くなる」〜500円
ドメイン・DNS「全部Cloudflareで統一」0円
TypeScript「バグが減って安心」0円
GitHub Actions「デプロイが自動」0円
アクセス解析「Google Analyticsより軽い」0円

合計:月額0円〜500円 😎

「え、サーバー代が数万円って言ってた人、あれ何だったの...」って感じです。

🎯 技術選定の理由と評価

1. Remix を選んだ理由

評価項目:

  • パフォーマンス: ⭐⭐⭐⭐⭐
  • 開発体験: ⭐⭐⭐⭐⭐
  • 学習コスト: ⭐⭐⭐⭐
  • コミュニティ: ⭐⭐⭐⭐

選定理由:

TypeScript
// Remix の強み
export const loader = async ({ params }: LoaderFunctionArgs) => {
// サーバーサイドでデータ取得
const article = await getArticle(params.slug);
return json({ article }, {
headers: {
// キャッシュ制御
"Cache-Control": "public, max-age=300",
"CDN-Cache-Control": "public, s-maxage=1800"
}
});
};
// クライアントサイドは自動で最適化される
export default function Article() {
const { article } = useLoaderData<typeof loader>();
return <ArticleContent article={article} />;
}

他の選択肢との比較:

フレームワークSEO初期表示開発効率ホスティング対応
Remix⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Next.js⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Astro⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
SPA(React)⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

2. Cloudflare Platform を選んだ理由

コスト効率:

YAML
# 他社との比較 (月額)
Cloudflare Pages + Images:
- 無料枠: 500ビルド/月, 100GB転送/月
- 画像最適化: $1-10/月 (使用量ベース)
- 合計: $1-15/月
Vercel:
- Pro: $20/月
- 画像最適化: 別途従量課金
- 合計: $20-50/月
AWS:
- CloudFront + S3 + Lambda: $5-30/月
- CloudFormation管理の複雑さ
Netlify:
- Pro: $19/月
- 画像処理: 別途プラグイン
- 合計: $19-40/月

パフォーマンス:

JavaScript
// Cloudflare の Edge Network 活用
// 全世界 330+ データセンターでの配信
const performanceMetrics = {
TTFB: "< 100ms (90%ile)",
CDN_HitRate: "99.2%",
ImageOptimization: "自動WebP/AVIF変換",
EdgeCaching: "静的アセット無期限キャッシュ"
};

3. MDX コンテンツ管理システム

選定理由:

Markdown
## MDX の優位性
### ✅ メリット
- **AI対応**: ChatGPT/Claude でのライティングに最適
- **Git管理**: バージョン管理・差分確認が容易
- **React統合**: 動的コンポーネントの埋め込み可能
- **型安全性**: TypeScript との完全統合
- **検索性**: プレーンテキストで grep 可能
### ❌ デメリットと対策
- 非技術者には難しい → エディターUI提供
- 画像管理が複雑 → Cloudflare Images 連携
- ビルドが必要 → スマートデプロイで自動化

実装例:

TypeScript
// MDX + React コンポーネントの統合
export const components = {
img: ({ src, alt }) => (
<CloudflareImage
src={src}
alt={alt}
loading="lazy"
sizes="(max-width: 768px) 100vw, 800px"
/>
),
CodeBlock: ({ language, children }) => (
<PrismHighlight language={language}>
{children}
</PrismHighlight>
)
};

⚡ パフォーマンス最適化戦略

Core Web Vitals 実測値

JavaScript
// 実際のパフォーマンス指標 (3ヶ月平均)
const metrics = {
LCP: "0.8s", // 目標: <2.5s
FID: "12ms", // 目標: <100ms
CLS: "0.02", // 目標: <0.1
TTFB: "85ms", // 目標: <800ms
Speed_Index: "1.2s"
};

最適化手法の実装

1. 画像最適化

TypeScript
// Cloudflare Images の自動最適化
const ImageComponent = ({ src, alt, sizes }) => (
<img
src={`${src}/format=auto,quality=85`}
srcSet={`
${src}/w=320,format=auto,quality=85 320w,
${src}/w=640,format=auto,quality=85 640w,
${src}/w=1024,format=auto,quality=85 1024w
`}
sizes={sizes}
alt={alt}
loading="lazy"
decoding="async"
/>
);

2. コード分割とプリロード

TypeScript
// ルートベースのコード分割
const routes = [
{
path: "articles/:slug",
lazy: () => import("./routes/articles.$slug"),
},
{
path: "admin/edit/:slug",
lazy: () => import("./routes/admin.edit.$slug"),
}
];
// Critical リソースのプリロード
export const links: LinksFunction = () => [
{ rel: "preload", href: "/fonts/inter.woff2", as: "font", type: "font/woff2" },
{ rel: "preload", href: "/data/articles.json", as: "fetch" },
];

3. キャッシュ戦略

TypeScript
// 多層キャッシュ戦略
export const loader = async ({ request }) => {
return json(data, {
headers: {
// ブラウザキャッシュ: 5分
"Cache-Control": "public, max-age=300, stale-while-revalidate=1800",
// CDNキャッシュ: 30分、1日間 stale 許可
"CDN-Cache-Control": "public, s-maxage=1800, stale-while-revalidate=86400",
// Cloudflare 固有: Edge キャッシュ制御
"CF-Cache-Status": "HIT"
}
});
};

🔧 開発・運用効率の最適化

スマートデプロイシステム

JavaScript
// 変更検知 → ビルド → デプロイの自動化
const smartDeploy = async () => {
// 1. Git 差分から変更ファイル検出
const changedFiles = await detectChangedFiles();
const changedMDX = changedFiles.filter(f => f.endsWith('.mdx'));
if (changedMDX.length > 0) {
console.log(`📝 ${changedMDX.length} MDX files changed`);
// 2. 記事データ再生成
await buildArticles();
// 3. 更新されたJSONを自動ステージング
await stageUpdatedFiles();
}
// 4. Cloudflare Pages にデプロイ
await deployToCloudflare();
};

環境別最適化

TypeScript
// 開発環境: リアルタイム編集
if (isLocal) {
// MDXファイルから直接読み込み
const { getArticleFromMDX } = await import("~/utils/markdown.server");
article = await getArticleFromMDX(slug);
} else {
// 本番環境: 事前ビルドJSONから高速読み込み
const res = await fetch(`${url.origin}/data/articles.json`);
const data = await res.json();
article = data[slug];
}

型安全性とDX向上

TypeScript
// 記事データの型定義
export interface Article {
slug: string;
title: string;
description: string;
content: string;
publishedAt: string;
modifiedAt?: string;
category: string;
tags: string[];
}
// ローダーの型安全性
export const loader = async ({ params }: LoaderFunctionArgs) => {
const article: Article = await getArticle(params.slug!);
return json({ article });
};
// コンポーネントでの型推論
export default function ArticlePage() {
const { article } = useLoaderData<typeof loader>(); // Article型で推論
return <ArticleRenderer article={article} />;
}

💰 コスト分析とROI

運用コスト詳細

月間コスト内訳:

YAML
固定費:
- ドメイン名 (.com): $1/月 (年額 $12)
- 開発ツール: $0 (オープンソース)
従量課金:
Cloudflare Images:
- 保存: 100GB まで無料
- 変換・配信: 10万リクエスト/月まで $1
- 超過分: $0.50/月 per 10万リクエスト
Cloudflare Pages:
- ビルド: 500回/月まで無料
- 帯域幅: 100GB/月まで無料
- Functions実行時間: 10万リクエスト/月まで無料
月間想定コスト: $1-5 (PV 10万まで)

他社サービスとの比較:

TypeScript
// 年間コスト比較 (PV 10万/月想定)
const costComparison = {
"現在の構成 (Cloudflare)": "$12-60/年",
"WordPress.com Business": "$300/年",
"Medium Partner": "$50/年",
"Ghost Pro": "$180/年",
"Vercel Pro": "$240/年",
"Netlify Pro": "$228/年"
};
// コストパフォーマンス
const performance = {
"PageSpeed Score": "95-100",
"稼働率": "99.99%",
"Global CDN": "330+ エッジ",
"カスタマイズ性": "無制限"
};

ROI 分析

JavaScript
// 開発時間投資 vs 継続コスト削減
const investment = {
初期開発: "40時間",
学習コスト: "20時間",
年間保守: "10時間",
年間コスト削減: "$200-400",
時給換算ROI: "$3.3-6.7/時間"
};

🚀 スケーラビリティと拡張性

トラフィック増加への対応

YAML
想定トラフィック別の対応:
月間 1万 PV:
- 現在構成で完全対応
- コスト: $1-3/月
月間 10万 PV:
- 追加設定不要
- コスト: $3-8/月
月間 100万 PV:
- Cloudflare Pro ($20/月) への移行検討
- 追加最適化 (Service Worker, 高度キャッシュ)
- コスト: $25-50/月

機能拡張の容易性

TypeScript
// プラグインシステムの例
interface BlogPlugin {
name: string;
initialize: () => void;
processContent?: (content: string) => string;
addRoutes?: () => RouteObject[];
}
// SEO プラグイン
const SEOPlugin: BlogPlugin = {
name: "seo-optimizer",
initialize: () => {
// Open Graph, Twitter Card 自動生成
},
processContent: (content) => {
// 内部リンク自動検出・最適化
return optimizeInternalLinks(content);
}
};
// コメントシステムプラグイン
const CommentsPlugin: BlogPlugin = {
name: "comments-system",
addRoutes: () => [{
path: "api/comments",
action: handleCommentSubmission
}]
};

📊 運用データとメトリクス

パフォーマンスメトリクス (3ヶ月実績)

JavaScript
const realWorldMetrics = {
// Core Web Vitals (75パーセンタイル)
LCP: {
desktop: "0.6s",
mobile: "1.1s",
target: "<2.5s"
},
// ページロード時間
loadTime: {
firstByte: "120ms",
domComplete: "1.8s",
fullyLoaded: "2.3s"
},
// リソースサイズ最適化
resourceSize: {
html: "15KB (gzipped)",
css: "45KB (gzipped)",
js: "180KB (code-split)",
images: "自動最適化済み"
},
// キャッシュ効率
cacheHitRate: {
staticAssets: "99.8%",
apiResponses: "95.2%",
images: "98.9%"
}
};

コスト効率性の検証

TypeScript
// 実際の運用コスト (直近3ヶ月)
const actualCosts = {
"2024年11月": "$2.45",
"2024年12月": "$3.12",
"2025年01月": "$2.89",
平均: "$2.82/月",
年間想定: "$33.84"
};
// 同等サービスとの差額
const savings = {
"vs WordPress.com": "$266.16/年の節約",
"vs Ghost Pro": "$146.16/年の節約",
"vs Vercel Pro": "$206.16/年の節約"
};

🔄 継続的改善とロードマップ

短期改善計画 (1-3ヶ月)

  • Service Worker によるオフライン対応
  • 画像遅延読み込みの更なる最適化
  • 記事検索機能の実装
  • RSS フィード自動生成
  • サイトマップ自動更新

中期改善計画 (3-6ヶ月)

  • コメント機能の実装 (Cloudflare D1)
  • 記事レコメンデーション機能
  • アクセス解析ダッシュボード
  • A/B テスト基盤構築
  • 多言語対応 (i18n)

長期ビジョン (6ヶ月以上)

  • AI 支援記事生成ツール
  • 記事パフォーマンス予測
  • 自動SEO最適化
  • Edge でのリアルタイム処理
  • マイクロサービス化 (必要に応じて)

まとめ

この技術アーキテクチャにより以下を実現:

✅ 達成項目:

  • 高速表示: LCP 0.8秒、PageSpeed 95点以上
  • 低コスト: 月額 $1-15 で運用
  • 高い開発効率: MDX + Git による快適なライティング
  • スケーラビリティ: 月間100万PVまで対応可能
  • 保守性: TypeScript による型安全性
  • SEO最適化: SSR によるクローラビリティ

🎯 重要な学び:

  1. 適切な技術選定がコスト・パフォーマンス両面で重要
  2. Cloudflare エコシステムの活用で大幅なコスト削減
  3. MDX + Git によるコンテンツ管理の効率性
  4. 段階的最適化による継続的な品質向上

このアーキテクチャは、個人ブログから中規模メディアまで幅広く適用可能な、現代的で持続可能なWeb開発のモデルケースとなっています。

🎁おすすめツール・サービス

FX自動売買VPSなら50%OFF

キャンペーンで月1,790円〜。MT4/MT5プリインストール済み、自動復旧機能付き。14日間無料お試し。

シンクラウドデスクトップ for FX
ゴトー日EAを探しているならソースコード付

4年で資金4.7倍のバックテスト実績。ソースコード付きで自由にカスタマイズ可能。

ゴトー日EA Ultimate版(3,980円)

※上記リンクにはプロモーション(広告)が含まれています

🔮
MEMBERSHIP

量子相場謀略|ホソノP

ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。

✓EAソースコード公開
✓バックテスト生データ共有
✓リアルタイム相場分析
✓メンバー限定記事
メンバーシップに参加する※ noteアカウントで簡単登録

📚あわせて読みたい

💻

😭『なんで記事が反映されへんの!?』3時間の格闘から生まれたデプロイシステム完全改良記

「記事書いたのにサイトに出てこない...」そんな地獄から這い上がった、血と汗と涙のデプロイシステム改良プロジェクト。import地獄からfetch天国への道のり、全部見せます。

プログラミング・開発2025/1/31
💻

「また動いてない!💢」CSS ビルド・デプロイ時のスタイル適用問題を血と汗で解決した記録 😤 - Vite + Remix + Cloudflare

Vite ビルドシステムでのCSS生成問題とCloudflare Pages デプロイ時のスタイル適用エラーの原因と解決策。ファイルハッシュ不整合からクリーンビルドまで。

プログラミング・開発2025/1/30
💻

😱 Remixサイトが真っ白に!デプロイ地獄から這い上がった3日間の記録

「ローカルでは動くのに本番で500エラー」あるある体験談。初心者の私がRemix + Cloudflare Pagesで地獄を見て、最終的に解決するまでの涙と汗の物語。

プログラミング・開発2025/1/30
💻

😤『なんでタグクリックできないの!?』から始まったブログUI大改革の奇跡

ユーザビリティに問題だらけのブログサイトを1時間で劇的改善!タグのクリック機能、パンくずナビ、外部リンクの別タブ表示、スクロール位置記憶まで一気に実装した改善の全記録。

プログラミング・開発2025/1/31
💻

「お金がない…でも夢はある!」😭 月額$15で企業レベルWebシステムを作る魔法の技術選定 💰✨

大企業レベルの機能を個人・スタートアップ予算で実現する技術選定戦略。実運用データに基づく詳細コスト分析とROI計算。

プログラミング・開発2025/1/30
💻

🎨 コードブロックを美しく!Prism.js シンタックスハイライト完全実装ガイド

Remix + Vite環境でPrism.jsを使ってコードブロックに美しいシンタックスハイライトを実装する方法。VS Codeテーマ風のカラーリングで開発者体験を向上!

プログラミング・開発2025/1/30