【第4回 Agentic AI Hackathon with Google Cloud】English Visualizer の紹介
はじめに
個人開発で英語学習アプリを作っている際、最も頭を悩ませられるのが「学習用イメージの素材集め」です。
フリー素材で探すと画風がバラバラになり、統一感が損なわれてしまいます。かといって、全てのイラストを依頼するのは個人開発では予算的に不可能です。
そこで、「CSVで英文を流し込んだら、統一された画風でイラストを全自動生成してくれるツール」 を自作しました。
今回は、Google Gemini 活用して開発した English Visualizer の技術スタックと工夫した点を紹介します。
English Visualizer とは?
English Visualizer は、リスト化された英文に対し、指定した画風(スタイル)で挿絵をバッチ生成する Web アプリケーションです。
主な特徴は以下の3点です。
- 一貫性のあるスタイル維持: プロンプトに共通の「スタイル記述(例:教材用マンガ風、水彩画風)」を埋め込むことで、生成される全画像のトーンを統一します。
- ブラウザ完結のバッチ処理: IDと英文の CSV を読み込ませるだけで、バックグラウンドで次々と画像を生成します。
- ローカルファースト: 生成された画像データはブラウザの IndexedDB に保存されます。サーバー代をかけず、プライバシーも守られる設計です。
技術スタック
- Frontend: React 19, TypeScript, Vite
- UI Framework: Tailwind CSS
-
AI Model: Google Gemini (
gemini-2.5-flash-image) - Storage: IndexedDB (dexie.js などのラッパーは使わず、軽量な独自ラッパーを実装)
- Export: JSZip (ブラウザ内で ZIP 圧縮してダウンロード)
開発のポイント
1. Gemini 2.5 Flash Image による高速生成
画像生成モデルには、Google の gemini-2.5-flash-image を採用しました。
以前のモデルや他社モデルと比較して、以下の点でこのツールに最適でした。
- 生成速度: バッチ処理で数百枚を生成するため、1枚あたりの生成速度が重要です。Flash モデルは非常に高速です。
- プロンプトへの忠実性: 「文字を含めないで(negative prompt)」や「教材風のスタイルで」という指示に対し、比較的素直に従ってくれます。
コード上では、ユーザーが入力した英文とスタイル設定を組み合わせて、以下のようなプロンプトを動的に構築しています。
// services/geminiService.ts (抜粋)
const contents = {
parts: [
{
text: `Create an image for the English sentence: "${text}".
Style: ${styleGuidance}.
Ensure the tone and manner matches the described style.
Do not include any text, words, or letters in the image...`
}
]
};
2. IndexedDB を活用した永続化
生成された画像は Base64 形式などで受け取りますが、大量の画像を React の State だけで管理するとメモリが溢れてしまいます。また、生成には時間がかかるため「途中でブラウザを閉じても再開できる」ことが必須要件でした。
そこで、ブラウザ標準の IndexedDB を利用し、生成されたそばからハードディスク(ブラウザ領域)に保存する仕様にしました。これにより、数千枚規模のデータでもブラウザがクラッシュすることなく、スムーズな無限スクロールを実現しています。
3. データのポータビリティ(バックアップと ZIP 出力)
Web アプリケーションですが、データはユーザーの手元にあるべきという思想で設計しました。
-
ZIP エクスポート:
JSZipを使い、生成された画像をID.pngというファイル名で一括ダウンロードできます。これにより、Anki デッキや自作アプリへの組み込みが容易になります。 - 独自バックアップ (.evb): 作業状態そのものを JSON ベースで書き出し、別の PC で復元できる機能を実装しました。
まとめ
AI の進化により、英語学習アプリの開発者が直面していた「素材作成の壁」は劇的に低くなりました。
特に gemini-2.5-flash のような高速・安価(または無料枠あり)なモデルの登場は、EdTech 分野での個人開発を大きく加速させると感じています。
もし興味があれば、GitHub でリポジトリを公開していますので覗いてみてください。
Discussion