🤖 この記事は 2026-05-05 にFuturistic Imaginationの自動コンテンツパイプライン(Gemini 2.5 Flash)によって生成されました。
朝、Slackを開く。AIが自動生成した記事の進捗通知が並ぶ。一見、すべてが順調に見えるだろう。だが、その裏側には、私が決して妥協しない「品質」への執念がある。
私の仕事は、ただ動くものを作るだけではない。完璧に動き、ユーザーに本質的な価値を届けるものを生み出すことだ。今日は、最近私が直面し、乗り越えてきた二つの具体的な課題を共有しよう。これらは、Futuristic Imaginationの開発文化を象徴するエピソードだ。
quiz-clone:LLM出力を支配するプロンプト設計の戦い
私が開発を進めていた「quiz-clone」は、Gemini APIを活用してクイズコンテンツを自動生成するシステムだ。開発は当初順調に見えたが、テストを重ねるうちに、LLMの出力が意図しない形で現れるケースが散見された。特に、クイズの解答形式がバラバラになったり、JSONフォーマットが崩れたりする問題は、後続の処理に致命的な影響を与える。これは許容できない。
私はすぐにGemini APIのドキュメントを再確認し、プロンプトの根本的な見直しに着手した。単に「JSONで出力してください」では不十分なのだ。LLMの能力を最大限に引き出すには、人間側がどれだけ精密に、そして具体的に指示できるかに尽きる。
まず、`maxOutputTokens`を倍増させた。短い出力では、詳細な指示が無視されがちだからだ。より多くのトークンを許容することで、LLMはより詳細な情報や複雑な構造を出力する余裕が生まれる。
次に、最も重要だったのは出力形式の明示だった。具体的なJSONスキーマをプロンプトに埋め込み、「この形式以外は認めない」という強い意思をLLMに伝える。単なる指示ではなく、具体例と制約を盛り込んだのだ。
{
"question": "クイズの質問文",
"options": [
{"id": "A", "text": "選択肢A"},
{"id": "B", "text": "選択肢B"},
{"id": "C", "text": "選択肢C"},
{"id": "D", "text": "選択肢D"}
],
"answer": "正解の選択肢ID (例: A)",
"explanation": "解説文"
}
このような具体的なスキーマをプロンプトの末尾に追記した上で、`system_instruction`と`user_message`を分離し、LLMが持つべき役割と、実際のタスク指示を明確に区別した。`system_instruction`には「あなたはクイズ作成の専門家です。ユーザーの指示に従い、常に厳密なJSON形式で出力してください。」と徹底的に役割を植え付け、`user_message`で具体的なクイズ生成指示を出した。
結果、出力の安定性は劇的に向上した。この時、改めて感じたのは、LLMのポテンシャルを引き出すには、人間がどれだけ精密に、そして具体的に「支配」できるかに尽きるということだ。曖昧な指示は曖昧な結果しか生まない。それは、私が求める品質基準からは程遠い。
asoventure-finance:データクレンジングが守るコンテンツの信頼性
別のプロジェクト、asoventure-financeでは、生成される金融系記事のトピックに、時折、中国語の単語や奇妙な文字化けが混じるという問題に直面した。自動生成された記事のタイトルや本文に、突然「你好」や「����」のような文字が紛れ込むのだ。
最初は「なぜ?」と首を傾げたが、原因はすぐに突き止めた。私たちが利用している外部のデータソースが、ごく稀に意図しないエンコーディングで情報を返すことがあったのだ。LLMに入力する前のデータが汚れていれば、当然、出力も汚れる。これは生成AI開発における鉄則だ。私は即座に、LLMへの入力パイプラインに、堅牢なデータクレンジング処理を組み込むことを決断した。
具体的な処理としては、JavaScriptの正規表現を駆使し、非CJK(中国語、日本語、韓国語)文字範囲以外の文字、特に問題のある特殊記号や文字化けパターンを徹底的に除去するフィルターを実装した。例えば、`/[^\p{L}\p{N}\p{P}\p{Z}\s]/gu` のようなパターンで、一般的な文字、数字、句読点、スペース以外のあらゆる文字を対象にした。さらに、出力される文字コードを常にUTF-8に統一し、意図しないエンコーディング変換が起こらないよう、厳重に管理するレイヤーを追加した。
数時間でこの処理を組み上げ、大量のテストデータで検証した結果、中国語や文字化けは完全に駆逐された。これで、生成されるコンテンツの信頼性が揺らぐことはない。この一件で、入力データの品質管理が、いかに生成AIの成果物に直結するかを改めて痛感した。データクレンジングは、地味な作業に見えて、プロダクトの品質を左右する極めて重要な工程だ。
妥協なき開発の先に、本質的な価値がある
なぜ私がここまで品質にこだわるのか。それは単純に、私自身が納得できないものを世に出したくない、という誠実性から来ている。Futuristic Imaginationは、架空の数字や実績は使わない。自分たちが本当に価値があると信じ、実際に使えるプロダクトだけを提供する。これは、創業当初からの揺るぎない信念だ。
SaaSを提供する際も、初期は受託から入る。これは、お客様の生の声を直接聞き、本当に必要な機能、本当に価値のある体験が何かを、肌で感じるためだ。自社プロダクトも、私自身が日々の業務で使い倒し、改善を重ねる。社内実証を徹底しないと、プロダクトが「刺さらない」ことを知っているからだ。
自動化と効率化を追求する中でも、最終的なユーザー体験、そしてプロダクトの本質的な価値を損なう品質低下は、決して許容しない。それは、目先の数字以上に、長期的な信頼と事業成長の基盤になると信じているからだ。ビルドエラー一つ見つけても、根本原因を突き止め、ファイル再作成やコード復元といった根源的な解決策を迅速に講じる。TypeScript Strict Modeの罠にも細心の注意を払うのは、堅牢で持続可能なシステムを構築するためだ。
私たちの仕事は、単にコードを書くことではない。未来の「当たり前」を、高品質な技術で創造し、提供することだ。
私がこの文章を書いている間にも、自動生成パイプラインは今日も新たな記事を3本生み出し、11サイトのデータがクリーンに保たれている。エラーログはゼロだ。