Java入門|JavaはどのOSでも動く

Javaの大きな魅力は、作ったプログラムをさまざまなOSで動かせることです。

Javaを学び始めると、まずはコードを書いて、コンパイルして、実行する流れを覚えることが大切です。ここまで学んできた内容だけでも、Javaプログラムを自分の手で動かせるようになり、かなり大きな一歩を踏み出せています。けれども、Javaの魅力はそれだけではありません。Javaには、作成したプログラムを異なる環境でも動かしやすいという、とても大きな特徴があります。

ふつう、プログラムは作成したコンピュータの環境に強く影響されます。たとえば、Windowsで使うために作ったプログラムを、そのまま別のOSで動かすのは簡単ではないことがよくあります。ところが、Javaでは、コンパイルしてできたクラスファイルがあれば、WindowsでもUNIXでも、原則として同じように実行することができます。これはJavaを学ぶうえで、ぜひ早い段階で知っておきたい大切なポイントです。

このページでは、Javaプログラムがなぜ異なるOSでも動かせるのか、クラスファイルにはどんな役割があるのか、ほかの言語と比べると何が違うのかを、やさしく丁寧に説明していきます。Javaの仕組みの強みが見えてくると、これまで学んできた ソースファイル、コンパイル、クラスファイル、実行 という流れも、さらに深く理解できるようになります。

Javaプログラムはほかの環境でも使える

この章では、Javaプログラムの作成と実行の基本手順を学んできました。
テキストエディタでコードを入力し、コンパイルしてクラスファイルを作り、java コマンドで実行するという流れです。

ここで注目したいのは、コンパイルして作成された クラスファイル です。
Javaでは、このクラスファイルがあれば、Windows でも UNIX でも、原則として同じように実行することができます。

つまり、Javaでは、作成したプログラムを ある特定のOSだけのもの にしなくてよいのです。異なる環境のコンピュータであっても、Javaの実行環境が用意されていれば、同じクラスファイルを使ってプログラムを動かせます。

これはとても大きな特徴です。
Javaは、書いたコードをいろいろな環境で使いやすい言語として知られています。

なぜJavaはどのOSでも動きやすいのか

この理由を理解するためには、Javaの コンパイルの結果何ができるのか を思い出すとわかりやすいです。

Javaでは、ソースファイルをコンパイルすると、直接 Windows 専用の実行ファイルや UNIX 専用の実行ファイルができるわけではありません。作られるのは クラスファイル です。このクラスファイルの中には、バイトコード と呼ばれる特別な形式のコードが入っています。

このバイトコードは、ある特定のOSだけのために作られたものではありません。
そのため、各OSに用意された Java の実行環境が、このバイトコードを読み取って実行することで、異なるOSでも同じクラスファイルを動かせるのです。

Javaの流れを整理すると

段階内容
1Javaのソースファイルを書く
2javac でコンパイルする
3クラスファイルが作成される
4各OS上の java がクラスファイルを実行する

この流れを見ると、Javaは OSごとに別々の完成品を作る のではなく、まず共通のクラスファイルを作り、それを各環境で実行する仕組みになっていることがわかります。

クラスファイルの役割

Javaを理解するうえで、クラスファイルはとても大事な存在です。
クラスファイルは、ソースファイルをコンパイルした結果できるファイルで、拡張子は class です。

たとえば、次のようなプログラムを Sample1.java として作成したとします。

ファイル名:Sample1.java

class Sample1
{
    public static void main(String[] args)
    {
        System.out.println("はじめてのJavaコードです。");
    }
}

このファイルを javac Sample1.java でコンパイルすると、Sample1.class が作成されます。
この Sample1.class が、ほかの環境でも利用できる中心的なファイルです。

ファイルの役割の違い

ファイル役割
Sample1.java人が書いた元のコード
Sample1.classコンパイル後に作られるバイトコード入りのファイル

Javaでは、この class ファイルがあることで、WindowsでもUNIXでも同じプログラムを実行しやすくなります。

ほかの言語ではどうなるのか

Javaの特徴を理解するには、ほかのプログラミング言語の一般的な流れと比べてみると、とてもわかりやすいです。

多くのプログラミング言語では、コンパイルすると、その環境向けの 実行可能なプログラム が作られます。
このとき、Windows向けに作られた実行形式のプログラムは、そのまま UNIX で動かせないことがよくあります。反対に、UNIX向けに作られたものは、Windowsではそのまま使えないことがあります。

つまり、通常は OSごとに別々のプログラムを作りなおす必要がある のです。

一般的な言語とJavaの違い

項目Javaほかの多くの言語
コンパイル後にできるものクラスファイルOSごとの実行可能プログラム
WindowsとUNIXでの扱い同じクラスファイルを使いやすい環境ごとに作りなおすことが多い
移植しやすさ高い環境依存になりやすい

この違いが、Javaの大きな強みになっています。

Javaが強い理由

いまでは、さまざまな環境のコンピュータがネットワークでつながって使われています。
開発する人のパソコンは Windows かもしれませんし、実際に動かすサーバーは UNIX 系かもしれません。あるいは、チームのメンバーごとに使っているOSが違うこともあります。

そのような場面で、Javaの 同じクラスファイルをさまざまな環境で使いやすい という性質は、とても大きなメリットになります。

Javaの強みが生きる場面

場面Javaのよさ
開発環境と実行環境のOSが違う同じクラスファイルを使いやすい
複数のOSが混在するチーム開発環境差の影響を減らしやすい
ネットワーク上でさまざまな機器を使う共通の考え方で動かしやすい

Javaは、単にプログラムを書ける言語というだけでなく、いろいろな環境で使いやすいように考えられた言語なのです。

Javaの実行環境が大切になる

ここでひとつ大事なのは、クラスファイルさえあれば何もいらない、という意味ではないことです。
各OSで Javaプログラムを動かすには、その環境に Java の実行環境が必要です。

つまり、

  • Windows には Windows 上で動く java
  • UNIX には UNIX 上で動く java

が必要になります。

けれども、実行環境さえ整っていれば、その上で動かす対象としては同じクラスファイルを使える、というのが Java の大きな特徴です。

ここを整理すると

必要なもの役割
クラスファイル実行したいプログラム本体
各OSの Java実行環境そのOS上でクラスファイルを動かすための仕組み

このように、OSごとに違うのは 実行するための土台 であり、プログラム本体としてのクラスファイルは共通で使いやすい、というイメージです。

この図の上段では、Javaのソースファイルをコンパイルしてできたクラスファイルを、WindowsでもUNIXでも使える流れを表しています。ポイントは、真ん中にあるクラスファイルが共通であることです。各OSにはそれぞれの java 実行環境がありますが、実行する対象としては同じクラスファイルを利用できます。

下段では、ほかの言語の一般的な流れを示しています。こちらでは、Windows向けとUNIX向けで、それぞれ別々の実行可能プログラムを作る必要があります。図を見比べることで、Javaは 共通のクラスファイルを使いやすい という大きな特徴を持っています。

Javaの学習でこの特徴を知っておく意味

Javaを学び始めたばかりのうちは、コードの入力やコンパイル、実行そのものに意識が向きやすいです。もちろん、それはとても大切です。ただ、その先を考えると、Javaがなぜ広く使われてきたのかを知ることも大きな意味があります。

Javaが支持されてきた理由のひとつが、作成したクラスファイルを異なるOSでも活用しやすい点です。
これは、学習用の小さなプログラムでも、将来の大きなシステムでも、同じ考え方につながっています。

この特徴を早い段階で知っておくと、Javaの

  • ソースファイル
  • コンパイル
  • クラスファイル
  • 実行

という流れが、単なる手順ではなく、異なる環境で使いやすくするための仕組みでもあることが見えてきます。

Javaのクラスファイルは橋渡し役

Javaでは、ソースファイルをそのまま各OS向けに変換するのではなく、まず共通のクラスファイルを作ります。
このクラスファイルが、書いたコードと、さまざまなOSとのあいだをつなぐ橋渡し役になっています。

この考え方を持っておくと、Javaの設計のよさがよくわかります。
プログラムを作る人は Java言語でコードを書き、コンパイルしてクラスファイルを作る。そして、そのクラスファイルを各環境の Java実行環境が受け取って動かす。この役割分担があるからこそ、Javaは 異なるOSでも動かしやすい言語 として大きな強みを持っているのです。

Javaを学ぶときは、ただコードが動くことだけでなく、そのコードがどんな仕組みで いろいろな環境で動かせるようになっているのか まで意識すると、理解が一段深くなります。今回のテーマは、Javaの大きな魅力を知るための、とても大事なポイントです。