ステップ・バイ・ステップ:サバイバルホラー世界をゼロから作る
「No, I'm not a Human」 に着想を得たホラーサバイバルゲームを作ります。前提はシンプル:終末が訪れ、外には人間に化けた「訪問者」がいる。あなたは家に一人、毎晩誰かがドアをノックする。のぞき穴から相手が人間か怪物かを見極め、選択をして、14夜を生き延びる。
このチュートリアルを終えれば、Yumina のコア創作スキル —— エントリ、変数、ディレクティブ、コンポーネント、ロアブック —— をしっかり身につけられます。今後どんな世界を作るにせよ、出発点はここです (•̀ᴗ•́)و
ステップ 1:新しい世界を作る
左側ナビの 作成 ボタンをクリックし、空白プロジェクト を選びます。エディタ上部の入力欄に世界名を入力:
- 名前:
The Imposters
エディタの各セクションにまだ不慣れなら、先に 仕組み を読んでから戻ってきてください。
ステップ 2:キャラクター設定エントリを書く
左側ナビの ロアブック をクリックします。
では自分のエントリを作りましょう。プリセット グループにいることを確認し、右上の エントリを追加 をクリックします。
このゲームでは、AI はキャラクターを演じるのではなく、ゲームマスター(GM) として振る舞います —— シーンの語り、すべての NPC の演技、物語の推進を担います。なので最初のエントリでは、AI にその役割と責任を伝えます。

| フィールド | 値 |
|---|---|
| 名前 | ゲームマスター設定 |
| 送信形式 | 指示(AI はこれを守るべきルールとして扱う) |
| タグ | プリセット をクリック |
内容 フィールドに以下を記入します:
あなたは公平で中立なホラーサバイバルゲームのGMです。ゲームは14日間(14夜)続きます。
設定:終末が始まった。街は「訪問者」—— 人間そっくりの存在 —— に埋め尽くされている。プレイヤーは家に一人。毎晩、誰かがドアをノックして助けを求める。プレイヤーはのぞき穴で観察し、ドア越しに会話し、さまざまな方法で来訪者が人間か怪物かを判断し、ドアを開けるかどうかを決めなければならない。
あなたの役割:
- 毎晩、ノックする者の外見と振る舞いを描写する
- 正体を直接明かさず、公平に手がかりを与える
- 昼間はプレイヤーが自由に部屋を探索し、道具を使い、電話をかけられるようにする
- 不気味で張り詰めた雰囲気を保つ
- 各返信の最後に3〜5個の選択肢を提示する(A/B/C/D/E 形式)
各返信は冒頭にフェーズ見出しを付ける:
- 夜:🌑 **第 X 夜**
- 昼:☀️ **第 X 日**いくつかのポイント:
- このエントリは プリセット にあります → 常に AI に送信され、すべての会話で見えます。コア設定はここに置く必要があります
- 送信形式 = 指示 → AI はこれをシステム指示として扱い、キャラクターの台詞とはみなしません
- タグ = プリセット → 整理のため
ステップ 3:開始メッセージを書く
最初のメッセージ セクションに切り替え、挨拶を追加 をクリックします。(ロアブックで role: greeting のエントリを作っても同じ効果です。)

🌑 **第 1 夜**
テレビ画面が砂嵐でちらつく。緊急放送が機械的な声で同じ警告を繰り返している:「……現在確認されている訪問者の特徴:不自然なほど均一で、磁器のように白い歯。住民は警戒し、見知らぬ者にドアを開けないよう勧告します……」
あなたはアパートに一人。こぢんまりとした部屋だ —— バスルーム、リビング、寝室、書斎、キッチン、そして物置。玄関ドアにはのぞき穴。物置には拳銃。書斎には固定電話。冷蔵庫には数日分の食料。
窓の外、通りは無人。少なくとも —— そう見える。
そして、ノックの音。
***コン……コン……コン。***
若い女性の声がドア越しに届く。震えて、涙ぐんでいる:「お願い……入れて……外に何かが私を追ってきてるの……」
**選択肢:**
A. ドアを開けて彼女を入れる
B. ドア越しに話して、いくつか質問する
C. 拒否して立ち去らせる
D. のぞき穴から彼女を注意深く観察する
E. その他(取りたい行動を入力)良い開始メッセージの要点:
- プレイヤーがどこにいて、何が起きているのかをすぐに伝える
- 使える資源と環境を明確に示す
- 決断で締めくくり、すぐに行動を迫る
ステップ 4:ゲーム変数を作る
変数 セクションに切り替え、変数を追加 をクリック。5つの変数を作ります。

1. 生命
| フィールド | 値 |
|---|---|
| ID | player_hp |
| 表示名 | Player HP |
| タイプ | Number |
| デフォルト値 | 3 |
| 最小 | 0 |
| 最大 | 5 |
| ビヘイビアルール | 訪問者に攻撃されたり致命的なミスをしたとき1減らす。蒼白の見知らぬ者を中に入れる、または一人だと認めた場合は直ちにゼロに。0でゲームオーバー。 |
2. 体力
| フィールド | 値 |
|---|---|
| ID | energy_current |
| 表示名 | Energy |
| タイプ | Number |
| デフォルト値 | 3 |
| 最小 | 0 |
| 最大 | 8 |
| ビヘイビアルール | 訪問者の身体検査と発砲はそれぞれ1ポイント消費。のぞき穴観察と会話は無料。昼間に上限まで回復。体力0のときは体力消費行動を実行できない。 |
3. 日数
| フィールド | 値 |
|---|---|
| ID | game_day |
| 表示名 | Game Day |
| タイプ | Number |
| デフォルト値 | 1 |
| 最小 | 1 |
| 最大 | 14 |
| ビヘイビアルール | 昼夜サイクルが1つ完了するごとに1増やす。第14日が終わるとゲームが締めくくられる。 |
4. フェーズ
| フィールド | 値 |
|---|---|
| ID | game_phase |
| 表示名 | Game Phase |
| タイプ | String |
| デフォルト値 | Night |
| ビヘイビアルール | 値は「Night」または「Day」。夜はノックイベントの処理、昼は部屋の自由探索と道具使用。 |
5. 武装状態
| フィールド | 値 |
|---|---|
| ID | player_has_gun |
| 表示名 | Has Gun |
| タイプ | Boolean |
| デフォルト値 | True |
| ビヘイビアルール | プレイヤーは拳銃を1丁持って始める。発砲は体力を1消費するが人間を誤って傷つける可能性がある。発砲後はその結果を描写する。 |
ビヘイビアルールとは?
ビヘイビアルール はコードではありません —— AI 向けに自然言語で書く指示です。AI は返信を生成するときにこれを読み、いつどの変数を更新すべきかを知ります。AI の「カンニングペーパー」だと思ってください φ(>ω<*)
ステップ 5:変数はどう変化するのか
変数を設定したものの、AI はいつそれを変えればいいと分かるのか? —— と思うかもしれません。
朗報:手動で AI に教える必要はありません。 世界に変数がある限り、Yumina エンジンは自動で2つのことをやります:
- ディレクティブ形式を自動で AI に伝える:エンジンは毎ターン、
[variableID: operation value]構文で状態を更新するよう AI にこっそり指示を渡します。あなたは何もしなくて大丈夫。 - あなたのビヘイビアルールを自動で AI に送る:ステップ4で各変数に書いたルールは、毎ターン AI に見えています。AI はそれをもとに、いつ何を更新するか決めます。
例:health 変数のビヘイビアルールに「訪問者に攻撃されたとき、または危険な選択をしたとき減少」と書いたとします。ゲーム中にプレイヤーが攻撃されると、AI は返信の最後に [health: -20] を書きます。エンジンはこれを検出し、自動で生命を100から80に減らします。
つまり、ビヘイビアルールを明確に書くほど、AI の働きは良くなります。 ステップ4で書いたルールを見直し、各変数が「いつ・どう変わるか」を明確に示しているか確認しましょう。
AIの出力でディレクティブはどう見える?
AI の返信の最後に、こんなものが見えます:
[health: -20]
[energy: -15]これがディレクティブです。エンジンが自動で抽出・適用し、プレイヤーが見る返信には現れません。
もっと多くのディレクティブ構文
+(加算)と -(減算)のほか、set(特定の値に設定)、toggle(真偽値の反転)などもあります。詳しくは → AI ディレクティブとマクロ
ステップ 6:見栄えを良くする —— AI 生成インターフェース
ここまでで世界は遊べる状態です。でもプレイヤーが見るのはプレーンテキストばかり —— 雰囲気も没入感もありません。本物のホラーゲームらしいインターフェースを作りましょう。
「コードを書く?」いいえ —— AI にやらせます ( ̄▽ ̄)ノ
方法その1:Yumina 内蔵の Studio AI(推奨)
- エディタ上部の Studioを開く をクリック
- AIアシスタント パネルを開く
- 以下を送信(そのままコピーで OK):
ルートコンポーネント(index.tsx)を終末ホラーサバイバル風のUIに書き直して。
《No, I'm not a Human》のスタイルを参考に。
外側は `<Chat renderBubble={(msg) => ...} />` のまま —— 入力欄、
ストリーミングカーソル、スワイプはプラットフォームに任せ、こちらはバブルのスタイルだけ引き受ける。
必要な効果:
1. フェーズ見出し:
- AIの返信に「🌑 **第 X 夜**」が含まれていたら、抽出してCRTモニター風の見出しバーに描画
(暗緑色に光る文字、走査線エフェクト、わずかな明滅)
- 「☀️ **第 X 日**」が含まれていたら、暖色系の見出しバーに描画(琥珀色の文字)
- 見出しを本文から取り除き、別途表示する
2. ノック効果:
- 返信に ***三つのアスタリスクで囲んだ太字斜体*** が含まれていたら、抽出して
ノックアニメーションに描画 —— 赤い大きな文字に揺れエフェクト
3. 下部HUDステータスバー:
- 等幅フォント、暗緑色の背景
- 表示:⚡ 体力(energy_current 変数)、❤️ 生命(player_hp 変数)、
🔫/🚫 武装状態(player_has_gun 変数)
- コンパクトな一行表示
4. 叙述テキスト領域:
- 暗い背景(深い緑黒)、縁にかすかな発光
- 薄緑色の文字、読みやすいよう広めの行間
- renderMarkdown で描画
5. 選択肢ボタン:
- AIの返信に「選択肢:」または「**あなたの選択:**」が含まれていたら、選択肢
(A. B. C. D. E.)を抽出してクリック可能なボタンに描画
- クリックで対応する選択肢を自動送信
- 暗緑色のトーン、ホバーで明るく
6. 全体の雰囲気:黒緑のCRTモニター美学、低彩度、重苦しい終末感
私の変数:
- player_hp —— 生命、number、0–5
- energy_current —— 体力、number、0–8
- game_day —— 現在の日数、number、1–14
- game_phase —— "Night" または "Day"
- player_has_gun —— 武装しているか、true/false- AI がコードを生成し、承認カードを表示します;キャンバス パネルでライブプレビュー
- 満足? 承認 をクリック。直したい? そのまま会話を続けて ——「ノック効果をもっと派手に」とか「選択肢ボタンが散らばりすぎ」とか


これだけ —— かっこいいフロントエンドが、あっさり完成!
方法その2:外部 AI を使う(Claude、ChatGPT など)
他の AI に慣れているなら、それでも大丈夫。上の効果説明に、次の Yumina 技術情報を添えて送ってください:
Yumina 技術情報(コードを書くときは以下のルールに従ってください):
- ルートコンポーネント:`export default function MyWorld() { return <Chat renderBubble={(msg) => ...} /> }` をエクスポート
- `<Chat />` はプラットフォーム提供のチャット構成要素 —— 入力欄、メッセージ
リスト、ストリーミングカーソルを担当;こちらは renderBubble で各バブルだけをカスタマイズ
- renderBubble の中で、msg オブジェクトは次を提供:`contentHtml`(事前描画済みHTML)、`rawContent`
(生テキスト)、`role`("user" / "assistant")、`messageIndex`、`isStreaming`、
`renderMarkdown(text)`(markdown を整形済みHTMLに変換)
- useYumina() で変数を取得、例:useYumina().variables.player_hp
- useYumina().sendMessage(text) でプレイヤーとしてメッセージを送信(クリック選択肢用)
- 組み込みの Icons ライブラリ(import 不要)、例:Icons.Heart、Icons.Zap
- Tailwind CSS と React hooks をサポート
- useEffect + document.createElement("style") でアニメーションを注入
- React、Chat、useYumina、Icons はサンドボックスで全てグローバル利用可能 —— import 不要コードを受け取ったら:
- エディタに戻る → カスタムUI セクション →
index.tsxを開く - コードを貼り付ける(デフォルトの
return <Chat />を置き換える) - 下部に コンパイル: OK と出れば完成
コードを理解する必要はありません
コードが何をしているか理解する必要はありません。貼り付けた後に下部が コンパイル: OK になっていれば、正常に動いている証拠です。エラーが出たら、エラーメッセージをそのまま AI に送って直してもらいましょう ∠( ᐛ 」∠)_
結果が思い通りでないときは?
AI に直接言いましょう:「ヘルスバーが細すぎる、太さを倍に」「背景を真っ黒に」「明滅エフェクトを追加」。数回のやり取りで思い描いた形になります。
ステップ 7:ロアブックエントリを書く
これまでのエントリは プリセット グループ —— 常に送信されます。でも一部の情報は、関連するときだけ使えれば十分 —— それが チャット履歴 グループの役割です。
ロアブック に戻り、左側の チャット履歴 グループを展開して、そのグループ下で エントリを追加 をクリックし、キーワードトリガーのエントリをいくつか作ります:
1. ノックのルール
| フィールド | 値 |
|---|---|
| 名前 | ノックイベント |
| 送信形式 | 指示 |
| キーワード | ドア、ノック、開ける、叩く |
ノックイベントのルール:
- 毎晩2〜3人の訪問者が、一人ずつ現れる
- プレイヤーの選択肢:のぞき穴で観察(無料)、ドア越しに会話(無料)、身体検査を要求(体力消費)、開ける/拒否
- 人間を入れる = 助けになるかも | 訪問者を入れる = 危険
- ノックの場面を描くときはサスペンスを保つ —— 正体を直接明かさない2. のぞき穴観察
| フィールド | 値 |
|---|---|
| 名前 | のぞき穴観察 |
| 送信形式 | 指示 |
| キーワード | のぞき穴、覗く、観察、見る |
のぞき穴観察のルール:
- 来訪者の頭部と上半身しか見えない
- 描写の重点:表情、歯、目、肌の質感
- 訪問者の変装には微妙な綻びがある(不自然に均一な歯、異常な瞳孔、奇妙な肌の質感)
- 人間には正常な欠点がある(虫歯、くま、傷跡)
- 正体を直接明かさない —— 見えたものだけを描写する3. 部屋探索
| フィールド | 値 |
|---|---|
| 名前 | 部屋探索 |
| 送信形式 | 指示 |
| キーワード | 探す、調べる、漁る、探索、部屋 |
部屋探索のルール(昼間のみ):
- 物置:拳銃を見つけられる
- キッチン:食料補給、体力を少し回復できる
- 書斎:電話、電話で情報を得られる
- 環境の細部を描写して不安感を演出するキーワードトリガーはどう動く?
AI の各返信の前に、エンジンは最近のメッセージをスキャンします。一致するキーワードが現れたら → 対応するエントリが一時的に AI に送られます。誰も言及しなければ → AI には見えず、token 予算を無駄にしません。効率的で正確 (≧▽≦)
スキャン深度は ロアブック の エントリ設定 にある スキャン深度 です —— デフォルト2、4くらいに上げるのがおすすめ。
ステップ 8:テストする
コア部分は完成です。テストしてみましょう!
エディタ上部の 保存 をクリックし、左側ナビ下部の金色の プレイ ボタンを押します。エディタはそのままセッションに連れて行きます —— この世界の保存済みセッションがあれば再利用、なければ自動で新規作成。以下を確認:
| 確認項目 | 確かめ方 | 動かないとき |
|---|---|---|
| 開始メッセージが出る | 入室時に最初のメッセージが自動表示 | 最初のメッセージ セクションに挨拶が書かれているか確認 |
| カスタムUIが効く | メッセージに CRT 風のフェーズ見出しと HUD がある | index.tsx に renderBubble コードがあり コンパイル 状態が OK か確認 |
| ディレクティブが効く | 操作後に変数が変化(HUD 数値が更新) | 各変数のビヘイビアルールが明確に書けているか確認 |
| ロアブックが発火 | 「のぞき穴」と言うと AI がルールに従う | キーワードの綴りと スキャン深度 設定を確認 |
ステップ 9:概要情報を入力する
テストが通ったら、概要 に切り替えて公開前情報を入力:
- カバー画像 をアップロード(ホラーの雰囲気が伝わるもの)
- プレイヤーが何を遊ぶのか分かる 説明 を書く
- タグ を追加:
ホラー、サバイバル、ミステリー、インタラクティブフィクション - 言語 を設定:世界の言語を選ぶ(例:
日本語) - 上部の 保存 をクリック

ステップ 10:公開する
- エディタ上部バーの 公開 ボタン(保存 のすぐ隣)をクリック
- 公開ダイアログで コンテンツレーティング(一般向け または センシティブ)、可視性、他者の編集可否を設定
- 利用規約に同意して公開をクリック
完成!あなたの世界が公開されました ヽ(✿゚▽゚)ノ
学んだこと
| 概念 | やったこと |
|---|---|
| エントリ | システム設定と開始メッセージを書いた —— AI の振る舞いの土台 |
| 変数 | HP、体力、日数カウンターを作った —— ゲーム状態の骨格 |
| ディレクティブ | エンジンが自動で AI に教える;あなたはビヘイビアルールを明確に書くだけ |
| カスタムUI | AI にステータスパネルを生成させた —— 自分でコードは書かない |
| ロアブック | キーワードトリガーのルールエントリ —— 必要に応じて呼び出す知識ベース |
この5つが協調して、完全なインタラクティブ世界になります。
まだできること
このチュートリアルで使ったのは最も基本的な機能だけ。Yumina にはもっとできることがあります:
- ルールエンジン —— HP が0になったら自動で死亡エンディングを発火。AI の記憶に頼らない
- カスタムUIガイド —— メッセージを吹き出し、ビジュアルノベルのシーン、戦闘ログに変える
- オーディオ —— BGM と効果音を追加、地下室に入ると不気味な音楽に自動切替
- 条件付きエントリ —— 変数値に応じてエントリを起動、終盤の物語の種明かしなど
各システムを深く知りたいなら、ルールエンジン、カスタムUI、変数 のリファレンスページに、複雑な状態管理の実例があります。
yumina.io で 「No, I'm not a Human」 を検索して完全版を体験 —— あなたの世界がどんなものになり得るか、その手応えを。それから戻って創作を続けよう ᕕ( ᐛ )ᕗ
