hajimu_gui — 日本語 GUI フレームワークJapanese GUI Framework

はじむ言語のパッケージ hajimu_gui を使って、日本語でデスクトップ GUI アプリケーションを開発できます。
外部ライブラリ不要、OS 標準 API のみで動作するクロスプラットフォーム対応の GUI フレームワークです。

🖼️

1,101 関数

ウィジェット、宣言的UI、フレームスケジューラ、ホットリロード、DevTools など網羅的な機能

🚀

外部依存なし

macOS (Cocoa)、Linux (X11)、Windows (Win32) の OS 標準 API のみ使用

🎨

自製レンダラー

hjp_render.c による高品質な 2D 描画。アンチエイリアス対応

📝

すべて日本語

関数名からパラメータまで、すべて日本語で記述可能

インストール

パッケージマネージャ(推奨)

はじむ内蔵のパッケージマネージャを使うと、コンパイル不要で一行でインストールできます。

hajimu パッケージ 追加 ReoShiozawa/hajimu_gui

既存プロジェクトの依存関係を一括インストールする場合:

hajimu パッケージ インストール

ソースからビルド

手動でビルドする場合。外部ライブラリは不要です。

git clone https://github.com/ReoShiozawa/hajimu_gui.git
cd hajimu_gui
make
make install

Hello World

最小限の GUI プログラム:

取り込む "hajimu_gui" として GUI

変数 アプリ = GUI.アプリ作成("はじめてのGUI", 400, 300)

GUI.描画ループ(アプリ, 関数():
    GUI.ラベル("こんにちは、世界!")
終わり)

GUI.アプリ終了(アプリ)
hajimu hello_gui.jp

基本的な仕組み

hajimu_gui は即時モードの GUI フレームワークです。描画ループの中で毎フレーム、ウィジェット関数を呼び出します。

取り込む "hajimu_gui" として GUI

変数 アプリ = GUI.アプリ作成("タイトル", 800, 600)

// 状態変数は描画ループの外で宣言
変数 回数 = 0
変数 名前 = ""

GUI.描画ループ(アプリ, 関数():
    // ボタン — クリックされると「真」を返す
    もし GUI.ボタン("カウントアップ") なら
        回数 = 回数 + 1
    終わり

    // テキスト入力 — 更新後の値を返す
    名前 = GUI.テキスト入力("名前", 名前)

    // ラベル — テキストを表示
    GUI.ラベル("回数: " + 回数)
    GUI.ラベル("入力: " + 名前)
終わり)

GUI.アプリ終了(アプリ)

主要機能

ウィジェット

関数説明
ボタン(ラベル)クリックボタンもし GUI.ボタン("OK") なら ...
テキスト入力(ラベル, 値)テキスト入力欄名前 = GUI.テキスト入力("名前", 名前)
チェックボックス(ラベル, 値)チェックボックス有効 = GUI.チェックボックス("通知", 有効)
スライダー(ラベル, 値, 最小, 最大)スライダー音量 = GUI.スライダー("音量", 音量, 0, 100)
コンボボックス(ラベル, 選択肢, 値)ドロップダウン色 = GUI.コンボボックス("色", 色一覧, 色)
リスト(ラベル, 配列, 選択, 行数)リストボックス選択 = GUI.リスト("果物", 配列, 選択, 5)
数値入力(ラベル, 値, 最小, 最大)数値入力年齢 = GUI.数値入力("年齢", 年齢, 0, 120)
テキストエリア(ラベル, 値, 行数)複数行テキスト文 = GUI.テキストエリア("内容", 文, 10)

レイアウト

関数説明
パネル開始(名前) / パネル終了()枠線付きグループ
横並び開始() / 横並び終了()水平レイアウト
グリッド開始(列数) / グリッド終了()グリッドレイアウト
タブバー(タブ配列, 値) / タブ内容(値, N)タブ切替
スクロール領域開始(名前, 高さ) / スクロール領域終了()スクロール領域
折りたたみ開始(ラベル) / 折りたたみ終了()折りたたみセクション

描画

関数説明
四角塗り(x, y, w, h, 色)塗りつぶし四角形
円塗り(x, y, r, 色)塗りつぶし円
線描画(x1, y1, x2, y2, 色, 太さ)直線
テキスト描画(テキスト, x, y, 色)任意位置にテキスト
画像描画(パス, x, y, w, h)画像表示
グラデーション四角(x, y, w, h, 色1, 色2)グラデーション

データ表示

関数説明
テーブル作成(列配列) / テーブル表示(T)表形式データ
ツリー作成() / ツリー表示(T)ツリービュー
棒グラフ(タイトル, ラベル, データ, 高さ)棒グラフ
折れ線グラフ(タイトル, ラベル, データ, 高さ)折れ線グラフ
円グラフ(タイトル, ラベル, データ, サイズ)円グラフ

実践例:TODO アプリ

複数のウィジェットを組み合わせた実用例です。

取り込む "hajimu_gui" として GUI

変数 アプリ = GUI.アプリ作成("TODOアプリ", 500, 600)
変数 タスク一覧 = []
変数 完了一覧 = []
変数 新規タスク = ""

GUI.描画ループ(アプリ, 関数():
    GUI.見出し("📝 TODO リスト")

    // 新規タスク入力
    GUI.横並び開始()
        新規タスク = GUI.テキスト入力("新しいタスク", 新規タスク)
        もし GUI.ボタン("追加") なら
            もし 新規タスク != "" なら
                タスク一覧 = タスク一覧 + [新規タスク]
                完了一覧 = 完了一覧 + [偽]
                新規タスク = ""
            終わり
        終わり
    GUI.横並び終了()

    GUI.区切り線()

    // タスク一覧
    GUI.スクロール領域開始("タスク", 400)
        繰り返す 変数 i = 0 から タスク一覧の長さ - 1 まで
            GUI.横並び開始()
                完了一覧[i] = GUI.チェックボックス("##" + i, 完了一覧[i])
                もし 完了一覧[i] なら
                    GUI.色付きラベル("✅ " + タスク一覧[i], "#888888")
                でなければ
                    GUI.ラベル("⬜ " + タスク一覧[i])
                終わり
            GUI.横並び終了()
        終わり
    GUI.スクロール領域終了()

    // ステータスバー
    GUI.区切り線()
    変数 完了数 = 0
    繰り返す 変数 j = 0 から 完了一覧の長さ - 1 まで
        もし 完了一覧[j] == 真 なら
            完了数 = 完了数 + 1
        終わり
    終わり
    GUI.プログレスバー("進捗", 完了数 / タスク一覧の長さ)
終わり)

GUI.アプリ終了(アプリ)

Phase 1〜134 — 機能の全体像

hajimu_gui は 134 フェーズにわたって段階的に開発されました。主な機能カテゴリ:

カテゴリPhase機能例
基本ウィジェット1〜4ボタン、テキスト入力、チェックボックス、スライダー
描画・図形5〜6四角、円、線、画像、グラデーション
データ構造7〜8テーブル、ツリー、ドラッグ&ドロップ
テーマ・スタイル10〜11ダーク/ライトテーマ、アニメーション
高度な描画12〜13パス描画、ベジェ曲線、SVG
メニュー・ツールバー14〜16メニューバー、コンテキストメニュー、ステータスバー
ドック・ウィザード17〜19ドック可能パネル、ウィザード、スプリッター
リッチテキスト20〜21リッチテキスト編集、構文ハイライト
カレンダー・日付22〜23カレンダー、日付選択、タイムライン
チャート25〜27棒グラフ、折れ線、円グラフ、レーダーチャート
マップ・地理50〜51マップ表示、マーカー、ルート
音声・動画53〜55音声再生、録音、動画プレイヤー
3D描画60〜633D初期化、立方体、回転、照明
アクセシビリティ70〜73スクリーンリーダー、ハイコントラスト
国際化80〜81多言語対応、RTL
テスト90〜93UIテスト、スクリーンショット比較
マテリアル100〜103マテリアルデザインウィジェット
Cupertino110〜113iOS風デザインウィジェット
最新 (Phase 121–130)121〜130カスタムペインター、Sliver、Hero、セマンティクス
宣言的UI / 仮想ノードツリー131VUI.開始 / VUI.ボックス / VUI.ボタン、Flexboxレイアウト、差分レンダリング
フレームスケジューラ132VSync / FPS制御 / 描画コールキュー / アダプティブスロットリング
ホットリロード133stat mtime ポーリング、最大32ブァイル監視、UIステート保全
DevTools オーバーレイ134FPSグラフ / ウィジェットインスペクタ / ログコンソール / パフォーマンス表示

さらに詳しく

📖

チュートリアル

ゼロから学ぶ 20 章構成のステップバイステップガイド。

TUTORIAL.md を読む →

📚

API リファレンス

全 1,101 関数の完全なリファレンスドキュメント。

REFERENCE.md を読む →

🗺️

ロードマップ

Phase 1〜134 の全機能一覧と開発計画。

ROADMAP.md を読む →

💻

GitHub

ソースコード、Issue、ディスカッション。

リポジトリを見る →

技術スタック

コンポーネント技術
実装言語C 言語(単一ファイル 23,000 行)
macOSCocoa (AppKit / NSWindow / NSOpenGLView)
LinuxX11 + GLX
WindowsWin32 API (CreateWindow / wglCreateContext)
レンダラー自作 hjp_render.c
フォント自作フォント処理(hjp_platform 経由 — CoreText / FreeType)
画像自作画像読み込み(hjp_platform 経由 — ImageIO / system)
日本語フォントNoto Sans CJK JP(同梱)