5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Jevで動く1,000人の街を作って、仮想住民にインタビューできるようにしてみた

5
Last updated at Posted at 2026-10-02

はじめに

新しい商品の価格を上げたり下げたりしたとき、買い手の反応はどう変わるのか。
市場調査に進む前に、こうした仮説を手軽に試したいと考えて「Japan Scale」というWebサービスを作りました。

1,000人の架空の住民が暮らす街で、価格や認知率を変えて反応を眺めたり、住民に話を聞いたりできます。
この記事では、サービスの目的と使い方を紹介したあと、判断用のAI「Jev」を街の行動とインタビューの2か所に使った点を説明します。
中心は、Jevをどこにどう組み込んだかです。Jev自体の仕組みや性能の解説ではありません。

Japan Scaleとは

Japan Scaleは、1,000人の架空の住民に商品企画の仮説をぶつけるシミュレーターです。
市場調査の代わりではなく、市場調査の前に問いを具体化するための道具です。

現在は検証版として、無償で公開しています。
ただし、Jev方式で使うAIの利用料金は、利用者ご自身のAPI契約に基づいて発生します。
今後はこの検証版をもとに住民データの量と精度を高め、企業向けのサービスとして提供する予定です。

Japan Scaleの公開ページ。キャッチコピーと、仮想住民が歩く街の画面が並んでいる

できること

  • 商品の価格と認知率を変え、住民ごとの反応(未認知、認知、興味、購入)を見比べる
  • 地域、性別、職業、年齢、年収で住民を探し、1〜4人にテキストで質問する
  • あまり意味のない機能ですが…、全国8地域の架空の街(場所は計692か所)で、住民の時間割や動きを眺める

住民台帳の画面。地域別の人数と、氏名・性別・職業区分・年齢・年収・価格感度・新技術への関心を並べた住民一覧が表示されている

使い方は3ステップ

  1. 試したい条件を置きます。商品名、価格、認知率を設定します。
  2. 反応と住民を眺めます。反応の違いを確認し、気になる属性の住民を探します。
  3. 次の問いを持ち帰ります。インタビューや比較から、実際の調査で確かめる仮説を整理します。

ログインはGoogleアカウント、または確認済みのメールアドレスで行います。

Japan Scaleは、売上や市場規模を予測するツールではありません。

  • 住民の氏名、属性、街の設定は、すべて架空のデータです。
  • 反応は固定ルールによる試行です。実在の消費者調査ではありません。
  • 統計的な代表性や予測精度は検証していません。
  • インタビューで表示される確信度は、正解率や購入確率を示す値ではありません。

既定はルール方式、Jevは選んだときだけ

Japan Scaleには2つの動かし方があります。
画面の表示とは次のように対応します。本文では、左側を「ルール方式」、右側を「Jev方式」と呼びます。

ルール方式(既定) Jev方式
街の画面の表示 JSON時間割 Jevが行動を判断
インタビュー画面の表示 ルールベース Jev&LLM
街の行動 JSONに保存した時間割どおり Jevが行き先を判断
インタビューの方針 固定ルールで決まる Jevが方針を判断
APIキー 不要 利用者自身のキーが必要
外部AIの呼び出し なし あり(明示的に選んだときだけ)

APIキーがなくても、街のシミュレーション、住民台帳、インタビューはルール方式で動きます。
Jevを使った実際の動きを見たい場合は、AI接続設定でTypeSafe(Jev)のAPIキーと、Azure OpenAIまたはOpenAIのAPIキーを登録してください。
登録後に方式を「Jev&LLM」へ切り替えると、街の行動判断とインタビューの方針判定にJevが使われます。

AI接続設定の画面。共通の方式、LLMプロバイダー、モデル名、Azureの接続先、TypeSafe(Jev)・Azure OpenAI・OpenAIの各APIキーの入力欄が並んでいる

登録したキーは暗号化して保存し、画面に再表示することはありません。

JevはTypeSafeが提供するSystem Oneモデルの1つで、選択肢から判断を選び、確信度を返す外部APIです。
詳しくはTypeSafeの公式ドキュメントを参照してください。
Japan Scaleは、この「選択肢から選ぶ」使い方に絞って呼んでいます。

Jevを使った2か所

街の住民の行動判断

1つ目は、街を歩く住民の行動です。
ルール方式では、住民はJSONの時間割のとおりに動きます。
Jev方式では、決まった動きではなく、その都度、次の行き先をJevが選びます。

街のシミュレーション画面。関東の街を上空から表示し、右側に選んだ住民の属性と商品の投入欄、下に行動方式と認知・興味・購入の集計が並んでいる

街の画面で行動方式を切り替えます。「JSON時間割」と「Jevが行動を判断」のどちらかです。
Jevを選べるのは、必要なキーがそろっている場合だけです。

仕組みは次のとおりです。

  • 判断の対象は、表示中の地域の住民です。街の時間で約1時間ごとに、判断をやり直します。
  • 判断材料は、曜日、時刻、住民の属性、現在の行き先、時間割です。
  • 選択肢は、その住民の自宅、職場、学校、時間割上の場所、よく行く場所のうち、その時刻に営業中のものです。
  • 時間割は参考であり、必須ではありません。
  • Jevには、用事、食事、娯楽、仕事や学校、帰宅などから、もっともらしいものを選ぶよう指示しています。
  • 偏った推定を避ける指示も入れています。性別だけで好みや行動を決めつけない、年齢だけで病気や通院を推定しない、というものです。

Workerが送る指示の一部を、ソースの英文のまま抜粋します。

worker/behavior.js
instructions: `Choose the next destination for state.residents.${key} only. …略…
The schedule is context, not mandatory: choose plausible errands, food, recreation, work/study or home.
Only listed open destinations are valid. …略…
Do not infer preferences or restrict activities solely from gender.
Do not assume illness or a medical need solely from age.`,

判断が切れた住民は、1回のリクエストに24人ずつまとめ、2本を並行して処理します。
表示地域の人数は、最大で関東の345人ほどです。

Jevの行き先がまだ決まっていない住民は、時間割で動きます。
再判断を待つ間は、前回の行き先が営業中であれば、それを使い続けます。
接続に失敗したときは、画面に通知して時間割の方式へ戻ります。

Jevの回答は、そのまま信用せずに検証しています。
候補にない行き先や、0〜1の範囲外の確信度が返ってきた場合は、エラーとして扱い、反映しません。

インタビューで答える方針の判定

2つ目は、インタビューです。
住民に質問すると、住民は一人称で答えます。この回答の方針を、Jevが決めます。

インタビュールームの画面。左に招待した住民3人のカード、右に会話欄と方式の選択、質問の入力欄がある

方針は5種類です。

worker/api.js
const criteria = {
  positive: '前向きに受け止め、関心や期待を話す',
  cautious: '条件や懸念を確認し、慎重に答える',
  negative: '自分に合わない理由や困りごとを率直に話す',
  neutral: '日常の経験や考えを中立的に説明する',
  uncertain: '情報不足のため、分からない点や確認したい点を話す',
};

Jevには、住民の属性と商品、街で計算した反応、これまでの発言を渡します。
そのうえで、5つの方針から1つの選択と、0〜1の確信度を返してもらいます。
確信度が0.35未満のときは、方針を「情報不足」に倒します。

指示には、街で計算した決定的な反応(未認知、認知、興味、購入)と、過去の発言を尊重するよう入れています。

役割は分担しています。

  • 方針の判断はJev
  • 回答の文章化はLLM(Azure OpenAIまたはOpenAI)

Jevが選んだ方針と反応をLLMに渡し、LLMがその方針に沿った一人称の回答を書きます。
画面には、方式、方針、確信度、マップの判定を表示します。
確信度は、正解率や購入確率ではありません。

インタビューでJevやLLMへの接続が失敗したときは、エラーを表示します。自動でルール方式の回答に切り替わることはありません。

全体のアーキテクチャ

全体は、ブラウザ、Cloudflare上のWorker、外部のAIの3層で構成しています。

各層の役割は次のとおりです。

  • ブラウザは、街の描画と操作を担当します。住民の動きや反応の集計は、ブラウザ側で計算して表示します。
  • Workerは、画面の配信とAPIを1つにまとめています。住民データの読み出し、利用者の設定、行動判断、インタビューを受け持ちます。
  • D1には、住民1,000人と街の場所のデータ、利用者ごとの設定を保存しています。
  • ログインはFirebase Authenticationに任せています。データの読み出し、設定、行動判断、インタビューのAPIは、ログイン済みの利用者からの要求だけを受け付けます。
  • 外部のAIは、Jev方式を選んだときだけWorkerから呼び出します。ルール方式では、外部のAIへの呼び出しは発生しません。
  • 判断はJev、文章はLLMという分担にしています。街の行動判断はJevだけで完結し、インタビューではJevの判断をもとにLLMが回答文を作ります。
  • マップの反応計算は、ブラウザとWorkerで同じ関数を使い、画面とインタビューで結果がずれないようにしています。

まとめ

Japan Scaleは、1,000人の架空の住民で、商品企画の仮説を市場調査の前に試すサービスです。
反応は固定ルールの試行であり、売上予測ではありません。

Jevは2か所に使っています。

  • 街の住民の行動判断。時間割を参考に、営業中の候補から次の行き先を選びます。
  • インタビューでの回答方針の判定。5つの方針から1つを選び、確信度を返します。

どちらも、利用者が自分のキーを登録して「Jev&LLM」を選んだときだけ動きます。キーがなくても、街のシミュレーション、住民台帳、インタビューはルール方式で試せます。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?