先日、簡易的なデスクトップアプリの実装例としてvue-nest-desktop-app(Vue.js + NestJSでデスクトップアプリを実装する)を紹介したが、バックエンドの開発はNode.jsよりもJava(Spring Boot + Jersey)の方が慣れているので、バックエンドをJavaで置き換えたvue-jersey-desktop-appを作成した。
以下では開発のポイントを簡単にまとめている。
アプリケーション構成
- バックエンドはSpring Bootで開発している。埋め込みTomcatを組み込んだ実行可能jarファイル(いわゆるfat jar)にビルドして配布し、ローカルで起動したアプリケーションサーバーにブラウザからアクセスして利用する構成としている。
- フロントエンドはVue.jsで実装し、ビルドしたHTML、CSS、JavaScriptをバックエンドのWebサーバー機能(spring-boot-starter-web)で静的ファイルとして配信する。
- 主な機能はバックエンドでRestful API(spring-boot-starter-jersey)として提供し、フロントエンドからのAPI呼び出しで利用する形としている。
Spring Bootのデスクトップアプリ化
Spring Bootをデスクトップアプリ化するために以下の工夫を入れている。
- ログをSwingで実装したウィンドウに表示し、ウィンドウを閉じたときにアプリケーションが停止するようにする。(jarを実行したときにアプリケーションがバックグラウンドで起動するだけでは、起動中かどうかの判別や、プリケーションの停止がしにくいため。)
- アプリケーションサーバーはローカルマシンの空きポートを探して起動し、起動後にシステム(デフォルト)ブラウザでフロントエンドのトップ画面を自動で開く処理を入れている。
- 参考:Browser.java
外部のRestful APIの呼び出し
ローカルで動作するWebサーバーでホストされたフロントエンドにブラウザでアクセスするため、他のオリジンとなる外部のWeb APIにフロントエンドから直接アクセスすることができない。そのため、バックエンド側でAPIのプロキシ機能(開発用のクローズドなAPIにもアクセスできるようにSSHポートフォワーディングにも対応)じを実装している。