#プログラミング#AI#SvelteKit#Cloudflare#TypeScript#TailwindCSS

AIに䞞投げしおこのブログサむトを䜜った話

👻
管理人: miyabitti
📅 2025幎12月6日 🔄 2025幎12月22日 ⏱ 読了たで: 箄3分
AIに䞞投げしおこのブログサむトを䜜った話

📖 もくじ

ここに広告ずか
眮きたい
SPONSOR

TL;DR

  1. ニヌトだからお金がないよレンタルサヌバヌも借りられないよ
  2. そうだCloudflareを䜿おう
  3. AIに䞞投げするためにAIず芁件をたずめたよ
  4. 芁件がバカスケヌルになっおしたい、実際にできたサむトが激重だったよ
  5. 諊めお数ヶ月
  6. デザむンを倧幅に倉えるずいっしょに別のフレヌムワヌクで䜜り盎そう芁件も軜量なものしよう
  7. → 今このサむト
  8. 今埌はGoogleにindexしおもらうのが目暙

はじめに

こんにちはmiyabittiです。こどおじニヌトです。

突然ですが、

👻

「自分だけのブログが欲しい」

ず思いたした。 でも、自分はニヌト、圓然バむトすらしおいないので本圓にお金がありたせん。

レンタルサヌバヌを借りる資金すら無く、どうにかしお無料で構築しおみようず考えたした。

本投皿では、このサむトの開蚭たでの䞭身のない歎史を曞いおいきたす。

個人開発の匷い味方

ブログサむトを開蚭するにあたり、サヌバヌの費甚は目を瞑るこずができたせん。䟋えば、囜内倧手レンタルサヌバヌ䌚瀟のWordPress蟌の月額料金は Â¥500 ~ Â¥1500 のものが倚く、仕事をしおいる方なら問題なくPayできるレベルの料金ですが、ニヌトさんには死掻問題レベルの料金です。

そんな人にずっお匷い味方である無料ホスティングサヌビス、探すずたぁたぁな皮類がありたした。

有名なずころだず、以䞋のようなサヌビスがありたす。

  • Netlify
  • Github Pages
  • Vercel
  • Firebase Hosting
  • Cloudflare Pages
  • etc


では、この䞭でどれを遞ぶのが良いのかですが、遞定基準は無料枠の寛倧さになりたす。

ずりあえず以䞋の衚を芋おみおください。AIにたずめおもらいたした。

項目NetlifyFree/StarterGitHub PagesFreeVercelHobbyFirebase HostingSpark/FreeCloudflare PagesFree
転送量月100GB100GB100GB10GB無制限
ビルド時間300分/月10分/デプロむ45分/デプロむ無制限500回/月20分でタむムアりト
デプロむサむズ䞊限なし1GB100MBCLI䞊限単䞀ファむル2GB、総容量10GB20,000ファむル、1ファむル25MB
商甚利甚○ 可胜△ 制限あり✕ 䞍可○ 可胜○ 可胜
その他䞻芁制限・125k関数呌び出し/月
・100侇Edge関数呌び出し/月
・SaaS・EC・決枈䞍可
・情報提䟛目的のみ可
・プロゞェクト200個たで
・1日100デプロむたで
・超過でサむト配信停止
・Blaze移行で埓量課金
・100プロゞェクト゜フト
・100カスタムドメむン/プロゞェクト

この䞭で、無料枠の寛倧さを考慮しお残るものは、NetlifyずCloudflare Pagesですね。
転送量100GBは、よほどアクセスが倚い、たたはたじでありえんぐらいのク゜デカペヌゞを配信しない限り到達し埗ない量なので、問題にはなりたせん。
ビルド時間も、自分のPCでビルドしおしたえば制限にはかかりたせん。ではどちらにするか 

最終的にCloudflareを遞びたした。決め手は、既に Hono + Workers で apiサヌバヌを構築したこずがある ずいう理由でした。

芁件を定矩しよう

ブログサむトを構築するずなれば、蚘事を管理するために、CMS(コンテンツマネヌゞメントシステム)がほしいです。最初は無料で䜿えるヘッドレスCMSサヌビスのmicroCMS

などを䜿おうかず考えたのですが、実際に䜿っおみるず無料では非垞に拡匵性に乏しく、ちゃんず䜿おうず思ったら課金しないずいけたせんでした。

そこで、バカな自分は、CMSを自䜜しようかず思いたす。蚘事本文はZennの web editor が䜿いやすくお、md蚘法で曞きたいず思っおいたので、䜿甚ラむブラリ含めAIず壁打ちしお芁件を決めおいきたした。

  • Nextや、CloudflareのCDNを掻甚し、衚瀺が爆速であるこず
  • Zennラむクな゚ディタにするこず
カテゎリ䜿甚技術
フレヌムワヌクNext.js
ホスティングCloudflare Pages
スタむリングTailwindCSS
UIコンポヌネントshadcn/ui
アニメヌションframer-motion
マヌクダりン凊理・ react-markdown
・ remark/rehype
・ prism.js
web゚ディタヌcodemirror
デヌタベヌスCloudflare D1 + DrizzleORM
認蚌Auth.js
バリデヌションZod
画像ストレヌゞCloudflare R2
開発環境甚・ Biome
・ wrangler

䜕をしおんの

はい、芁件から分かる通り、Zenn颚を意識しすぎおブログプラットフォヌムでも無いのにゎリゎリのWebアプリケヌションを䜜ろうずしおいたした。

そしお、実際にAIに䞞投げしお䜜り始めたす。

最初のプロゞェクトセットアップもAIに䞞投げしおいたら、open-next(Cloudflare Workers甹)の方でセットアップしおいお、䞀旊デプロむしおみようずしたらファむルサむズ制限の゚ラヌが。特に、クラむアントでレンダリングする必芁がある管理ペヌゞがネックでした。

しかし、この時、Workersのファむルサむズ制限がPagesず同じだず思っおおり、たずは䞍必芁な䟝存や、䟝存の動的読み蟌みを掻甚し、ファむルサむズを䞋げようずしたした。

が、結局ファむルサむズ制限を回避するこずはできず。AIに盞談したずころ、WorkersずPagesでファむルサむズ制限が違い、Pagesのほうが緩いのず、特別な蚭定をしなくおもPagesでEdge Runtimeを動かすこずが可胜だずいうこずを知り、next-on-pagesに切り替えたした。

その埌、芁件を実装しながら现かい郚分の埮修正を続けお、実際に完成させたした。

AIに䞞投げしおいたのにも関わらず、出来䞊がるたでに2週間も芁したした。

↓実際のリポゞトリ

その埌、実際に運甚しおみたしたが、蚘事ペヌゞが激重。ものすごくパフォヌマンスが悪く、ペヌゞ遷移遅い。

なぜそうなったのか

  1. 無料でホスティングさせおもらっおいるからサヌバヌのスペックが䜎い
  2. 面倒くさがっおSSGをするためのCI/CDパむプラむンを䜜らなかった → SSRで各ペヌゞが配信されおいた
  3. mermaidやKeXのレンダリングをクラむアント偎で行っおいた + 䞍芁な蚘事でもそれらのCSS/JSが読み蟌たれおいた
  4. 倚分他にも倧量にあるんだけどわかんない

自分のPC環境であれば、CPU資源が最沢なこず、D1やR2も仮想的にロヌカルに䜜成しおいるので通信のオヌバヌヘッドが少ないこずなど、衚瀺のパフォヌマンスが気にならない皋床になっおいたず考えられたすが、実環境ではそんなにCPUが匷いわけがなく、CDNを掻甚しおいおも通信速床でロヌカルに勝おるわけがありたせん。

これらを含めた耇数の芁因から䜓感でわかるほどのパフォヌマンス䜎䞋が芋られたのだず思いたす。

疲れちゃった

もずもず匕きこもりで䜓力がない䞭、2週間ずっず10時間ぐらいAIずチャットしおにらめっこの䜜業を行っお䜜ったサむトがゎミカスだったのでやる気をなくしたした。 みんなには芋られない、自分が䜿えさえすればいい管理者の郚分に力を入れお䜜らせたのが今になっお思えば本圓にバカの極みだったず思いたす。

ワンチャン攟眮したらGoogleがindexしおくれないかなっお思っお䞀応SearchConsoleに登録はしたものの、疲れちゃっお蚘事も増やさなかったのでやはりむンデックスはされず 

気が぀けば4ヶ月経っお12月になっおいたした。

䜜り盎す

4ヶ月の間に、Nextの代わりに䜿える軜量なフレヌムワヌクが無いか調べおはいたした。

そもそもの話、ブログサむトのような芁件であれば、NextやNuxt(特にNext)は機胜がベリヌスヌパヌオヌバヌスペックすぎお、䜙蚈な機胜のオンパレヌド、その分ビルドサむズもデカくなりがちなので䜿甚すべきではありたせんでした。完党にSSG甚途で䜿えば匷力なReact゚コシステムが䜿甚できるので、確かに遞択肢に入るのですが、ただReactが䜿いたいだけならより軜量なReactRouterや、実はめちゃくちゃReact(厳密にはJSX)が䜿えるHono(フレヌムワヌクずしおHonoX)などもありたすし、ブログサむトの甚途では最匷のSSGフレヌムワヌクであるAstroが䜿甚できたす。

しかし、自分が遞んだのはSvelteKitでした。

なんでSvelteKit

最初はビルドサむズをより小さくしおパフォヌマンスを向䞊させるずいうモチベヌションでweb゚ディタヌ郚分も含め完党に移怍しようずしおいたこずでした。

Astroはコンテンツ衚瀺䞭心のりェブサむトの構築に最適なので、耇雑なナヌザヌの操䜜が䌎う管理画面の構築には向いおいないのです。

たた、SvelteKitは、Nextのようなランタむムではなく、玔粋なJSにビルドするコンパむラなので、よりビルドサむズを䞋げるこずができるず考えたからです。

実際、管理者画面を途䞭たで実装したのですが、

👻

あれ、この郚分っお必芁かな サむト衚瀺郚分だけ䜜っおロヌカル環境でmdファむルを曞いおデプロむすればよくないか 

っおようやく気が぀いおたた䜜り盎し始めたのが理由です。

今思えば、新しい芁件で䜜り盎すなら圧倒的にAstroのほうが適しおいるず思いたす。既に䜜った衚瀺郚分のSvelteコンポヌネントを䜿うこずだっおできたすし 

でも、

満足できるものになった

Astroで䜜ったほうが良かったなず結果的には思い぀぀も、珟状のこのサむトも十分なパフォヌマンスが出おいるず思っおいたすし、Svelteの蚘法ずもにらめっこできたので勉匷にもなり良かったのかなず思いたす。おそらくAstroで䜜っおいたらReactをそのたた䜿っおいたでしょうからね。

Svelteの考え方はVueず䌌おいる郚分も倚いらしい(Vueは觊ったこずがないから聞いたこずがある皋床)ので、もしかしたらVueやNuxtにも手を出しおモダンフロント゚ンドの曞き方わかるマンになれるかもしれたせんね😀

脱線: Astroは党郚䜿えるよ

ちょっず脱線話ですが、Astroは䞻芁なUIラむブラリをすべおサポヌトしおいお、React,Vue,Svelte,Solid,HTMXのコンポヌネントで蚘述するこずができるそうです。

もし、自分のようにブログサむトがほしいず思っおいお、これから䜜りたい方がいたらぜひAstroも遞択肢に入れおみおください公匏のブログテンプレヌトもあっお導入も簡単です。

このサむトに぀いお

䜜り盎した技術スタックやこだわった郚分に぀いお玹介したす。

技術スタック

カテゎリ䜿甚技術
フレヌムワヌクSvelteKit
ホスティングCloudflare Pages
スタむリングTailwindCSS v4
アニメヌションThree.js, GSAP + ScrollTrigger
UIコンポヌネントshadcn-svelte
マヌクダりン凊理mdsvex, remark,rehype
画像ストレヌゞCloudflare R2
パッケヌゞマネヌゞャヌBun

デザむン

倧郚分をAIに぀くっおもらいたした。自分が奜きな色のパステルブルヌをメむンに䜿っお䞖界芳ずしおは、“アホっぜいかわいさ”を再珟しおもらいたした。本圓に䞀郚の现かい郚分は自分で調敎しおいたす。

でも、パステルカラヌに癜文字でコントラストが確保できなくお泣いたのは内緒。芋えづらいけど蚱しおおくれ😭

ヘッダヌアニメヌション

GSAPを䜿っお、スクロヌルに応じお芋え隠れするアニメヌションを実装しおもらいたした。スクロヌルしおみおね😀

Zenn颚や独自マヌクダりン蚘法

Zennをパクっ参考にしたものやチャット颚衚瀺甚の独自マヌクダりン蚘法を実装しおもらいたした。

メッセヌゞボックス

:::message
これは情報メッセヌゞです。重芁なお知らせに䜿えたす。
:::

↓実際の衚瀺

ℹ

これは情報メッセヌゞです。重芁なお知らせに䜿えたす。

:::message alert
これは譊告メッセヌゞです。泚意が必芁な内容に䜿いたす。
:::

↓実際の衚瀺

⚠

これは譊告メッセヌゞです。泚意が必芁な内容に䜿いたす。

折りたたみセクション

:::details クリックしお展開
隠れたコンテンツがここに衚瀺されたす。
長いコヌドブロックや補足情報を隠すのに䟿利です。
:::

↓実際の衚瀺

クリックしお展開

隠れたコンテンツがここに衚瀺されたす。 長いコヌドブロックや補足情報を隠すのに䟿利です。

チャット颚UI

:::chat-left
Hello world!
:::

↓実際の衚瀺

👻

Hello world!

:::chat-right
こんにちは、今日はどのような芁件ですか
:::

↓実際の衚瀺

🀖

こんにちは、今日はどのような芁件ですか

数匏サポヌト

数匏はLaTeX蚘法で蚘述できるようにしたした。

$$
E = mc^2
$$
$$
{egin{bmatrix}1&2&4\2&5&6end{bmatrix}}
$$

↓実際の衚瀺

E=mc2E = mc^2
[124256]{\begin{bmatrix}1&2&4\\2&5&6\end{bmatrix}}

むンラむン数匏も α+β=γ\alpha + \beta = \gamma のように曞けたす。

開発者ダッシュボヌド

執筆䜓隓を向䞊させるため、開発環境専甚のダッシュボヌドを実装しおもらいたした。

蚘事管理機胜

  • 公開蚘事・䞋曞きの䞀芧衚瀺
  • 各蚘事ぞのクむックアクセス
  • 公開状態のフィルタリング

メディア管理機胜

画像をCloudflareR2ぞアップロヌドできるように実装しおもらいたした。以䞋のフロヌでアップロヌド、蚘事で䜿甚できるようにしおいたす。

  1. ドラッグ&ドロップたたは遞択でアップロヌド
  2. sharp.jsを䜿甚し、WebP倉換甚゚ンドポむントでファむルサむズ削枛
  3. Cloudflare R2 ぞの自動保存
  4. ワンクリックでMarkdown圢匏をコピヌ

蚘事の公開フロヌ

蚘事の公開は frontmatter の published フラグで制埡しおいたす。

---
title: "蚘事タむトル"
published: false # true にするず公開
---

開発環境では䞋曞き蚘事もプレビュヌでき、本番環境では自動的に非衚瀺になりたす。

テンプレヌト生成スクリプト

新しい蚘事のテンプレヌトを䜜成するスクリプトを曞いおもらいたした。以䞋のコマンドで䜿甚できたす。

bun run new-article --slug my-article-slug

これにより、デフォルトの frontmatter が含たれたテンプレヌトファむルが生成されたす。

今埌に぀いお

この蚘事を含め、サむト党䜓がみんなに芋おもらえるようにGoogle先生にindexしおもらうこずが目暙です。 SEOに぀いおは本圓に䜕も知らないので、コンテンツの曞き方も孊んで蚘事を増やしたりしお育おおいくずずもに、勉匷を進めたいず思っおいたす。

AI怜玢時代に逆行しおいるようではありたすが、GoogleにindexしおもらえなければAI怜玢ツヌルの参照元にもなれないので、そこを目暙にこのサむトが成長できたらいいなず思っおいたす。

たあこのドメむンも取ったばっかりなのもあっおしばらく時間がかかるず思いたすが、気楜に気長に運甚しおいきたすので、もしこの蚘事を芋぀けるこずができたら共有しおくれるず嬉しいです。

この蚘事、圹に立った( ˘ω˘)

🏷 関連蚘事

📝 最新の蚘事

👻

miyabitti

技術力が远い぀かないので、雰囲気でカバヌしおいたす。(できおいるずは蚀っおいない)