Electronのバンドルサイズに悩んでいるが、Rustは学習コストが高い。Javaの資産を活かしつつ軽量なデスクトップアプリを作りたい開発者に、新しい選択肢が登場しました。

この記事でわかること:

  • Kremaの設計思想とElectron・Tauriとの違い
  • Project Panamaを使ったJNI不要のネイティブ連携の仕組み
  • 型安全なIPCブリッジの書き方
  • セットアップ手順と対応フレームワーク

Java版Tauriという立ち位置

https://krema.build/

Kremaは、Javaバックエンド+Webフロントエンド構成のデスクトップアプリケーションフレームワークです。2026年2月にGitHubで公開されました。公式サイトでは「Rustに対するTauriが、Javaに対するKrema」と位置づけています。

Electronとの最大の違いは、Chromiumをバンドルしない点です。macOSならWebKit、WindowsならWebView2、LinuxならWebKitGTKと、OSが標準で持つWebViewを利用します。これにより、Electronで150MB前後になるバンドルサイズが約5MBまで縮小します。

Electron・Tauriとの比較

3つのフレームワークの主な違いを整理します。

項目 Electron Tauri Krema
バックエンド言語 JavaScript Rust Java
WebView Chromium同梱 システム標準 システム標準
バンドルサイズ 約150MB 約3MB 約5MB
メモリ使用量 高い 低い 低い
エコシステム npm Cargo Maven + npm

Tauriと比べるとバンドルサイズは2MB大きい程度です。一方で、バックエンド言語がJavaなので、Mavenの豊富なライブラリやSpringフレームワークをそのまま利用できます。Rustの学習コストを避けたいJava開発者にとって、Kremaは有力な選択肢になります。

Project PanamaでJNIを排除

KremaはJava 25以降で導入されたProject Panama(Foreign Function & Memory API)を使い、ネイティブAPIを呼び出しています。従来のJNIと比べた利点は明確です。

JNIではCコードのラッパーを書き、コンパイルし、プラットフォームごとにバイナリを管理する必要がありました。Project PanamaではJavaコードだけでネイティブ関数を直接呼び出せます。ビルドの複雑さが大幅に減り、メンテナンスも楽になります。

ただしJava 25以上が必須になるため、古いJDKを使っているプロジェクトではそのまま導入できません。

型安全なIPCブリッジ

Kremaの開発体験を特徴づけるのが、@KremaCommandアノテーションによるIPCです。Javaのメソッドにアノテーションを付けるだけで、フロントエンドから型安全に呼び出せます。

Java側のコード例:

@KremaCommand
public String greet(String name) {
    return "Hello, " + name + "!";
}

フロントエンド側:

const greeting = await window.krema.invoke<string>('greet', { name: 'World' });

Javaからフロントエンドへのイベントプッシュにも対応しています。リアルタイム通知やバックグラウンド処理の進捗表示といったユースケースを、追加ライブラリなしで実装できます。

対応するフロントエンドとネイティブAPI

フロントエンドはReact、Vue、Angular、Svelte、または素のHTML/CSS/JSを選べます。CLIでプロジェクトを作成するとき、テンプレートを指定するだけで環境が整います。

ネイティブAPIも一通り揃っています。ウィンドウ管理、メニュー、ファイルダイアログ、通知、クリップボード、システムトレイ、グローバルショートカット、ドラッグ&ドロップ、セキュアストレージなど、デスクトップアプリに必要な機能をカバーしています。

プラグインシステムも用意されており、SQLite、WebSocket、ファイルアップロード、ウィンドウポジショニング、自動起動といった公式プラグインが利用可能です。

セットアップ手順

前提条件はJava 25以上とMaven 3.9以上です。

npm install -g @krema-build/krema
krema init my-app --template react
cd my-app && krema dev

3コマンドでReact+Javaの開発環境が立ち上がります。ホットリロードに対応しているため、フロントエンドの変更は即座に反映されます。

配布時はGraalVMを使ったネイティブバイナリの出力か、JARファイルとしての配布を選べます。コード署名やmacOSの公証にも対応しており、CLI一発でクロスプラットフォームビルドが完了します。

現時点での注意点

Kremaはまだ新しいプロジェクトです。GitHubスターは約100で、コミュニティの規模はElectronやTauriと比較して小さい段階です。ライセンスはBSL 1.1(Business Source License)で、2030年以降にApache 2.0へ移行する予定です。商用利用を検討する場合はライセンス条項の確認が必要です。

対応プラットフォームはmacOS(ARM64/x64)、Windows(x64)、Linux(x64)で、WindowsのARM64には現時点で対応していません。

まとめ

Kremaは「JavaエンジニアがRustを学ばなくても軽量デスクトップアプリを作れる」という問題を解決するフレームワークです。Project Panamaによるモダンなネイティブ連携と、Tauriに匹敵するバンドルサイズの小ささが強みです。Java資産を活かしたデスクトップアプリ開発を検討しているなら、選択肢に入れてよいプロジェクトです。