ClickOnce vs Java Web Start総括

互いにGUIアプリケーションの配布方法としてほぼ確立している技術であるが、両方使っている側から評価させて貰うと、WindowsというO/Sをクライアント側に使う限りにおいて(企業クライアントの8割はWindowsだろう)、現時点ではClickOnceの方が使い勝手が良い。

1. 配布のし易さ
どちらもできるだけ配布が簡単になるように考慮しているが、Javaの場合はIDE(統合開発環境)を使うのをを前提にした機能(主にウィザード)を提供できないので、現時点では設定ファイルに頼らざるを得ない所がある。それに対して.NETはVisual Studioのウィザードに従って、必要なファイルを選んで配置位置(主にUNCやURL)を指定するだけで配置が完了する。この差は大きい。
Java Web StartJNLPというプロトコル(単にファイルフォーマットとそのAPIだが)を知らないと配布が出来ないが、.NETはローカルアプリケーションとしてビルドが出来ればClickOnceデプロイが出来る訳だ。※

また、ClickOnceはMicrosofにしては珍しく、サーバ側にMicrosoftの製品を必要としない技術である。(WebサーバはHTTPとClickOnceMIMEさえ処理できればよく、IISである必要は無い)


2. 開発のし易さ
これも.NETの方が上だ。.NETはコードセキュリティをある程度意識する必要はあるものの、基本的には通常にビルドしたアプリケーションはClickOnce配布しても動く。
対してJava Web Startは、一般のアプリケーションとは違いjarアーカイブに格納した状態での配布が前提のため、現在のアプリケーションの実行コンテキスト(ローカル起動なのか、URL起動なのか、クラスや他のファイルを見つけてロードする方法が違うため)を意識してコーディングするケースがあるのが非常に面倒だ。

また、アプリケーションの版管理だが、Java Web Startはバイナリ(が格納されたjarファイル)をダウンロードする際の新旧版の比較は、通常はタイムスタンプに頼るしかないが(オプションでバージョン管理を行うためのJavaサーブレットをサーバ側に導入することができるが、それではサーバ環境がJavaに依存してしまう)、.NETは簡易なバージョンの比較と旧版にロールバックする仕組みを組み込みで持つ。


3. セキュリティ
両者ともにローカル環境のリソースにフルアクセスする場合には、全てのバイナリに対してディジタル署名が施されている必要があり(ディジタル署名が無い場合は非常に限られたサンドボックス条件の中でしか動作できない)、ほぼ同等といえる。ただし、アプリケーションコードのエビデンスと実行権限の細かい制御に関してはO/Sと密接につながりを持てる.NETの方が設定のしやすさは上だろう。


以上はあくまで定性的な評価であり、互いの技術を優劣を決めるものではない。

.NETのClickOnceは、それ以前に採用されておりJava Web Startに比べても不評だったノータッチ・デプロイメントでの反省をきちんと生かしており、一般のアプリケーションのように任意のグループ階層にインストールできないこと以外は、ノータッチ・デプロイメントの不満がほぼ解消されている。

それに対してJava Web Startは先行したものの基本的な部分は変わらず、その後Javaのメジャーアップデートと共に何度かの大きな修正を経てかなり良くなっているものの、以前に使った際に感じた根本的な部分(主に、jarアーカイブで配布することが前提なこと)が変更されておらず、ちょっと残念だった。

NetBeans等、最近のIDEはプロジェクトからJNLPを自動生成する等、Java Web Startの支援機能が提供されているケースがある。