Next2D Development Assistant
Architecture
View Layer (view/, ui/)
└─ depends on ─→ Interface Layer (interface/)
↑
Application Layer (model/application/)
├─ depends on ─→ Interface Layer
├─ depends on ─→ Domain Layer (model/domain/)
└─ calls ──────→ Infrastructure Layer (model/infrastructure/)
Design Patterns: MVVM + Clean Architecture + Atomic Design Language: TypeScript (any 禁止, Interface は I プレフィックス) Build Tool: Vite / Testing: Vitest / Package Manager: npm
Initial Setup
新規プロジェクトを作成する場合は以下のコマンドを実行する。TypeScript テンプレートを推奨する:
# 推奨: TypeScript
npx create-next2d-app {{PROJECT-NAME}} --template @next2d/framework-typescript-template
# JavaScript (非推奨)
npx create-next2d-app {{PROJECT-NAME}} --template @next2d/framework-javascript-template
Core Workflow
MCP ツールが利用可能なら(next2d-development-mcp)、雛形生成は create_view / add_route / create_usecase / create_repository / create_ui_component 等を優先し、変更後は validate_architecture で検証する。
1. 新しい画面を追加する
src/config/routing.jsonにルートを追加npm run generateで View/ViewModel の雛形を自動生成- ViewModel に UseCase を追加
- View に UI コンポーネント (Atomic Design) を配置
- イベントは必ず ViewModel に委譲
2. API データを取得する画面
interface/にレスポンス型を定義 (Iプレフィックス)model/infrastructure/repository/に Repository を作成 (try-catch 必須, config からエンドポイント取得)model/application/{screen}/usecase/に UseCase を作成 (executeメソッド統一)routing.jsonのrequestsで自動取得、または ViewModel から UseCase 経由で取得
3. Animation Tool アセットを使う
- Animation Tool でシンボルを作成 →
.n2dファイルをfile/に配置 ui/content/に MovieClipContent 継承クラスを作成 (namespaceでシンボル名を指定)routing.jsonでtype: "content"として読み込み
4. TextField タイプライターアニメーション(stopIndex)
stopIndex で表示文字数を制御し、Tween でアニメーション。RPGゲームの台詞ウィンドウ演出に使用する。
stopIndex のデフォルトは -1(全文字表示)。0 にすると文字が非表示になる。
コード例は references/player-text-field.md の「RPGゲーム風台詞アニメーション(stopIndex)」を参照。
5. 設定ファイルを変更する(src/config/)
- stage.json: ホワイトリストのみ設定可能(Key Rules 参照)。ホワイトリスト外のキー(
scaleMode・align等)は追加しない - config.json: 環境依存設定は
local/dev/stg/prd環境ブロックへ、全環境共通はallへ - カスタム表示挙動(scaleMode / align 等):
config.jsonにユーザ定義設定として書いてコード側で実装する(フレームワークは自動処理しない) - 変更後は MCP
validate_architecture(stage.json の無効キーを検出)で検証
View/ViewModel Lifecycle
ViewModel 生成 → ViewModel.initialize() → View 生成 (VM注入) → View.initialize() → View.onEnter() → (操作) → View.onExit()
重要: ViewModel の initialize() は View の initialize() より前に呼ばれる。View 初期化時にはデータ準備済み。
Key Rules
- View: 表示構造のみ。ビジネスロジック禁止。イベントは ViewModel に委譲
- ViewModel: UseCase を保持。インターフェースに依存 (具象クラス禁止)
- UseCase: 1 アクション = 1 UseCase。エントリーポイントは
execute。単一責任 - Repository: try-catch 必須。エンドポイントは
configから取得。any禁止 - UI Component: 単一責任。データは ViewModel から引数で受け取る
- Interface:
Iプレフィックス。必要最小限のプロパティのみ - stage.json: 設定できるのは
width/height/fps/options(fullScreen/tagId/bgColor)のみ。scaleMode・align・quality・wmode等の Flash 由来オプションは無効(Next2D は Flash Player の派生でなく、ホワイトリスト外のキーはサイレントに無視される)。画面いっぱい表示はoptions.fullScreen: true。詳細はreferences/framework-specs.mdの「stage.json」を参照 - クラス判定:
constructor.nameは minify でクラス名が変わるため禁止。displayObject.namespace(インスタンス)またはStage.namespace(static)の文字列比較で判定する。詳細はreferences/player-display-object.mdの「クラス判定(namespace)」を参照 - 動作検証: 画面遷移や UI 挙動の変更後は、
npx playwrightによるE2E動作確認を推奨(例:npx playwright test) - CSP設定:
default-src 'self' data: blob:/worker-src 'self' blob: data:/style-src 'self' 'unsafe-inline'が必須。frame-ancestors 'none'は追加禁止
Display Object Hierarchy
Next2D の表示オブジェクトの継承関係。型キャストや子オブジェクト管理で誤りやすいため注意:
DisplayObject (基底クラス)
├── InteractiveObject
│ ├── DisplayObjectContainer
│ │ └── Sprite
│ │ └── MovieClip ← addChild() 可能、タイムラインアニメーション
│ └── TextField ← addChild() 不可、テキスト表示/入力
├── Shape ← addChild() 不可、軽量ベクター描画専用
└── Video ← addChild() 不可、動画再生専用
重要な型制約:
ShapeはDisplayObjectContainerを継承しない →addChild()不可、子オブジェクト管理不可ShapeとSpriteは直接キャスト不可(Conversion of type 'Shape' to type 'Sprite'エラー)→as unknown as Spriteの二段階アサーションが必要hitAreaプロパティの型はSprite | null→ShapeをhitAreaに渡す場合は型アサーション必須
Build Commands
| Command | Platform | Output |
|---|---|---|
npm run build:web -- --env prd |
Web | dist/web/prd/ |
npm run build:steam:windows -- --env prd |
Windows | dist/steam/windows/ |
npm run build:steam:macos -- --env prd |
macOS | dist/steam/macos/ |
npm run build:ios -- --env prd |
iOS | Xcode project |
npm run build:android -- --env prd |
Android | Android Studio project |
Environment options: --env local|dev|stg|prd
References
詳細仕様は references/ ディレクトリにある。
Load only the single file needed for the current task.(タスクに必要なファイルだけ1つ読む)
MCP を利用する場合は next2d://specs(索引)を読み、URI を1つ選んで読む。
- クイック: 実装パターン・落とし穴 → まず「クイックリファレンス」
- 完全版: 詳細なAPI確認が必要なときのみ「クラス別フルAPI」
Player - クイックリファレンス(パターン・落とし穴)
- player-overview.md - Playerの仕組み・アーキテクチャを理解したいとき
- player-events.md - イベントリスナー、入力処理(マウス / キー / ゲームパッド)
- player-media-text.md - テキスト・音声・動画のポイント、stopIndexタイプライター
- player-tween.md - Tween / Job / Easing アニメーション
- player-filters.md - フィルター効果(グロー / 影 / ぼかしなど)
Player - クラス別フルAPI
- player-display-object.md - DisplayObject
- player-sprite.md - Sprite
- player-movie-clip.md - MovieClip
- player-shape.md - Shape
- player-text-field.md - TextField
- player-video.md - Video
- player-sound.md - Sound
Framework / 開発仕様
- framework-specs.md - MVVMアーキテクチャ、routing / config、ライフサイクル、Animation Tool
- develop-specs.md - プロジェクト構造、CLIコマンド、Interface / Model / UIパターン
- game-development.md - Canvasゲーム、LocalLLM分担、Vitest/Playwrightの実装・検証手順