});OSやアーキテクチャの違いを乗り越えるアプリケーションの実行環境として誕生したJavaは、いまや大規模システムから携帯電話まで、さまざまな分野でアプリケーションを開発し、実行する環境として使われています。そんな状況を反映して、書店にはたくさんの「Java入門」があふれています。ひとくちにJavaと言っても、学ぶ範囲は非常に広く、クライアントのJavaアプリケーションから、サーバサイドアプリケーション、携帯電話をはじめとする組み込みアプリケーションまであります。本連載が対象とする読者は、これからサーバサイドJavaで開発を行うが、Java言語をまだ学んだことがないエンジニアです。Java言語の文法や、オブジェクト指向ならではのプログラム構造などを解説し、サーバサイドJavaの学習要素であるServletやJSPを学べる段階まで読者を引き上げることを目的としています。BasicやCOBOLとは違うプログラミングの作法を習得してください。Edition)の入り口を説明します。そこまで来れば、本フォーラムのサーバサイドJavaの入門記事がすらすら読めるようになっているはずです。本連載は忙しいエンジニアの皆さんが空いた時間で学習できることを目指していますので、1回の解説はできるだけシンプルにしています。World!」の実行までを説明します。Javaの開発環境はどうなっている?Javaに限らず、ソースファイルから実行可能なファイル形式を作成するためには、ソースファイルを編集するためのテキストエディタ、ソースファイルを変換して機械が実行できるコードに変換するコンパイラやインタプリタなどのプログラムが必要です。)accept();elsereject();のように、人間が記述して理解できるテキストファイルのことです。57のように、人間には何のことだが分からないバイナリファイルのことです。実行コードはCPUが解釈して実行するためのものですので、人間が直接書くには無理があります。そこで、コンパイラやインタプリタといわれるプログラムを使って、ソースファイルを実行コードに変換するわけです。コンパイラとインタプリタの違いは何でしょうか?コンパイラ(compile:辞書などを編さんする)とは、個々のソースファイルを実行可能な形式のファイルに変換するためのプログラムのことです。プログラムを実行する前にソースファイルを実行可能な形式のファイルに変換します。C/C++などのコンピュータ言語がコンパイラ方式を採用しています。ソースファイルはコンパイラによってCPUが理解できる形式のファイルに変換されるので、速度が速く、ファイル単体で実行できるのがメリットです。CPUやOSの種類が異なるマシンでは、あらためてソースファイルを実行可能な形式のファイルに変換しないと実行できません。インタプリタ(interpret:通訳する)の役割は、実行時にソースファイルを逐一解釈して、CPUに処理させることです。JavaScriptのようなスクリプト言語の多くはインタプリタ方式のコンピュータ言語です。ソースファイルは、コンパイラによって実行可能な形式のファイルに変換されるのではなく、ソースファイルのままインタプリタによって解釈されて実行されます。インタプリタが解釈する手間がかかる分、速度は遅くなりますが、インタプリタさえあればCPUやOSの種類が異なるマシンでも実行できるメリットがあります。Javaはコンパイラ型のコンピュータ言語ですが、JavaのコンパイラはソースファイルをCPUが実行可能な形式のファイルには変換しません。Javaのコンパイラはソースファイルを「中間コード」に変換するのが仕事です。中間コードとは、ソースファイルにある文法的なエラーを取り除き、ソースファイルを機械が理解しやすいように加工したものです。上記のソースファイルを次のように変換したとします。05「01」は「if」、「02」は変数hostname、「03」は関数equals()、「04」は関数accept()、「05」は関数reject()を表すと決めておけば、実行時に「if」が「ig」にミスタイプしていないか、文の終わりの「;」を入力し忘れていないかといったエラーチェックを省略できます。CPUが理解できる実行形式のファイルではないけれども、ソースファイルよりは実行形式のファイルに近いので「中間コード」と呼ぶわけです。中間コードのままではCPUが理解できません。そこでJavaは、中間コードを解釈してCPUに実行させる仕組みとして「バーチャルマシン」という方式を使っています。Javaのバーチャルマシンとは、Javaのコンパイラが生成した中間コードを理解できる仮想的なマシンのことです。インタプリタがソースファイルを解釈して実行するのに対して、Javaのバーチャルマシンは中間コードをあたかも実行コードとして理解して実行するプログラムのことです。従って、CPUやOSの種類ごとにバーチャルマシンを用意すれば、WindowsでもMacintoshでも、同じ中間コードでプログラムを実行できるわけです。コンパイラがソースファイルを中間コードに変換し、バーチャルマシンが実行する(バーチャルマシンがあらかじめ用意されたどの実行コードを呼び出すのか判断してCPUに実行させる)コンパイラ型、インタプリタ型とJavaの違い以上見てきたように、ソースファイルを解釈してCPUが実行するまでの方法はいろいろあります。このように、実行可能なファイルを作成するためのプログラムをまとめて「開発環境」とか「処理系」(ただし「処理系」は実行する環境という意味の方が強い)といったりします。Machine)などが含まれます。SDKの「2」は、Javaのバージョン2という意味です。SDK」と総称します。Javaの開発環境を「JDK」と呼ぶことがあるのは、古い時代の名残です。SDKのインストールさて、実際にJavaでプログラミングを行う環境を構築してみましょう。ほとんどの読者はWindowsを使っていると思いますので、本連載ではWindowsでJavaを開発するための環境を構築する方法を説明します。SDKのインストーラはサン・マイクロシステムズのWebサイトからダウンロードできます(http://java.sun.com/j2se/downloads.html)。原稿執筆時の最新バージョンは1.4.1で、ファイルサイズは35.9Mbytesあります。スループットが4Mbit/sだとすると、1分少々程度でダウンロードできるはずです。1.インストーラの実行インストーラをダウンロードしたら、ファイルを実行してください。原稿執筆時の最新バージョンのファイル名は「j2sdk-1_4_1-windows-i586.exe」です。インストーラのウィザードに従いインストールを実行してください。ウィザードの指示にそのまま従うと、インストールされるディレクトリは「C:\J2sdk1.4.1」になります。Files\j2sdk1.4.1」に変更しました。SDKを使ってJavaアプリケーションを開発するには、Javaのコンパイラやバーチャルマシンが存在するディレクトリのパスをWindowsが見つけられるように環境変数を設定します。[システムのプロパティ]ダイアログの[詳細設定]タブにある[環境変数]ボタンを押します。「環境変数」ボタンを押す次に、環境変数[Path]の設定[「環境変数]ダイアログの[システム環境変数]リストから[Path]の項目を選んで[編集]ボタンを押します。[システム変数の編集]ダイアログが表示されたら、変数値にインストール先として「指定したフォルダ名\bin」を指定します。Files\j2sdk1.4.1\bin」を設定するという具合です。Files\j2sdk1.4.1\bin」のように「;」で区切ることで複数のディレクトリ名を設定できます。システム環境変数にパスを設定する初めてのJavaアプリケーションここまでの作業で開発環境は整いました。Javaアプリケーションを作ってみましょう。メモ帳や秀丸エディタで以下のソースファイルを入力し、「HelloWorld.java」というファイル名で保存してください。保存先のフォルダはどこでも構いません。Applications」というフォルダがあり、そこにJavaアプリケーションのソースファイルを保存するものとして説明します。World!");}}Windowsの標準設定では、「.java」という拡張子部分がエクスプローラで表示されません。これから「HelloWorld.java」をコンパイルしますが、拡張子が表示されないとコンパイルしたファイルとソースファイルの見分けがつかないことがあります。この機会に拡張子を表示するように設定を変えておくとよいでしょう。拡張子部分を常に表示させるには、コントロールパネルの[フォルダオプション]にある[表示]タブで、[登録されている拡張子は表示しない]のチェックボックスをオフにします。Javaのコンパイラはソースファイルをバーチャルマシンが解釈できる形式の中間コードに変換します。実際にアプリケーションを実行するときは、バーチャルマシンが中間コードを解釈します。この点はCやC++のコンパイラとは異なります。CやC++のコンパイラは、CPUが直接理解できる形式の機械語を生成します。中間コードを解釈する手間がない分、CやC++の方がJavaのアプリケーションよりも高速に動作します。CやC++のコンパイラが生成するコードはCPUの種類が異なると実行できません。Javaのコンパイラはバーチャルマシンが理解できる中間コードを生成しますので、JavaのアプリケーションはCPUが違っても動作します。CPUの違いをバーチャルマシンが吸収してくれるからです。Javaのコンパイラはインストール先フォルダの「bin」にある「javac.exe」というプログラムです。コンパイラはDOSプログラムですので、スタートメニューから「プログラム」→「アクセサリ」→「コマンドプロンプト」でDOS画面を表示させてから実行します。Applications」というとんでもなく長い名前のフォルダにあります。Applications"のように現在のフォルダを変更する必要があります。思い切ってソースファイルの保存場所を「C:\」にしてしまえば楽ですが、美しい方法ではありません。そこで、マイクロソフトの「PowerToys」に含まれるTweakUI(http://download.microsoft.com/download/whistler/Install/2/WXP/EN-US/TweakUiPowertoySetup.exe)や国産のWindows環境変更ソフトである「窓の手」(http://www.asahi-net.or.jp/~vr4m-ikw/)の手を借りることにしましょう。TweakUIや窓の手を使うと、フォルダを右クリックしたときに「コマンドプロンプト」というメニューが表示されるので、コマンドプロンプトでフォルダを移動する手間が省けるのです。Applications」になった状態でコマンドプロンプトが使えるというわけです。コンパイル話が横道にそれてしまいました。どんな方法でもよいので、とにかくコマンドプロンプトで「HelloWorld.java」を保存したフォルダを現在のフォルダにします。HelloWorld.javaとします。間があって、コンパイルが終わるはずです。万が一エラーが表示された場合は、環境変数Pathにjavac.exeのあるフォルダを登録しているか、ソースファイルに打ち間違いがないかを見直してください。Javaアプリケーション実行コンパイルが終わると、ソースファイルの拡張子が「.class」になったファイルが同じフォルダにできているはずです。今回は「HelloWorld.java」をコンパイルしましたので、「HelloWorld.class」です。これがJavaのコンパイラが生成した中間コードのファイルです。あとはJavaのバーチャルマシンで「HelloWorld.class」を実行するように指示すれば、初めてのJavaアプリケーションを実行できます。World!」と表示させるだけでずいぶん手間がかかりました。World!」を表示させたいのなら、perlなどのスクリプト言語を使えばコンパイルやバーチャルマシンの手を借りなくても済みます。したユーティリティでもいいですし、あるいはワープロやブラウザのようにもっと大規模なアプリケーションを開発するときのことを考えてみてください。アプリケーションは、プログラムを部品化して再利用することで開発コスト(お金と手間)を抑えるのが普通です。ところがスクリプトには部品を再利用するための効率的な方法が用意されていない場合がほとんどです。スクリプトを再利用するには、チームのほかのメンバーやサードパーティが作ったコードをコピー&ペーストするしかないのです。Javaには、アプリケーション構築に必要なプログラムの部品を、各プログラマがいちいち書いたり、誰かほかの人が書いたソースファイルからコピー&ペーストしたりしなくても済むように、「パッケージ」という仕組みが用意されています。World!」という語句を表示させるのに使った「System.out.println」の文は、パッケージとしてJavaの開発環境で用意された標準の機能を使っています。ところでパッケージの正体は?初めてのプログラムも実行できたことですので、今回は「パッケージ」という言葉の意味をほんの少し解き明かして終わりにしましょう。Files\j2sdk1.4.1)をエクスプローラで表示させると、「src.zip」というファイルがあるはずです。圧縮ファイルなので展開するとかなり大きなサイズになりますので、ここでは展開せずに右クリックメニューから「エクスプローラ」を選んでください(エクスプローラによるZIPファイルの閲覧はOSのバージョンによっては対応していません)。src.zipの内容(クリックすると拡大します)たくさんのフォルダと「.java」ファイルがあります。「HelloWorld」を出力するときに使った「System.out.println」という文は、src.zip内のフォルダ「java/Lang」にある「System.java」というファイルで定義されている機能を再利用するものです。SDKに含まれる「System.java」という2つのソースファイルの両方を解釈することで画面に文字を出力しているわけです。このように、ほかのソースファイルから利用して使うプログラムの部品の集まりをJavaでは「パッケージ」と呼びます。SDKに含まれるパッケージをいちいちコンパイルするのは効率的ではありません。それに、基本的なパッケージ(コアパッケージと呼ばれる)はユーザーが変更してはいけないことになっています。あれば、コアパッケージのソースファイル(.javaファイル)は、あらかじめすべて中間コードにしておいた方が便利です。コンパイラはユーザーが作ったソースファイルだけを中間コードに変換すればよくなります。バーチャルマシンはコンパイラが生成した中間コードと、あらかじめ用意されたコアパッケージの中間コード(.classファイル)の両方を解釈してプログラムを実行した方が、全体の作業にかかる時間を大幅に短縮できるはずです。SDKに含まれるコアパッケージの中間コードは、すべてrt.jar(run-timeの略と思われる)というファイルに格納されています。ARchive」の略で、実際にはZip形式の圧縮ファイルです。Javaのバーチャルマシンは、実行時に必要中間コードファイルをrt.jarから解凍して取り出しているわけです。「.jar」ファイルの拡張子を「.zip」に変更するとZip形式の圧縮ファイルとして扱えるようになります。rt.jarを直接いじるのは危険ですので、必ず別の場所にコピーしてから拡張子を.zipに変更し、多数の.classファイルが格納されていることを確認してみてください。World!」を題材に、Java言語の本質に少しだけ迫ってみましょう。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。