トレンドニュースサイト STRAIGHT PRESS【 ストレートプレス 】

NTTレゾナントテクノロジー株式会社

NTTレゾナントテクノロジー、Kotlin・Java で「本物の Windows ネイティブ UI」を実現するOSSライブラリ「WinUI4K」を Apache License 2.0 で公開

このエントリーをはてなブックマークに追加

ブリッジDLLなしでJVMからWinUIを直接利用。60超のGUIコントロールと多数のサンプルアプリを同梱。

 NTTレゾナントテクノロジー株式会社(本社:東京都千代田区大手町、代表取締役:三澤 淳志)は、プログラミング言語 Kotlin および Java から、Windows の最新GUIフレームワーク「WinUI」を直接利用できるオープンソースソフトウェア(OSS)ライブラリ WinUI4K を、Apache License 2.0 で GitHub に公開しました。

 WinUI は、Microsoft が Windows 11 世代の標準として推進する画面表示の仕組みで、ボタンやメニューといったGUI部品(コントロール)と、Fluent Design に基づく現代的な見た目を提供します。

 WinUI4K は、Apache License 2.0 の元、商用でも非商用を問わず無償で利用できます。WinUI4K を使うと、Windows 開発で一般的な C#(Microsoft のプログラミング言語)も、統合開発環境 Visual Studio も、言語同士をつなぐ独自のブリッジDLL(自作の中間ファイル)も用意することなく、Kotlin や Java だけで Windows ネイティブのデスクトップアプリを作れます。

 仕組みとしては、JVM(Java や Kotlin を動かす実行基盤)が持つ外部関数呼び出し機能(FFI)を使い、Windows の内部API基盤である WinRT ABI を直接呼び出しています。
 
 本ライブラリは、Windows のネイティブアプリを Kotlin・Java で実現するための研究の一環として試作したものです。今後、当社が提供するテスト端末クラウドサービス「Remote TestKit」のPCクライアント(Windows用アプリ)でも、この成果を活かしていく予定です。

リポジトリ: https://github.com/nttr-tech/winui4k
※WinUI4K のサンプルギャラリー。すべて Kotlin で書かれています。

3行でわかる WinUI4K
- Windows の最新GUI「WinUI」を、C#ではなく Kotlin・Java で書ける。
- Visual Studio も .NET SDK もブリッジDLLも不要。手元に JDK(Java の開発キット)があれば始められる。
- 画面部品の組み立て方は Swing(Java 定番のGUIツールキット)に近く、既存のSwing/Java資産の知識がそのまま活きる。

背景:Windowsデスクトップ開発に残る「言語の壁」
 Microsoft は WinUI を今後の Windows アプリ画面の中心に据えており、Windows 標準アプリの一部も WinUI へ移行しています。

 一方で WinUI が公式に開発言語として想定するのは C++ や C# で、業務システムで広く使われている Java や Kotlin(まとめて JVM 系言語)からは、これまで実用的に扱う手段がほとんどありませんでした。そのため、Java/Kotlin の資産(既存のコードや社内の知見)を持つ現場が Windows ネイティブUIを採用しようとすると、C# への全面的な書き換えや、Web技術でデスクトップアプリを作る Electron のような別方式への移行を迫られてきました。どちらも、慣れた言語やライブラリを手放すコストがかかります。
 
 WinUI4K は、この「言語の壁」を取り払うために開発しました。Java や Kotlin の知識と資産を保ったまま、Windows のネイティブUIを利用できるようにするのが狙いです。

この記事に出てくる用語
はじめての方向けに、本文で使う言葉を先に整理します。
- GUI:ボタンや入力欄などの部品を画面に並べて操作するユーザーインターフェース。文字だけの操作(CUI)の対になる言葉。
- WinUI:Microsoft が提供する Windows の最新GUIフレームワーク。現代的な見た目(Fluent Design)のGUI部品を備える。
- WinRT と COM:Windows の機能をアプリから呼ぶためのAPI基盤が WinRT。その土台にある、言語をまたいで部品を呼び出す古くからの仕組みが COM。
- ABI:プログラム同士が機械語レベルでやり取りするときの約束事。WinUI4K はこの低レベルの約束事を直接扱う。
- C# と .NET:Microsoft が WinUI 開発で標準的に想定する言語(C#)と、その実行基盤(.NET)。
- JVM、Java、Kotlin:Java や Kotlin を動かす実行基盤が JVM。Kotlin は Java と相互運用できる、近年人気の言語。
- Swing と JavaFX:Java で長く使われてきたGUIツールキット。多くの業務アプリの画面がこれで作られてきた。
- FFI(Panama、JNA、JNR):ある言語から、OSや別言語のネイティブ関数を直接呼び出す仕組み。Panama は Java 22 で標準化された機能、JNA と JNR は Java 8 から使えるライブラリ。
- ブリッジDLL:異なる言語をつなぐために自作する中間のネイティブDLL(部品ファイル)。WinUI4K では不要。
- WebView2:アプリの中に Microsoft Edge のブラウザ画面を埋め込むための部品。
- コルーチン:Kotlin が備える、非同期処理を読みやすく書くための仕組み。

WinUI4K の特徴
数字で見る WinUI4K
- 60超 のWinUIコントロール(GUI部品)を提供。ボタン(Button)や入力欄(TextBox)から、画面遷移用のナビゲーション(NavigationView)、吹き出しヒント(TeachingTip)、ウィンドウ制御(AppWindow)まで。
- 3種類 のFFIバックエンド(Panama、JNA、JNR)を同梱し、実行環境の Java バージョンに合わせて差し替え可能。
- 3アーキテクチャ(x64 / x86 / arm64)の Windows に対応(利用するFFIバックエンドにより対応範囲は異なります)。
- Java 8 以降 で動作。最新の Java 22 以降では、Java 標準の外部関数API(Foreign Function & Memory API、通称 Panama)を利用。

従来のWinUI開発と比べて

※ 上表は一般的な開発手法との比較であり、公開時点の情報に基づきます。従来の手法でも構成によっては当てはまらない場合があります。

開発チームがこだわった点
- ブリッジDLLなしのCOM連携:Windows のCOM/WinRTは本来 C++ や C# から扱う前提の低レベルな仕組みですが、WinUI4K はその細部(オブジェクト生成の RoGetActivationFactory、文字列型 HSTRING、関数テーブル vtable の呼び出し、Javaオブジェクトを COM 部品として見せる upcall、COM集約)まで JVM のFFIだけで実装しています。中間DLLを一切挟みません。
- Swing/JavaFXの知識をそのまま流用:ウィンドウ(WFrame)やボタン(WButton)といった部品を、Swing と同じ感覚のAPIで組み立てられます。新しいUIの考え方を一から覚え直す必要がありません。
- 推測値ゼロのABI:COM呼び出しに必要な識別子(IID)や関数テーブル上の位置(vtableスロット)は、すべて Windows の型情報ファイル(Windows Metadata、winmd)から機械的に抽出した値を使っています。手書きの推測値は含みません。
- WebView2でブラウザ機能も:WWebView で WebView2(Microsoft Edge ベースのブラウザ部品)を画面に組み込め、Webページの表示や、HTML/CSS/JavaScript で作ったUIをアプリ内に載せられます。
- コルーチン対応(拡張ライブラリ):拡張ライブラリ WinUI4K-extension-coroutines を追加すると、Kotlin のコルーチン(非同期処理)から Dispatchers.WinUi でUIスレッドへ安全に切り替えられ、delay などもネイティブのタイマーで動きます。
- アクセシビリティ:WinUIネイティブのコントロールをそのまま使うため、スクリーンリーダー(画面読み上げ)などOS標準のアクセシビリティ機能がそのまま働きます。

こんな方に向いています
- Swing や JavaFX で作った Windows 業務アプリの見た目を、今風の WinUI に刷新したい。
- 新しく C# と .NET を覚えるより、慣れた Java/Kotlin のまま Windows アプリを作りたい。
- Web技術ベースの Electron は手軽な半面、ブラウザエンジンを同梱する方式のため配布サイズやメモリ使用量が大きくなりやすい点が気になる。
- Kotlin のコルーチンや Java の最新機能を活かして、モダンなデスクトップアプリを書きたい。

まず動かしてみる
必要なのは JDK 25(x64、Java の開発キット)だけです。
Visual Studio も、C++ ビルドツールも、.NET SDK もいりません。
次のコマンドを実行するだけで、上のスクリーンショットのサンプルギャラリー(全コントロールのデモアプリ)が起動します。

WinUI を動かすための実行基盤(Windows App SDK ランタイム)が未導入でも、WinUI4K が起動時に自動でセットアップします。
ビルドが終わると、Fluent Design の Windows アプリが立ち上がります(初回はライブラリのダウンロードなどで、環境によって時間がかかることがあります)。
同梱のサンプルギャラリーでは、対応する60種以上のGUIコントロールをカテゴリ別に一覧でき、その場でクリックやスクロールをして挙動を確認できます。
自分のアプリに組み込む前に、どんな部品が使えるかをまとめて見比べられます。
コードは、Swing を書いたことがあれば違和感なく読めます。
次は、テキスト入力欄(WTextField)とボタン(WButton)を1つずつ置き、押すと挨拶を表示する例です。

このコードで、ネイティブの Windows ウィンドウ(WFrame)が開き、ボタンを押すとその文字が書き換わります。Java 8 と JNA で動かす .¥gradlew :winui4k-sample-gallery:runJna、Java 8 と JNR で動かす .¥gradlew :winui4k-sample-gallery:runJnr も用意しているので、古い Java 環境での動作も同じ手軽さで確認できます。

開発者コメント
開発担当者:久納 孝治氏
「WinUI はきれいな画面を手軽に作れる一方で、C# と Visual Studio が前提になっていて、Java/Kotlin の現場からは距離がありました。WinUI4K は、その距離をなくせるかを確かめるための研究として作り始めたライブラリです。Java/Kotlin で本物の Windows ネイティブUIを実現できるかを本気で確かめたかったからこそ、"とりあえず動くデモ"で終わらせず、60を超えるGUIコントロールを揃え、Java 8 の現場でも使えるところまで作り込みました。Swing を触ったことがある方なら、たいてい説明なしでコードを読めます。同じように Windows ネイティブUIで困っている方に、そのまま届けたいと考えて公開します。ぜひ一度試してみてください。」

今後の展開
WinUI4K は、対応するGUIコントロールの拡充と、WinUI 本体の進化への追随を続けます。
あわせて、Swing や JavaFX の資産をより直接的に移行できるラッパーの整備や、利用頻度の高い WinRT 機能への対応を進めていきます。日本語でのサポートやドキュメント整備にも力を入れ、国内の開発現場で使いやすいOSSを目指します。
 
 不具合報告や機能要望、プルリクエストは GitHub の Issue で受け付けています。

プロジェクト情報
- 名称:WinUI4K(WinUI for Kotlin & Java)
- ライセンス:Apache License 2.0(同ライセンスの条項に従い、商用・非商用ともに無償で利用可)
- リポジトリ:https://github.com/nttr-tech/winui4k
- 動作環境:Windows 11(x64)。Windows 10 1809 以降でも動作する想定
- 必要環境:JDK 25(x64)でビルド/起動。ライブラリ自体は Java 8 以降で動作
- 言語/技術:Kotlin、JVM の FFI(Panama / JNA / JNR)、WinRT、Windows App SDK

会社概要
社名:NTTレゾナントテクノロジー株式会社
所在地:東京都千代田区大手町1-5-1 大手町ファーストスクエア イーストタワー12F
代表者:三澤 淳志
設立:2012年4月
URL:https://nttr-tech.co.jp/
主なサービス:インターネット経由で実機のスマートフォンを利用できるテスト端末クラウドサービス「Remote TestKit」(https://appkitbox.com/

商標・注記
- 本文中の比較は、一般的な開発手法との比較であり、公開時点の情報に基づきます。仕様や対 応状況は今後変更される場合があります。
- Windows、WinUI、Visual Studio、.NET、Microsoft Edge、WebView2、Windows App SDK、 Windows Metadata、Fluent Design は、米国 Microsoft Corporation の米国およびその他の国におけ る商標または登録商標です。
- Java は、Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録 商標または商標です。
- Kotlin は、Kotlin Foundation の商標です。
- その他、本文に記載の会社名、製品名、サービス名は、各社の商標または登録商標です。本文 では TM、(R)、(C) などの表示を省略しています。

企業プレスリリース詳細へ
PR TIMESトップへ

最新情報をXで受け取ろう!
前の記事
一覧へ戻る
次の記事