エンジニア的ブログ再構築 : Next.js × Tailwind Plusで得る柔軟性
Micro.blogを利用したブログを運用していましたが、Next.js + Tailwind Plus(旧Tailwind UI)を使ってエンジニアから見て柔軟なブログを再構築してみました。 "Indie Microblogging"というコンセプトに共感し、 X.comのようなプラットフォームに依存せず 長文の記事だけでなくマイクロブログも可能なMicro.blog を昨年から利用していました。 気軽なつぶやきと長文記事を同じプラットフォームで書けて、 Micro.blogのコミュニティーで海外のユーザーとのコミュニケーションも楽しくはありました。 しかし、半年くらい使ってみると次のような点で不満を持ちました。 先日に遊びでNext.js + Tailwind CSSでPortfolioサイトを作りましたが、 CMSのような制約がなく、コードで部品を書いていける体験が 楽しかったのでブログも同じような技術スタックで構成することにしました。 Next.jsベースでのブログのStarter Kitのようなものはいくつか存在しますが、 興味から有償のTailwind Plusを購入したので、Tailwind Plusが提供する個人向け Blogの"Spotlight"というTemplateをベースにカスタマイズしました。 Tailwind PlusのTemplateは、完全に動作するReactベースのアプリケーションコード で、Javascript版とTypeScript版が提供されており、Tailwind CSSを利用したUI要素 だけでなく状態管理やルーティング、APIとの連携など本番環境ですぐに使用でき る機能を全て含んでいます。next-themesを利用したダークモード対応やPrismJSを 使ったSyntax Highlight、レスポンシブ対応、画像最適化やコンポーネントのプリ ロードなどは最初から組み込まれています。開発者はこれらのテンプレートを導入す るだけで、最小限のカスタマイズで完全な機能を持つReactアプリケーションを短時 間で構築できると謳われています。 しかし、実際にブログで運用にはそこそこカスタマイズが必要でした。 主なカスタマイズポイントとしては以下のような点です。 通常であれば、gray-matterやremarkなどを入れてヘッドレスCMSなどからMarkdown記事を取り込み 動的ルーティングで記事を生成するのが美しいのでしょうが、 「そのままMDXで書けばいいか」と割り切ってApp Routerの下に記事を書いていくスタイルにしました。 記事の執筆とサイトのコーディングの区別がつかない今のスタイルは不便もありますが、 気に入っています。HMR1機能で特に工夫もせずに更新した記事がテスト環境でリアルタイムに 反映されブラウザで確認できる点も気に入っています。 まだ記事の移行も終わっていませんし、元のテンプレートからそのまま未修正のもの もありますが、ぼちぼちと修正していこうと思います。 Deploy先は、AWSのAmazon Amplifyとしました。ゆくゆくメールフォームなども作っ ていきたいと思います。 Next.jsとTailwind UIの大きな魅力の1つは、カスタムコンポーネントを簡単に作成 して再利用できる点です。従来のCMSであればプラグインやテンプレートの変更とな り気軽にできませんが、今のスタイルであればTypescriptでコードを書けばすぐに利 用できます。コードなのでClaude CodeなどのAI支援も活用できます。 例えば、ブログ記事の中でレストランやショップの情報を 綺麗に表示するためのコンポーネントを作成しました。 このコンポーネントを使用すると、以下のように店舗情報を簡単に表示できます。 レストランやカフェだけでなく、様々な店舗情報を表示できます。 このようなコンポーネントは、情報を構造化して表示するだけでなく、スタイリングの一貫性を保ち、コードの再利用性を高めるメリットがあります。MDXの中でReactコンポーネントをシームレスに使用できるのは、このブログシステムの大きな魅力の1つです。 Micro.blogからNext.js × Tailwind Plus × Amazon Apmplify(AWS)へのブログ移行は、 モダンなWeb技術スタックを活用するという点で非常に満足のいく選択でした。 新しいプラットフォームでは、以下のようなメリットを実感しています。 もちろん、まだ改善点もあります。コンテンツの移行や検索機能の実装、SEO対策など、今後も少しずつアップデートしていく予定です。自分のペースで改良していける点が、自前のプラットフォームの最大の魅力だと感じています。 Next.jsとTailwind Plusの組み合わせは、Webアプリケーション構築だけでなく 個人ブログの構築においても非常に強力なツールセットになっていると実感しています。 興味がある方はぜひ試してみることをおすすめします。 HMR (Hot Module Replacement)アプリケーション実行中にコードが変更された 時、ページ全体をリロードせずに変更されたモジュールのみを動的に置き換える 技術。Webpackなどのバンドラーがファイル変更を監視し、ウェブソケット接続を通じて変更部分だけをブラウザに送信するため、アプリケーションの状態を保持したまま即座に変更が反映される。 ↩Micro.blogから移行
モダンな技術スタックでブログ

カスタムコンポーネントの活用
// src/components/ShopInfo.tsx
interface ShopInfoProps {
name: string;
address: string;
osmAddress: string;
phone: string;
closedDays: string;
website?: string;
}
export function ShopInfo({
name,
address,
osmAddress,
phone,
closedDays,
website,
}: ShopInfoProps) {
// コンポーネントの実装...
}項目 内容 店名 スターバックスコーヒー 学園都市キャンパススクェア店 住所 兵庫県 神戸市西区 学園西町1-4 キャンパススクェア 地図 OpenStreetMap 電話 078-798-7613 定休日 不定休 ウェブサイト https://store.starbucks.co.jp/detail-1718/ まとめ