イントロダクション
Next.js に近い開発体験でデスクトップアプリを構築。React 19、Vite、軽量な Rust ホストを利用でき、Rust を書く必要はありません。
Murasaki は、Next.js に近い開発体験でデスクトップアプリを構築するためのフレームワークです。ファイルベースルーティング、レイアウト、Server Actions、API Routes、React 19 を利用でき、Electron のように Chromium をアプリへ同梱せず、OS 標準の WebView で画面を表示します。
アプリ側で記述するのは React と TypeScript です。Murasaki は tao / wry / muda を基盤とする小さな Rust ホスト(@murasakijs/native)を同梱し、OS のウィンドウ、メニュー、各種システム機能との連携を提供します。アプリ開発者が Rust を書く必要はありません。
Murasaki を選ぶ理由
| Murasaki | Electron | Tauri | |
|---|---|---|---|
| UI ランタイム | OS WebView(wry) | Chromium を同梱 | OS WebView |
| 言語 | TypeScript / React | TypeScript / React | TypeScript + Rust |
| 開発体験 | Next.js に近い構成(Vite HMR) | 手動で構成 | 手動で構成 |
| メモリ(アイドル時) | Electron の約 1/5* | 比較の基準 | 小さい傾向 |
| インストーラーサイズ | ~43 MB .dmg / ~120 MB .app† | ~80–150 MB* | ~3–10 MB* |
| Server Actions | defineAction / useAction | IPC を手動実装 | IPC / command を手動実装 |
* Electron/Tauri でよく引用されるおおよその目安であり、実測ベンチマークではありません。
† macOS で実測。.app はフル Node ランタイムを同梱しているため、サイズの大部分はそこから来ています。
Murasaki は、React / Next.js の知識を活かしながら、Rust や IPC の実装を最小限にして軽量なデスクトップアプリを作りたい開発者に適しています。
できること
- ファイルベースルーティング —
src/app/**/page.tsx、レイアウト、動的セグメント、loading/error/not-found、middleware.ts。詳しくはルーティングを参照してください。 - Server Actions —
'use server'とdefineAction/useActionを使い、Node.js 側の処理を型付きで呼び出せます。詳しくはServer Actionsを参照してください。 - Node Main — データベース、ソケット、Worker、バックグラウンド処理に使える常駐 Node.js プロセスと、型付きの
'use main'呼び出しを提供します。詳しくはNode Mainを参照してください。 - API Routes — Next.js 風の
src/api/**/route.tsによる HTTP エンドポイント。詳しくはAPI Routesを参照してください。 - ネイティブウィンドウ & メニュー — OS のウィンドウ、アプリケーションメニュー、対象範囲を限定できるコンテキストメニュー(macOS では
NSMenu)を利用できます。詳しくはNative APIsを参照してください。 - UI キット —
@murasakijs/ui、React Aria ベースのアクセシブルなコンポーネントライブラリです。詳しくはスタイリングとライブのコンポーネントを参照してください。 - 配布パッケージ — 複数アーキテクチャ向けのアプリバンドルを生成し、コード署名と公証にも対応します。詳しくは配布を参照してください。
バンドルは x64 / arm64 向けに、macOS(.app / .dmg)、Windows(.zip / .exe / .msi)、Linux(AppDir / .AppImage / .deb)の成果物を生成します。Linux のパッケージ署名、RPM、リポジトリメタデータへの対応はまだありません。
Murasaki は 1.0 未満です。Linux のパッケージ署名や、プロセス全体に関わる機能の OS スモークテストなど、本番採用前に確認すべき項目はプラットフォームと機能の状況で確認してください。