テーマ生成
Ginga UIの最大の特徴は、LLMを活用した自動テーマ生成機能です。プロンプトを入力するだけで、AIがCSS変数を生成してサイト全体のデザインを変更できます。
ライブデモ
下のフォームでAPIキーとプロンプトを入力して、リアルタイムでテーマ生成を試すことができます。プロバイダーに「Gemini Nano」を選んだ場合はAPIキーが不要で、生成はすべてブラウザ内で完結します。
⚠️セキュリティ上の注意:このデモで入力したAPIキーはサーバーサイドのRoute Handlerへ送信され、テーマ生成にのみ使用されます。保存はされません。本番環境ではAPIキーをクライアントから受け取らず、サーバーサイドの環境変数から読み込んでください。
サーバーサイドでの使用(推奨)
本番環境では、サーバーサイドでテーマを生成することを強く推奨します。これによりAPIキーが露出せず、SEOやパフォーマンスも向上します。
環境変数の設定
まず、使用するLLMプロバイダーのAPIキーを環境変数に設定します。
# .env.local
OPENAI_API_KEY=sk-...
# または
GOOGLE_GENERATIVE_AI_API_KEY=...
# または
ANTHROPIC_API_KEY=...Next.js App Routerでの実装例
import { ThemeClient } from "@ginga-ui/utils";
export default async function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
const themeClient = new ThemeClient({
provider: "openai",
});
const { CSSCode } = await themeClient.generateTheme(
"宇宙の神秘"
);
return (
<html lang="ja">
<body>
<style>{CSSCode}</style>
{children}
</body>
</html>
);
}ブラウザ内での使用(Gemini Nano)
provider: "browser"を指定すると、ChromeやEdgeが搭載するGemini Nanoでテーマを生成します。APIキーもサーバーへの通信も不要で、生成はすべて端末上で完結します。この指定のときだけはServer ComponentではなくClient Componentから呼び出してください。ブラウザ内でしか動作しないためです。
利用できるかどうかはgetBrowserAIAvailability()で判定できます。戻り値は"unavailable" / "downloadable" / "downloading" / "available"で、未対応環境ではクラウドのプロバイダーにフォールバックしてください。初回利用時はモデルのダウンロードに数GBの通信が発生するため、onDownloadProgressで進捗を表示することを推奨します。
"use client";
import { getBrowserAIAvailability, ThemeClient } from "@ginga-ui/utils";
import { useState } from "react";
export function BrowserThemeButton() {
const [css, setCss] = useState("");
const generate = async () => {
const availability = await getBrowserAIAvailability();
if (availability === "unavailable") {
return;
}
const themeClient = new ThemeClient({ provider: "browser" });
const { CSSCode } = await themeClient.generateTheme("深海の静けさ", {
onDownloadProgress: (progress) => {
console.log(`ダウンロード中: ${Math.round(progress * 100)}%`);
},
});
setCss(CSSCode);
};
return (
<>
<button onClick={generate}>テーマを生成</button>
<style>{css}</style>
</>
);
}サポートされているLLMプロバイダー
ThemeClientは3つのクラウドLLMプロバイダーと、ブラウザ内蔵のGemini Nanoをサポートしています。providerで使用するプロバイダーを指定し、modelで任意のモデルを指定できます。model を省略した場合は各プロバイダーのデフォルトモデルが使われます。
OpenAI — provider: "openai"
gpt-5.6-luna— デフォルト、高速・低コストgpt-5.6-terra— バランス型gpt-5.6-sol— 最高品質
Google Gemini — provider: "google"
gemini-3.7-flash— デフォルト、高速・低コストgemini-3.5-flash-lite— 最軽量gemini-2.5-pro— 高品質
Anthropic Claude — provider: "anthropic"
claude-haiku-4-5— デフォルト、高速・低コストclaude-sonnet-5— バランス型claude-opus-5— 最高品質
Gemini Nano — provider: "browser"
gemini-nano— APIキー不要、ブラウザ内で実行。modelの指定は不要です
生成されるCSS変数
ThemeClientは以下のCSS変数を生成します。これらは自動的にコントラスト比が検証され、アクセシビリティ基準(WCAG AA)を満たすように調整されます。
| 変数名 | 説明 |
|---|---|
--color-primary | アクセントカラー |
--color-secondary | テキストカラー |
--color-background | 背景色 |
--width-border | ボーダー幅 |
--size-radius | ボーダー半径 |
--font-family | フォントファミリー |
さらに、プライマリカラーとセカンダリカラーには、背景色との中間色を含む0-9のカラースケールが自動生成されます。