Java入門|Javaコードのコンパイル手順

入力したJavaコードは、コンパイルしてはじめて動く準備が整います。

Javaの学習では、コードを入力して保存しただけでは、まだプログラムを動かすことはできません。ここで登場する大切な作業が コンパイル です。Javaを学びはじめたばかりのころは、コードを書いたらすぐ実行できそうに感じるかもしれませんが、Javaではその前にひとつ大事な変換作業が必要になります。

この変換作業を行うことで、私たちがテキストエディタで入力したソースファイルは、コンピュータが実行のために扱いやすい形へと変わります。つまり、コンパイルは Javaプログラムを動かすための準備作業 です。この流れを理解しておくと、Javaのプログラムがどのように作られ、どのように実行へ進んでいくのかが、とてもわかりやすくなります。

この記事では、Javaコードのコンパイルとは何か、なぜ必要なのか、Windows PowerShell を使ってどのようにコンパイルするのか、コンパイル後に何が作られるのか、そしてエラーが出たときにどこを確認すればよいのかまで、順を追ってやさしく説明していきます。はじめての人でも流れがしっかりつかめるように、基本からていねいに見ていきましょう。

コンパイルとは何か

「Javaコードの入力」で作成した Sample1.java は、画面に はじめてのJavaコードです。 という文字を表示するプログラムでした。せっかく入力したコードですから、すぐに動かしてみたくなりますよね。ですが、Javaでは、ソースファイルを作成しただけではそのまま実行できません。

その理由は、Javaで書かれたコードが、まだ実行用の形になっていないからです。
まず必要になるのが コンパイル という作業です。

コンパイルとは、Javaで書かれたコードを、バイトコード と呼ばれる特別な形式に変換することです。この変換を行うソフトウェアを コンパイラ といいます。

Java学習では、この考え方がとても大切です。
つまり、Javaプログラムは次のような流れで進みます。

手順内容
1ソースファイルを作成する
2コンパイルする
3実行する

この順番を知っておくと、今自分がどの段階にいるのかがわかりやすくなります。

なぜコンパイルが必要なのか

Javaのコードは、人間にとって読みやすい形で書かれています。
しかし、コンピュータはそのままではその内容を直接実行できません。そこで、コンパイラが登場します。

コンパイラは、人が書いたJavaコードを読み取り、実行の準備ができた形へ変換します。
この変換後の内容が バイトコード です。そして、そのバイトコードが保存されたファイルが クラスファイル です。

ここを整理すると、次のようになります。

もの役割
ソースファイル人が書いた元のJavaコード
コンパイラソースファイルを変換するソフトウェア
バイトコード変換後の特別な形式のコード
クラスファイルバイトコードが保存されたファイル

つまり、コンパイルは、ソースファイルをクラスファイルへ変える作業だと考えると、とてもわかりやすいです。

コンパイルの前に準備すること

コンパイルを行うには、まず Windows PowerShell もしくはコマンドプロンプトを起動します。
そのうえで、ソースファイルが保存されているディレクトリへ移動します。

ここでいう ディレクトリ とは、Windowsでいうフォルダのことです。
Javaでは、今いるディレクトリを基準にしてファイルを扱うため、ソースファイルがある場所へ移動しておくことが大切です。

たとえば、Sample1.java を Cドライブの下の Java ディレクトリ内にある 01 ディレクトリに保存した場合は、次のように移動します。

PS C:\Users\ユーザー名> cd \Java\01
PS C:\Java\01>

このように表示が変われば、現在のディレクトリが C:\Java\01 に移動したことがわかります。

cdコマンドの意味

コマンド役割
cdディレクトリを移動する
\Java\01移動先のディレクトリ

cd のあとには空白を入れてから、移動先のディレクトリ名を書きます。
この 空白を1つ入れる という点も、コマンド入力では大切なルールです。

コンパイラを実行する

ソースファイルのあるディレクトリへ移動できたら、いよいよコンパイラを起動します。
JDK のコンパイラを起動するには、javac というコマンドを使います。

今回コンパイルするのは Sample1.java です。

ファイル名:Sample1.java

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

このファイルをコンパイルするには、PowerShell で次のように入力します。

PS C:\Java\01> javac Sample1.java

このとき大切なのは、javac のあとに空白を1つ入れて、ソースファイル名を .java まで含めて正しく入力することです。

コンパイル時の入力ルール

項目内容
コマンド名javac
空白javac のあとに1つ入れる
指定する名前Sample1.java
拡張子.java まで忘れずに入力する

ここで .java を省略してしまうと、正しくコンパイルできません。
実行時の java コマンドとは違い、コンパイル時には ソースファイル名を拡張子付きで書く ことが必要です。

コンパイルが成功するとどうなるか

正しくコンパイルできた場合、PowerShell には特に何も表示されず、もう一度プロンプトが表示されます。

PS C:\Java\01> javac Sample1.java
PS C:\Java\01>

はじめて見ると、何も表示されないので少し不安になるかもしれません。
でも、これは異常ではなく、エラーがなかったので正常に終わったという意味です。

そして、コンパイルが成功すると、ソースファイルと同じディレクトリに Sample1.class という新しいファイルが作成されます。

コンパイル前後の変化

コンパイル前コンパイル後
Sample1.java があるSample1.java に加えて Sample1.class が作成される

この Sample1.class が、クラスファイルです。
クラスファイルには、Javaコードを変換したバイトコードが入っています。

クラスファイルとは何か

クラスファイルは、コンパイルによって作成されるファイルです。
拡張子は class です。

今回であれば、Sample1.java をコンパイルすると、Sample1.class が作られます。

ファイル名役割
Sample1.java人が書いた元のソースファイル
Sample1.classコンパイル後に作られるクラスファイル

このクラスファイルは、あとでプログラムを実行するときに使われます。
つまり、クラスファイルは、実行の準備ができた状態のファイルだと考えるとわかりやすいです。

コンパイルが終わったら、実際にフォルダを開いて Sample1.class ができているか確認してみると、流れがとても理解しやすくなります。

この図では、Sample1.java というソースファイルを、javac Sample1.java というコマンドでコンパイルし、その結果として Sample1.class というクラスファイルが作成される流れを表しています。Javaでは、テキストエディタで入力したコードをそのまま実行するのではなく、まずコンパイラを使ってバイトコードへ変換する必要があります。

図で流れを見ると、ソースファイル、コンパイル、クラスファイルという3つの関係がひと目でつかめます。特に、クラスファイルはソースファイルと別に新しく作られることが分ります。

コンパイルで覚えておきたい大事なポイント

コンパイル手順で特に大事なのは、次の部分です。

大事なポイント内容
正しい場所へ移動するソースファイルがあるディレクトリへ移動する
javac を使うコンパイラの起動には javac コマンドを使う
ファイル名を正しく入力するSample1.java のように拡張子まで書く
成功時は静かに終わる何も表示されなくても成功していることがある
class ファイルが作られるコンパイル後は Sample1.class ができる

とくに、コンパイルするには javac ソースファイル名 と入力する、という形は最初にしっかり覚えておきたいところです。

エラーが表示されたらどうするか

コンパイルをしようとしたときに、エラーが表示されて Sample1.class が作成できないことがあります。
でも、これは珍しいことではありません。最初のうちは、ちょっとした入力ミスでエラーになることがよくあります。

そんなときは、あわてずに入力したコードを見直してみましょう。

よくある原因

原因
半角で入力すべき文字を全角で入力した( や ; などが混ざっている
大文字と小文字を間違えたmain を Main にしてしまった
カッコが対応していない{ と } の数が合っていない
ファイル名を間違えたSample1.java ではなく別の名前を入力した

このようなミスがあると、コンパイラはコードを正しく理解できません。
Javaには文法のルールがあり、そのルールにしたがっていないと、コンパイラは正しくバイトコードへ変換できないのです。

コンパイラは間違いを教えてくれる

エラーが出ると、失敗したように感じて落ち込みやすいですが、実はコンパイラはとても親切です。
コードに誤りがあると、ただ止まるのではなく、エラーを表示して教えてくれます。

つまり、コンパイラは、

  • このコードは正しく理解できません
  • 文法や入力内容を見直してください

というメッセージを出してくれているのです。

この考え方はとても大事です。
エラーは怖いものではなく、どこかに間違いがあることを知らせてくれる案内のようなものです。だから、エラーが出たらコードを見直し、ひとつずつ確認していけば大丈夫です。

見直すときのチェックポイント

コンパイルエラーが出たときは、次の順番で確認すると見つけやすくなります。

確認すること見るポイント
ファイル名Sample1.java と正しく入力したか
コマンドjavac Sample1.java と入力したか
半角・全角記号や英数字が全角になっていないか
大文字・小文字main や System などを正しく書いたか
カッコの対応{ } や ( ) が正しく対応しているか
セミコロン文の終わりに ; を付け忘れていないか

このように順番に見ていくと、原因を落ち着いて見つけやすくなります。

コンパイルはJava学習の大事な通過点

Java学習では、コードを入力したあと、すぐに実行へ進むのではなく、まずコンパイルを行います。この流れに慣れることは、Javaを理解するうえでとても大切です。

コードを書く
→ コンパイルする
→ クラスファイルができる
→ 実行する

この流れの真ん中にあるのが、コンパイルです。
ここをしっかり理解しておくと、Javaプログラムがどのように動くのかが自然に見えてきます。

最初は、javac というコマンドや class ファイルという言葉が少し難しく感じるかもしれません。でも、実際に Sample1.java をコンパイルして Sample1.class が作られる様子を見ていくと、Javaのしくみがぐっと身近に感じられるはずです。

コードを入力したあと、何もせずにそのまま動くわけではない。まずコンパイルという準備が必要で、その結果としてクラスファイルが生まれる。この流れを理解できることが、Java学習を進めるうえでの大きな一歩になります。