特集 J#の真実 Part 1

インタビュー:
Javaプログラマに.NETの世界を開くJ#(1)

2001/11/14

Page1 Page2 Page3

 

マイクロソフト株式会社
デベロッパー・マーケティング本部
デベロッパー製品部
.NET Frameworkプロダクト・マネージャ
Visual J# .NETプロダクト・マネージャ
渡邊 忠典

―― 先ごろ発表され、英語版がダウンロード可能になったJ#とは、いったいどのようなものでしょうか?

 J#は、Javaプログラマが容易に.NET Frameworkでのプログラミングを始められるようにすることを目的として開発されたJava言語処理系です。そして、マイクロソフトがこれまで発売していたJava言語処理系のVisual J++ 6.0(以下VJ++ 6.0)で作成したプロジェクトを最新の.NET Framework環境に移行できることを目的としています。

 またJ#は、C# .NETやC++ .NET、Visual Basic .NETなどの他の言語処理系と同じく、統合開発環境であるVisual Studio .NET(以下VS .NET)の中から開発言語の1つとして使用可能になります。もちろん、デバッグを始めとするVS .NETの機能は他の言語と同様に使えますし、J#と他の言語を組み合わせて使うことも可能です。

→ J#英語版ベータ1のダウンロード・ページ

―― もう少し具体的に、J#の主要な機能を教えてください。

 Java言語コンパイラを搭載し、Java言語で記述されたソースコードをコンパイルして、.NET環境向けのMSIL(Microsoft Intermediate Language)コードを生成します。

 またJBIMPというツールも提供されており、これを利用すれば、Javaバイト・コードからMSILを生成できます。つまりバイナリ・コードの変換です。さらにVJ++ 6.0で作成したプロジェクトをアップグレードして、VS .NETに移行させることも可能です。

 クラス・ライブラリは3種類入っています。このうち1つは.NET Frameworkのクラス・ライブラリで、残る2つはJDK 1.1.4レベルのクラス・ライブラリと、マイクロソフトが拡張したクラス・ライブラリです。この拡張されたクラス・ライブラリには、VJ++ 6.0で使用可能だったWFC(Windows Foundation Class)などが含まれています。

 ターゲットはすべてMSILコードになります。MSILの生成方法として、J#は次の3通りを提供します。

J#を使ったMSILコード生成

 図の左端は、Javaバイナリ・コンバータであるJBIMPツールを使って、Javaバイト・コードをMSILに変換する方法です。こうして変換されたプログラムは、JDK 1.1.4レベルのクラス・ライブラリを.NET Framework上に載せて動作します。中央は、JavaのソースコードをJ#コンパイラでMSILにコンパイルする方法です。基本的にこれは、従来のVJ++ 6.0で作成されたソースコードをコンパイルして移行させることを目的とするものです。以上はいずれも、既存のJavaバイト・コードやJavaのソース・プログラムを移行させるものでしたが、図の右端は、J#を使ってJava言語でプログラムを作成し、これをコンパイルしてMSILにして、.NET Frameworkのネイティブな機能を使う方法です。

―― J#でプログラムをコンパイルすると、MSILのコードが生成されるとのことですが、Javaのバイト・コードは生成できないのですか?

 それはできません。J#は、Java VMで動作するプログラムを作るものではなく、.NET Framework上で動作するプログラムの作成を目的とした言語ツールです。

J#はJava VMで動作するプログラムを作るものではなく、.NET Framework上で動作するプログラムの作成を目的とした言語ツールです。

―― そのほか、一般的なJava開発環境とJ#ではどのような点が異なりますか?

 JavaアプレットやJNI(Java Native Interface:ネイティブコードでJavaメソッドを実装するためのインターフェイス)、RMI(Remote Method Invocation:リモートマシンにあるJavaオブジェクトのメソッドを呼び出すための手法)はサポートしていません。これらの条件は、VJ++ 6.0と同じです。JNIに相当する機能は、J++ではJ/Direct(JavaプログラムからWindows APIを呼び出し可能にするしくみ)を使えば実現できていました。J++にはJ/Directがあるため、JNIを使って別の言語でラッパー・オブジェクトを作り、それをインポートするという回りくどいことは不要だったのです。RMIについては、.NET FrameworkのRemoting機能やXML Webサービスを利用すればよいという立場から、サポートしていません。意見は分かれるところだと思いますが、今回のJ#は、単純にVJ++ 6.0でサポートしていたものはサポートし、サポートしていなかったものはサポートしないという方針をとっています。

―― 先ごろ米国で発売になったWindows XPでは、Java VMは標準では組み込まれていません。また、いまのお話では、J#はJavaバイト・コードの生成もできない。ある意味、Java VMによるハードウェアの仮想化はJavaの核心でもあると思うのですが、これをサポートせずに、果たしてJava言語処理系と言うことができるのでしょうか? マイクロソフトにとって、Javaとはどういう存在なのでしょうか?

 ご承知のとおり、Javaのライセンスに関するSunとMicrosoftの法廷闘争があり、この結果Microsoftは、製品に「Java互換」の商標を使わないこと、SunからのJavaライセンス契約を打ち切ることなどが決定されました。この影響によりMicrosoftは、Java VMの互換性やクラス・ライブラリについて、JDK 1.1.4以後のバージョンアップなどには対応できなくなりました。J#を説明するときに私たちは、「Java言語」をサポートする開発環境だと言っています。これは、言語仕様としてのJavaはサポートするということを意味しています。今述べたとおり、J#は、プラットフォームとしてのJavaはサポートしていませんし、サポートする予定もありません。

Windows XPでJavaアプレットを含むページを表示したときに表示されるダイアログ

 なお製品版のWindows XPには、標準ではJava VMが組み込まれていない代わり、必要なら弊社WebサイトからJava VMをダウンロードして組み込むことが可能です。ただし弊社が配布するのはあくまでJDK 1.1.4レベルのもので、最新版ではありません。

 繰り返しになりますが、J#の目的は、VJ++ 6.0サポートの一環として、VJ++ 6.0で開発したプロジェクトを.NET Frameworkに移行するためのパスを提供することです。そしてもう1つの目的は、Javaでのプログラミング経験を持つプログラマの人たちが、.NET FrameworkをベースとするXML Webサービスのプログラミングを始めやすくすることです。

J#の目的はVJ++ 6.0のサポートと、Javaプログラマが.NET FrameworkベースのWebサービス・プログラミングを始めやすくすることです。

 例えば、J2EE(Java 2 Enterprise Edition)で正式にWebサービスがサポートされたり、ライブラリが提供されたりするのは、次のJDK 1.4(現バージョンは1.3)になると言われています。このようなJ2EEのフレームワーク技術としての整備の遅れをカバーするために、アプリケーション・サーバのリーディング・エッジは独自にWebサービス対応を行っています。例えばBEAのWebLogicは、Webサービス対応の実装を独自に行って、提供を開始しようとしています。IBMのWebSphereでは、1.2をベースとしてラッパーを被せるという方法を使い、J2EEとは別にWebサービスを使えるようにしています。

 しかしその他の製品については、広くWebサービス開発が行えるようにはなっていません。企業ユーザーであれば、Webサービスに対応した、1CPUライセンスの平均価格が1万ドルを超えるような高価なアプリケーション・サーバを購入すればよいかもしれませんが、広く一般のプログラマがJavaベースでWebサービス開発を行えるかといえば、それは疑問です。

 つまり、Javaの言語スキルをもった人に.NET Framework上でもそのスキルを使って、Java言語でWebサービスを使っていただきたいということです。


 INDEX
  [特集]J#の真実
  Part 1 インタビュー:Javaプログラマに.NETの世界を開くJ#
   Javaプログラマに.NETの世界を開くJ#(1)
     Javaプログラマに.NETの世界を開くJ#(2)

 



Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間