リリース概要

項目内容
バージョン1.1.0 (Build 3)
リリース予定日2026年6月初頭
目的毎日続けたくなる「ドーパミン分泌型」体験への進化
D1リテンション目標35% → 50%(+30% 以上)
D7リテンション目標12% → 25%(+50% 以上)
DAU目標50 → 150
必要OSiOS 18.0+(既存と同じ)

KPI 設計

指標v1.0 基準値v1.1 当初目標v1.1.0 修正版(評価反映後)
D1リテンション35%50%55%(Near Miss効果で再挑戦率向上見込み)
D7リテンション12%25%30%(Variable Surprise で慣れ防止)
平均セッション数/日1.22.53.0
DAU50150150(変更なし)
Daily Challenge参加率新規DAUの 70% 以上新規DAUの 70%(変更なし)
「あと1ラウンドだった」モーメント比率全プレイの 25% 以上を目標
Surprise遭遇率約10ゲームに1回(5.5%)

A. Daily Challenge(日替わりチャレンジ)

Wordleスタイル 決定論的シーケンス

概要

全プレイヤーが同じ日に同じ色順をプレイするモード。 日付(yyyyMMdd)をシードとする SplitMix64 ベースの決定論的 RNG でシーケンスを生成することで、 サーバーレスで全員が同一体験を共有できる。 公開起算日: 2026-05-12 = Day 1

シーケンス生成ルール

処理フロー(Daily Challenge プレイ)

sequenceDiagram participant U as User participant EntryBtn as DailyChallengeEntryButton participant DCM as DailyChallengeManager participant RNG as SeededRandomNumberGenerator participant GV as GameView U->>EntryBtn: TODAY'S CHALLENGE タップ EntryBtn->>DCM: startDailyChallenge() DCM->>RNG: init(seed: yyyyMMdd) RNG-->>DCM: 決定論的シーケンス(50ラウンド) DCM-->>GV: sequence, mode=.daily GV-->>U: ゲーム開始(speedLabel="DAILY") U->>GV: ゲームプレイ GV->>DCM: saveResult(score) DCM->>DCM: chromatic_daily_best_yyyyMMdd 更新 GV-->>U: DailyChallengeResultView 表示

結果シェア

ゲームオーバー時に DailyChallengeResultView を表示し、絵文字グリッド(🟥🟩🟦🟨)形式でシェア可能。

UserDefaults キー(Daily Challenge)

キー用途
chromatic_daily_best_yyyyMMddString → IntDaily Challenge 日別ベストスコア(日付ごとに1エントリ)
chromatic_daily_completed_countIntDaily Challenge 累計プレイ数
chromatic_daily_last_played_dateString (yyyyMMdd)Daily Challenge 最終プレイ日
chromatic_daily_last_played_scoreIntDaily Challenge 最終プレイスコア

関連ファイル

ファイル役割
Daily/SeededRandomNumberGenerator.swiftSplitMix64 決定論的 RNG
Daily/DailyChallengeManager.swift日付シード・本日ベスト管理
Daily/DailyChallengeEntryButton.swiftホームのエントリボタン
Daily/DailyChallengeResultView.swift絵文字グリッド結果オーバーレイ

B. ストリーク強化(毎日続けたくなる装置)

大型ストリーク表示(LargeStreakDisplayView)

idle 画面に大型炎アイコン + 日数を常時表示。 既存の StreakBadgeView より視覚的インパクトを大幅に強化。

ストリークシールド

マイルストーン演出

マイルストーン(日数)演出内容
3 日ミニお祝いオーバーレイ
7 日フルスクリーンお祝いオーバーレイ(パーティクル + ハプティクス + カラーグラデーション)
14 日同上
30 日同上(heavy 演出)
60 日同上
100 日同上(最大演出)
365 日同上(最大演出)

演出トリガー: idle 画面への復帰時にチェック。chromatic_last_streak_milestone で重複防止。

プッシュ通知リマインダー

処理フロー(ストリークシールド判定)

sequenceDiagram participant App as App起動 participant SM as StreakManager participant UDF as UserDefaults App->>SM: refreshStreakOnLaunch() SM->>UDF: chromatic_last_played_date 取得 alt 前日プレイ SM->>SM: streak +1 else 2日前プレイ(シールド未使用) SM->>UDF: shield_available_date チェック SM->>SM: シールド消費 → streak 維持 else 2日以上経過(シールドなし) SM->>SM: streak = 0 リセット end SM->>UDF: 状態保存

UserDefaults キー(ストリーク強化)

キー用途
chromatic_streak_shield_available_dateString (yyyy-MM-dd)シールド次回利用可能日
chromatic_last_streak_milestoneInt最後に演出済みのマイルストーン日数
chromatic_notifications_enabledBool通知 ON/OFF 設定

関連ファイル

ファイル役割
Streak/StreakManager.swiftストリーク判定・シールド消費ロジック(既存拡張)
Streak/LargeStreakDisplayView.swiftidle 画面の大型炎 + 日数表示
Streak/StreakMilestoneOverlay.swift7/30/100 日のお祝い演出
Notifications/NotificationManager.swift毎日 21 時リマインダー

C. Juice 演出強化(ドーパミン分泌の瞬間最大化)

HapticsManager(ハプティクス一元管理)

発火タイミングパターン
パネルタップlight × 1
ラウンドクリアmedium × 1
マイルストーン到達heavy × 2 連打
ベスト更新success + heavy
ストリーク達成heavy × 2 + success
ゲームオーバーerror × 1

ParticleBurstView(Canvas パーティクル爆発)

SwiftUI Canvas + TimelineView による軽量パーティクル実装。 重力・回転・透明度フェードを対応。

サイズ種別パーティクル数
small(マイルストーン 3/14 日等)14 個
medium(ラウンドクリア等)36 個
large(ベスト更新・100 日等)72 個

NewBestFlashView(全画面ゴールドフラッシュ)

プレイ中ベスト更新の瞬間に全画面ゴールドフラッシュを発火。0.3s でフェードアウト。

ScreenShakeModifier(画面シェイク)

GeometryEffect ベースの減衰 sin 波シェイク。マイルストーン到達時・ベスト更新時に発火。

MilestoneFlashView 強化

関連ファイル

ファイル役割
Effects/HapticsManager.swiftハプティクス一元管理
Effects/ParticleBurstView.swiftSwiftUI Canvas パーティクル爆発
Effects/ScreenShakeModifier.swiftGeometryEffect ベース画面シェイク
Game/NewBestFlashView.swift全画面ゴールドフラッシュ
Game/MilestoneFlashView.swiftマイルストーン到達演出(既存強化)

v1.1 追加実装(評価フィードバック反映)

モバイルゲームPM視点 Near Miss / Variable Reward / 速度カーブ

「短時間で脳を高負荷運転させる」設計としてはかなり強い。
ただし現状は 競技性は強いが、依存性はまだ弱い
必要なのは Near Miss / Flow演出 / Variable Reward / リズム没入 / Surprise。

D. Near Miss演出(「あと一歩」訴求)

目的: 「ベストまであと1」「Round 5まであと2」など、惜しい時のフレーズで再挑戦動機を最大化。

仕様(通常モード)— GameOverOverlayView

表示優先4段階で出し分け(nearMissText: String? computed property で返す):

優先度条件表示フレーズ
1(最高)isNewBest = trueスキップ(NEW BEST ! と排他)
2ベスト直前(差が 1〜3)「ベストまであと N」
3マイルストーン直前(5/10/15/20/25/30/40/50)(差が 1〜4)「Round X まであと N」
4(初プレイ時)best = 0「最初の壁 Round 5 まで あと N」

仕様(Daily Challenge)— DailyChallengeResultView

2系統のフレーズを独立して表示可能:

系統条件表示フレーズ
メイン Near Miss本日ベスト直前(差が 1〜3)「本日ベストまであと N」
メイン Near MissRoundマイルストーン直前「Round X まであと N」
「明日来てね」誘導累計プレイ数の次マイルストーン(3/7/14/30/50/100/365)直前「明日プレイで Daily 累計 N 回達成!」

「明日来てね」誘導は Near Miss と独立して表示可(idle帰着動機)。

UI仕様

変更ファイル: GameOverOverlayView.swiftnearMissText computed property 追加、NEW BEST ! と排他で表示)、DailyChallengeResultView.swiftnearMissText + comebackText 追加)

E. 速度カーブ 6段階化

目的: 評価AIから「320→250msの急変で記憶ゲー→反射ゲーに変質する」指摘を受け、滑らかなランプに修正。

実効ラウンド旧速度(5段階)新速度(6段階)ラベル
1〜4650ms650msNORMAL
5〜9500ms500msNORMAL+
10〜14400ms400msFAST
15〜19320ms340msFAST+
20〜24250ms300msRAPID(新規)
25+280msINSANE

Difficulty.insaneroundOffset19 → 24 に変更。INSANE難易度モードは Round 25+ の INSANE 280ms 速度から開始。

注意: 既存ベストスコアは継続有効。新スコアは旧より上振れ可能性あり(互換性のある変更)。

変更ファイル: GameViewModel.swiftcomputeSpeed() 6段階化、Difficulty.insane.roundOffset 19→24)

F. Variable Surprise 4種(合計 5.5% 発火)

目的: 評価AIから「報酬密度が単調、予測可能、Variable Reward不足」を指摘され、希少サプライズを追加。

実装クラス

発火条件

4種の演出

演出確率バナー文言カラーアイコン追加効果
RAINBOW BURST2.0%"RAINBOW BURST!"#FF3B30 → #AF52DEsparkles7色虹パーティクル発火
GOLDEN ROUND1.5%"GOLDEN ROUND"#FFD60A → #FF9500star.fillバナーのみ(v1.1)
ECHO1.0%"ECHO!"#007AFF → #A0A0FFwaveformバナーのみ(v1.1)
FLOW MOMENT1.5%"FLOW"#34C759 → #007AFFinfinityバナーのみ(v1.1)

注: v1.1 では GOLDEN / ECHO / FLOW は「バナー表示のみ」。各演出の追加ロジック(金パネル化・シーケンスリプレイ・心拍パルス)は v1.2 で本格実装予定。

バナー仕様(SurpriseBannerView)

変更ファイル: GameViewModel.swiftstartGame()resetForNewGame() 呼び出し)、GameView.swiftSurpriseEffectManager.shared 監視、RainbowParticleBurstView 追加、SurpriseBannerView × 4 配置)

アーキテクチャ・追加ファイル一覧

Effects/
├── HapticsManager.swift          # ハプティクス一元管理
├── ParticleBurstView.swift       # SwiftUI Canvas パーティクル
├── ScreenShakeModifier.swift     # GeometryEffect ベース画面シェイク
├── SurpriseEffectManager.swift   # 4種サプライズ発火・確率・1回制約(新規)
└── SurpriseBannerView.swift      # 共用サプライズバナーView(新規)

Daily/
├── SeededRandomNumberGenerator.swift  # SplitMix64 決定論的RNG
├── DailyChallengeManager.swift        # 日付シード・本日ベスト管理
├── DailyChallengeEntryButton.swift    # ホームのエントリボタン
└── DailyChallengeResultView.swift     # 絵文字グリッド結果オーバーレイ

Streak/
├── LargeStreakDisplayView.swift     # idle画面の大型炎+日数表示
└── StreakMilestoneOverlay.swift     # 7/30/100日のお祝い演出

Notifications/
└── NotificationManager.swift        # 毎日21時リマインダー

Game/
└── NewBestFlashView.swift           # 全画面ゴールドフラッシュ

修正ファイル(評価フィードバック反映):
├── GameViewModel.swift              # startGame()→resetForNewGame(), maybeTrigger(), computeSpeed()6段階化, roundOffset 19→24
├── GameView.swift                   # SurpriseEffectManager.shared監視, RainbowParticleBurstView, SurpriseBannerView×4
├── GameOverOverlayView.swift        # nearMissText computed property 追加(NEW BEST ! 排他)
└── DailyChallengeResultView.swift   # nearMissText + comebackText 追加

UserDefaults 新規キー一覧(v1.1 追加分)

キー用途
chromatic_streak_shield_available_dateStringシールド次回利用可能日
chromatic_last_streak_milestoneInt最後に演出済みのマイルストーン日数
chromatic_notifications_enabledBool通知 ON/OFF 設定
chromatic_daily_best_yyyyMMddString → IntDaily Challenge 日別ベストスコア
chromatic_daily_completed_countIntDaily Challenge 累計プレイ数
chromatic_daily_last_played_dateStringDaily Challenge 最終プレイ日
chromatic_daily_last_played_scoreIntDaily Challenge 最終プレイスコア

UI 画面遷移(v1.1 変更点)

画面・状態変更内容
idle 画面大型ストリーク表示(LargeStreakDisplayView)追加、TODAY'S CHALLENGE ボタン追加、難易度 Picker + START ボタンは既存のまま
Daily Challenge プレイ中通常難易度と同じ UI。speedLabel が "DAILY" に変化
Daily Challenge ゲームオーバーDailyChallengeResultView(絵文字グリッド + シェアボタン)を表示
ストリーク 7/30/100 日到達時任意の idle 復帰タイミングで StreakMilestoneOverlay 全画面表示

通知許諾フロー

  1. 初回起動時: ATT 許諾後、二回目の idle 復帰タイミングで UNUserNotificationCenter 許諾リクエスト
  2. 許可後: 毎日 21:00 の UNCalendarNotificationTrigger(repeats: true) を 1 本登録
  3. プレイ済み日: refreshAfterPlay() で同名 ID を削除 → 翌日シングルトリガー + 明後日以降リピートに切り替え
  4. 既に拒否済み: SettingsView で「設定アプリから許可してください」へ誘導

ビジネスルール

エラー処理

発生条件対応
通知許諾拒否後のリマインダー登録要求SettingsView に誘導バナー表示。通知なしで通常動作は継続
通知二重発火(プレイ済み日の再起動等)refreshAfterPlay() で同名 ID 削除 + 再登録で解決
低スペック端末でのパーティクル FPS 低下Canvas レンダリングのため軽量だが、将来的に粒子数を端末性能で動的調整する
タイムゾーン跨ぎでのリセット誤作動ローカル日付基準で統一。UTC 変換は行わない

既知のリスク・制約

関連仕様書

v1.2 で取り組む課題

評価AIの提案のうち、規模が大きいか v1.1 で実装しきれなかった項目。次期スプリントの計画時に参照すること。

機能理由・概要工数感
PERFECT CHAIN / リズム評価システム 「記憶ゲー → 音ゲー脳混合」で寿命延長。入力テンポ安定度を内部評価し、SMOOTH/PERFECT FLOW判定で BGM・Glow に反映 大(2週)
BGM 動的レイヤリング フロー状態の演出。連続クリアでBGMが強化される 大(2週)
背景心拍同期パルス Round 15+ で背景がBPMに同期して微脈動。Geometry Dash的ゾーン感 中(1週)
Daily「美しい並び」生成 単なるランダムでなく、ABAB / 対称 / リズム感のあるシーケンスを優先生成。"意味ありげ"が中毒化する 中(1週)
「読み」演出 次ラウンドの色を一瞬予告。期待形成 → 当てた時の達成感 小〜中
GOLDEN ROUND の本格演出 パネルが金色光沢に変化(v1.1 はバナーのみ)
ECHO の本格演出 クリアしたシーケンスを高速リプレイ表示(v1.1 はバナーのみ)
FLOW MOMENT の本格演出 全画面の薄い脈動演出(v1.1 はバナーのみ)
カラークリスタル経済 + パレット解禁 + 宝箱開封 + パレット課金 v1.2 既定スコープ。ゲーム内経済圏の確立

変更履歴

バージョン日付変更内容
1.02026-04-30v1.0 初回審査提出
1.0.12026-05-11特商法対応
1.1.02026-06予定ドーパミン強化アップデート(Daily Challenge・ストリーク強化・Juice演出)
doc 1.02026-05-11本仕様書 初版作成
doc 1.12026-05-12Near Miss演出 / 速度カーブ6段階化 / Variable Surprise 4種を追加実装(評価フィードバック反映)。実装規模: 30〜40行のViewModel変更 + 2新規ファイル。v1.2持ち越し項目を明示