世界を動かす技術を、日本語で。

MicroUI – ANSI Cで書かれた小型でポータブルな即時モードUIライブラリ

2026年6月17日原文(github.com)

概要

  • ANSI C で書かれた 小型・即時モードUIライブラリ の紹介
  • 固定メモリ領域 内で動作し、追加メモリ不要
  • 基本的なUIコントロール を標準搭載
  • 描画システム非依存 でカスタム拡張も容易
  • MITライセンス で自由に利用・改変可能

特徴と概要

  • 約1100行 のANSI Cによる 超小型実装
  • 固定サイズのメモリ領域 のみを使用し、追加のメモリアロケーション不要
  • 標準搭載コントロール
    • window(ウィンドウ)
    • scrollable panel(スクロール可能パネル)
    • button(ボタン)
    • slider(スライダー)
    • textbox(テキストボックス)
    • label(ラベル)
    • checkbox(チェックボックス)
    • wordwrapped text(自動改行テキスト)
  • 四角形とテキスト描画 が可能な任意のレンダラーで動作
  • カスタムコントロール の追加が容易な設計

レイアウトと使用例

  • シンプルなレイアウトシステム を採用
  • 例(Cコード)
    if (mu_begin_window(ctx, "My Window", mu_rect(10, 10, 140, 86))) {
        mu_layout_row(ctx, 2, (int[]) { 60, -1 }, 0);
        mu_label(ctx, "First:");
        if (mu_button(ctx, "Button1")) {
            printf("Button1 pressed\n");
        }
        mu_label(ctx, "Second:");
        if (mu_button(ctx, "Button2")) {
            mu_open_popup(ctx, "My Popup");
        }
        if (mu_begin_popup(ctx, "My Popup")) {
            mu_label(ctx, "Hello world!");
            mu_end_popup(ctx);
        }
        mu_end_window(ctx);
    }
    
  • レイアウト行ポップアップ の制御が容易

使用方法

  • doc/usage.md に詳細な利用手順を記載
  • demoディレクトリ にサンプル実装を収録

注意事項

  • 入力の取得描画コマンドの処理 はユーザー側で実装
    • ライブラリ自体は描画処理を行わない設計

コントリビューションとライセンス

  • 軽量性重視 のため、追加機能のプルリクエストは非推奨
  • バグ報告 は歓迎
  • MITライセンス 採用
    • 再配布・改変が自由
    • 詳細はLICENSEファイル参照

まとめ

  • 小型・即時モードUI 開発に最適なCライブラリ
  • 組み込みや独自エンジン への導入に適した設計
  • 自由度の高いカスタマイズ性

Hackerたちの意見

UIライブラリで最初に見るのはアクセシビリティのサポートだね。これがあると、おもちゃプロジェクトは簡単に除外できるから。

それに、時間を節約したいなら、即時モードとアクセシビリティは相反するからね。

これは「Dear imgui」に似たライブラリで、統合のための要件が最小限(長方形とテキスト描画)だから、ゲームエンジンに埋め込んでデバッグUIとかに使いやすいよ。

でも、すべてのUIライブラリがアクセシビリティが意味を持つ使い方を想定しているわけじゃないよね。例えば、ゲームエンジンのデバッグUIとか、アクセシビリティ用の入力すらない組み込みデバイスとか。

いや、そうあってほしいけど、それはUIライブラリを評価するには全然良い基準じゃないよ。「Dear ImGui」は間違いなく最も普及している即時モードのUIライブラリだし、ネイティブのアクセシビリティ機能はないけど、IntelやMeta、IKEA、Googleなどはそれを基にした製品を出してる。ゲームでもたくさん使われてるし、今の時点で「Dear ImGui」をおもちゃプロジェクト呼ばわりするのは、Unreal Engineをおもちゃプロジェクトって言うのと同じくらいおかしいよ。アクセシビリティのサポートがもっと広まってほしいし、追加するのがこんなに手間なのも残念だね。

「アクセシビリティ」っていうのは、オープンエンドな機能のセットで、チェックボックスじゃないからね。決して「完了」することはなく、常に改善の余地がある。色覚障害のサポート(どのタイプ?)、ハイコントラストモード、テキストサイズの調整、スクリーンリーダーとの統合、ローカリゼーション、IMEサポート、キーボードナビゲーション、キーボードのリマッピング、キーボードなしで完全に機能すること、タッチサポート、ペンサポート、ディスレクシア支援のフォント… まだまだ続くよ。

え?マイクロ即時モードUIで?マジでクレイジーなコメントだわ、正直。

あんまり賢くないね。もっと言うと、フルUnicodeサポートがなくても、ソフトウェアは十分に役立つと思う。みんながUnicodeやアクセシビリティにこだわりすぎて、ブラウザのレイヤーの圧政に屈しなきゃいけないのは悲しいよね。

同意するよ。この分野に対する共感の欠如は悲しいね。アプリを開発するなら、アクセシビリティが組み込まれたUIフレームワークを使って成功の罠にハマった方がいいよ。エンドユーザー向けのアプリにDear Imguiを使うプロジェクトは、すでに悪いデザインの選択をしてると思う。AccessKit (https://accesskit.dev/) は前向きな一歩のようで、いくつかのUIフレームワークが実装されてるみたい(即時モードのeguiも含まれてる)。

UIのアクセシビリティサポートがしっかりしてるゲームエンジンってある?

Windows XPは、アクセシビリティツールを完全に邪魔しないおかげで、今までのどのOSよりもアクセシビリティが優れてるよ。ダウングレードする時が来たね!

これはしばらくの間、個人的なおもちゃプロジェクトの定番だね。テキストを表示できてマウス入力を受け付けるものには簡単に組み込める。ただ、今はちょっと放置気味かも。描画コールのイテレータにバグがあって、アラインされてないポインタアクセスが発生するんだ。環境がそれをキャッチするように設定されてると、ちょっと面倒(例えばZigだとパニックになる)。フォークする理由にしてる人もいるGitHubの問題があるけど、試したフォークは微妙に間違ってたよ。

Hacker Newsで議論の続きを見る