MitiruEngine

In Development C++20 Header-only MIT Public on GitHub

ゲームを作っているうちに、エンジンの仕組みを自分の手で確かめたくなって書き始めた C++20 ゲームエンジンです。

header-only で配布するつもりで作っていて、使う側は CMake の FetchContent でリンクするだけで動かせます。動かしかたは 2 つあって、純 C++ だけの Native と、CEF + HTML/CSS/JS で UI を組む Hybrid。両方を残す方針です。

数字で見る

47
Modules
700+
Headers
730+
Commits
6
GPU Backends
4
Platforms

数値は 2026 年 5 月時点。

なぜ自分でエンジンを書くのか

Unity も Godot も Unreal も Siv3D も、ゲームを作るだけなら困らないくらいよくできています。それでも自分で書いているのは、ゲームが画面に出るまでに何がどう動いているのかを、使う側ではなく書く側から知っておきたかったからです。

エンジン開発が目的ではなくて、ゲームを深く作れる人間でいるための足場として書いています。ゲーム制作はゲーム制作で別に進めていて、そこで詰まったことがあると、こちらに書き戻すこともあります。

アーキテクチャ

レイヤースタックは以下のとおりです。Native(Mode A)と Hybrid(Mode B)は同じ C++ ランタイムを共有していて、Hybrid はその上に CEF と JS ランタイムが乗ります。

+----------------------------------------------------------+
|  CEF / WEB RUNTIME  (Mode B only)                        |
|  web/mitiru_runtime/*.js  -- mitiru.audio / .save / ...  |
|  HTML / CSS / JS gameplay loaded by CefStartUrl          |
+----------------------------------------------------------+
|  CEF HOST + JS BRIDGES  (Mode B only)                    |
|  mitiru::cef::*  -- MitiruCefContext, AudioBridge, ...   |
+----------------------------------------------------------+
|  APPLICATION LAYER     User Games (Game subclass)        |
+----------------------------------------------------------+
|  ENGINE / SCENE / ECS  Engine, Clock, GameLoop, Screen,  |
|                        SceneManager, GameWorld           |
+----------------------------------------------------------+
|  SUBSYSTEM   Input, Audio, Physics, Network, Render,     |
|              Resource, Asset, Data, Control, Observe     |
+----------------------------------------------------------+
|  PLATFORM    Win32Window | GlfwWindow | Sdl2Window       |
|              | EmscriptenWindow                          |
+----------------------------------------------------------+
|  GRAPHICS    IDevice 抽象の裏で                          |
|              DX11 | DX12 | Vulkan | OpenGL | WebGL | Null|
+----------------------------------------------------------+

GPU バックエンドは全部 IDevice という同じインターフェイスの裏に隠してあります。GPU が無い CI 環境では NullDevice に自動で落とすので、テストはそのまま緑で回ります。

技術的なハイライト

Native / Hybrid の 2 つの動かしかた

純 C++ だけで動く Native(コンソールやモバイル、ヘッドレスを視野に)と、CEF + JS で UI を書ける Hybrid(デスクトップ向け、ノベルや経営シミュレーション系)。両方を残す方針で書いていて、その判断は docs/SCOPE.md に書いてあります。

マルチバックエンドの GPU 抽象

Windows なら DX11、Linux/macOS なら Vulkan、Web なら WebGL2、というふうに IDevice の裏でランタイム選択するようにしています。バックエンドを足しても引いても、上のアプリケーションコードは触らずに済みます。

Header-only と CMake FetchContent での配布

使う側は CMake で FetchContent_Declare して Mitiru::mitiru をリンクするだけ。ビルド済みバイナリを配る必要がないので、複数プロジェクトから同じエンジンを使い回しやすくしています。

専用 CLI (mitiru)

Go で書いた mitiru CLI が、プロジェクトの雛形生成からビルド、実行までを一通り面倒見ます。使う側は CMake の作法を覚えずにゲームを書き始められます。

付随する道具

  • API カタログの自動生成(tools/generate_api_catalog.py
  • モジュール依存グラフの自動生成(tools/generate_module_map.py
  • 編集ファイルだけ高速にコンパイルチェック(tools/quick_compile.py
  • GitHub Actions による CI
  • 専用のデザインシステム(DESIGN.md)と UI トークン

MitiruEngine で動いているもの

エンジン単体ではなく、実際にゲームに使えている状態かどうかが重要なので、現時点で MitiruEngine 上で動いているプロジェクトを並べておきます。

  • ハトを育てよう(リメイク) — 2023 年に TyranoScript で書いた原作を、MitiruEngine CEF Hybrid + mitiru.novel VM で完全移植。バックログ・既読管理・セーブロードなどの追加要素も入った状態で動いています。
  • かえるクレープへようこそ — 当初は Godot で書いていましたが、現在 MitiruEngine の WASM ビルドへ移植中(1.0.0-rc1)。Playwright による E2E テスト、テーマトークン、itch.io 向けパッケージングまでセットアップ済み。

エンジンを書く作業と、エンジンでゲームを作る作業を、両方を行き来しながら進めています。