ministaとは?
minista(ミニスタ)は、ReactのJSX・TSXで静的HTMLを生成する、Viteベースのスタティックサイトジェネレーター(SSG)です。
※名前はmini static site generatorの略
ページや共通パーツをReactコンポーネントとして記述し、通常のHTML・CSS・JavaScriptとして出力します。
Table of Contents
Reactで静的サイトを作る
Reactコンポーネントをsrc/pages/置き、default exportします。JSX・TSXの式やpropsを使って、ページを組み立てられます。
export default function Page() {
return (
<main>
<h1>Hello, minista!</h1>
<p>This is the first static page.</p>
</main>
)
}ビルドすると、次のようなHTMLがdist/index.htmlへ生成されます。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<main>
<h1>Hello, minista!</h1>
<p>This is the first static page.</p>
</main>
</body>
</html>言語やタイトル、共通のヘッダーなどはレイアウトで設定します。ページはMarkdown・MDXでも記述できます。
ViteをベースにしたSSG
開発サーバーとビルドにはViteを利用します。静的HTMLの出力にはpluginSsg()が必須です。最小構成は、このプラグインを追加した設定と1つのページです。
import { defineConfig, pluginSsg } from "minista"
export default defineConfig({
plugins: [pluginSsg()],
})pluginSsg()にはページ生成、Markdown・MDXの変換、参照されたCSS・JavaScript・画像の出力が含まれます。画像最適化や検索などの高度な機能は、必要になった段階でプラグインを追加します。
デフォルトで静的
ページの内容はビルド時にHTMLへ変換されます。静的なコンポーネントを表示するために、ブラウザへReactのランタイムを配信する必要はありません。
公開するのはdist/のファイルです。公開先でministaを起動し続ける必要はなく、静的ファイルを配信できる環境へ配置できます。
必要なときだけインタラクティブ
部分的にReactの状態やイベントを使うこともできます。pluginIsland()を追加してclient:*を指定。
import Counter from "../components/counter"
export default function Page() {
return <Counter client:load />
}読み込み時、待機時、画面内へ入ったときなど、動作を始める条件を選べます。設定とコンポーネントの作り方はIslandで紹介します。
主な機能
- JSX・TSXによるページとコンポーネント
- ファイルベースルーティングとAPIによる静的ページ生成
- Markdown・MDXと共通レイアウト
- CSS・画像のバンドル
- JavaScript・TypeScriptのビルド
- 画像最適化、SVG最適化、SVGスプライト
- Islandと静的サイト内検索
- HTML・CSS・JavaScriptの整形と納品用アーカイブの生成
導入から機能の追加までをガイドで説明します。用途の判断はministaを選ぶ理由、設定値やAPIは設定リファレンスと各プラグインのページを参照してください。