Java超|Javaコンパイルと実行の流れ

Javaは、書いただけでは動かない。コンパイルという鍛錬を通して、コードは実行できる力を手に入れる。

Javaの学習では、コードを入力して保存しただけでは、まだプログラムを動かす準備は完了していません。

Javaでは、ソースファイルに書いたコードを、コンピュータが実行しやすい形へ変換する必要があります。この変換作業が コンパイル です。

最初は、コードを書いたらすぐに実行できそうに感じるかもしれません。けれどもJavaでは、ソースファイルを作成したあと、javac を使ってコンパイルし、その結果として作られる class ファイルを使って実行へ進みます。

つまり、Javaプログラムは 書く → コンパイルする → 実行する という流れで動きます。この記事では、具体的なプログラムとして Sample1.java を使いながら、コンパイルと実行の流れを順番に解説します。

ドラゴンボール風にたとえるなら、Javaコードは戦士が書いた 技の型の巻物 です。

ただし、巻物を書いただけでは、まだ技は発動しません。修行装置で鍛え、実戦で使える技にする必要があります。

Javaの作業ドラゴンボール風のたとえ
コードを書く技の型を巻物に記す
コンパイルする型を実戦で使える技へ鍛える
classファイルが作られる鍛えられた技が完成する
実行する技を実際に放つ

Javaのコンパイルは、派手な動作ではありません。

しかし、プログラムを動かすために欠かせない大切な通過点です。

コンパイルとは何か

コンパイルとは、Javaで書かれたソースコードを、実行に向いた形へ変換する作業です。

Javaのコードは、人間にとって読みやすい形で書かれています。

たとえば、クラス名、main、System.out.println など、英単語や記号を組み合わせて処理を書きます。

しかし、そのままではJavaの実行環境が扱う準備ができていません。そこで、コンパイラというソフトウェアを使って、Javaコードを バイトコード という形式へ変換します。

用語意味
ソースファイル人が書いたJavaコードを保存したファイル
コンパイルソースファイルを実行用の形へ変換する作業
コンパイラコンパイルを行うソフトウェア
バイトコードJavaの実行環境が扱うための変換後の形式
クラスファイルバイトコードが保存されたファイル

Javaでは、ソースファイルをそのまま実行するのではなく、まずコンパイルして class ファイルを作ります。

この関係を一言で表すと、次のようになります。

コンパイル前コンパイルコンパイル後
Sample1.javajavac Sample1.javaSample1.class

ドラゴンボール風にたとえるなら、Sample1.java は技の型を書いた巻物です。

javac は、その巻物を読み取り、実戦で使える技へ鍛える修行装置のような役割です。

そして Sample1.class は、鍛錬を終えて実戦で使える形になった技です。

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

Javaのコードは、人間が理解しやすいように書かれています。

たとえば、次のようなコードを見れば、文字を表示しようとしていることが何となく分かります。

System.out.println("Java修行の第一歩です。");

人間にとっては読みやすいですが、実行のためにはJavaの仕組みが扱いやすい形式へ変換する必要があります。

そのためにコンパイルを行います。

段階内容
人間が書く段階Javaの文法にしたがってコードを書く
コンパイル段階javac がコードを変換する
実行準備完了Sample1.class が作られる
実行段階java でプログラムを動かす

コンパイルが必要な理由は、Javaプログラムが次の流れで動くからです。

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

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

コードを書いている段階なのか。

コンパイルして class ファイルを作る段階なのか。

それとも、作られた class ファイルを実行する段階なのか。

この区別ができるようになると、Java学習でつまずいたときにも原因を探しやすくなります。

図:Javaコードが実行できる技になるまで

この図が示していること

この図では、Sample1.java が javac Sample1.java によってコンパイルされ、Sample1.class になる流れを表しています。

Javaでは、テキストエディタで入力したコードをそのまま実行するのではありません。

まずコンパイラを使って、実行に向いた形へ変換します。

この流れを視覚的に見ると、ソースファイル、コンパイル、クラスファイルの関係が分かりやすくなります。

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

コンパイルを行うには、PowerShell またはコマンドプロンプトを使います。

そして、まず大切なのが、ソースファイルが保存されているディレクトリへ移動すること です。

ここでいうディレクトリとは、Windowsでいうフォルダのことです。

Javaのコンパイルでは、今いるディレクトリを基準にしてファイルを探します。

たとえば、Sample1.java を次の場所に保存したとします。

C:\Java\01

この場合、PowerShellで次のように入力して、その場所へ移動します。

cd \Java\01

実行例は次のようになります。

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

表示が PS C:\Java\01> に変われば、現在のディレクトリが C:\Java\01 になったことが分かります。

コマンドの部分意味
cdディレクトリを移動する
\Java\01移動先のディレクトリ
cd \Java\01C:\Java\01 へ移動する

cd のあとには、空白を1つ入れてから移動先を書きます。

cd \Java\01

cd\Java\01 のように空白を入れない書き方ではなく、cd と移動先の間に半角スペースを入れる点を意識しましょう。

ドラゴンボール風にたとえるなら、Sample1.java が置いてある修行部屋へ移動してから、鍛錬を始めるようなものです。

巻物が C:\Java\01 にあるのに、自分が別の場所にいると、javac は対象のファイルを見つけられません。

コンパイラを実行する

ソースファイルがあるディレクトリへ移動できたら、いよいよコンパイルします。

Javaのコンパイラを起動するには、javac を使います。

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

ファイル名:Sample1.java

class Sample1
{
    public static void main(String[] args)
    {
        // 最初の修行メッセージを表示する
        System.out.println("Java修行の第一歩です。");
    }
}

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

javac Sample1.java

実行例です。

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

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

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

コンパイル時には、ソースファイル名を拡張子付きで指定します。

javac Sample1.java

ここで Sample1 だけにしたり、Sample1.class と書いたりすると、正しくコンパイルできません。

場面正しい入力
コンパイルjavac Sample1.java
実行java Sample1

コンパイルでは Sample1.java を指定します。

実行では Sample1 を指定します。

この違いは、Java学習の最初にしっかり押さえておきたいポイントです。

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

コンパイルが成功すると、PowerShellには特に何も表示されず、もう一度プロンプトが表示されます。

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

はじめて見ると、何も表示されないので「本当に成功したのかな」と不安になるかもしれません。

でも、これは正常です。

javac は、エラーがなければ静かに終了することが多いです。

PowerShellの状態意味
何も表示されずプロンプトに戻るコンパイル成功
エラーメッセージが表示されるコードや入力内容に問題がある
classファイルが作られないコンパイルに失敗している可能性がある

コンパイルが成功すると、Sample1.java と同じディレクトリに Sample1.class が作られます。

コンパイル前コンパイル後
Sample1.java があるSample1.java と Sample1.class がある

この Sample1.class が、クラスファイルです。

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

ドラゴンボール風にたとえるなら、巻物に書かれた技の型が、鍛錬によって実戦で使える技に変わった状態です。

Sample1.java は人が書いた巻物、Sample1.class は実行の準備が整った技です。

クラスファイルとは何か

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

拡張子は class です。

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

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

このクラスファイルは、あとでプログラムを実行するときに使われます。

Javaでは、自分が編集するファイルと、実行に使われるファイルが分かれています。

作業扱うファイル
コードを書く・修正するSample1.java
コンパイル後に作られるSample1.class
実行時に使われるSample1.class

コードを修正したいときは、Sample1.java を編集します。

そして、修正後の内容を反映するには、もう一度 javac Sample1.java でコンパイルします。

この流れはとても大切です。

Sample1.java を編集する
    ↓
javac Sample1.java でコンパイルする
    ↓
Sample1.class が更新される
    ↓
java Sample1 で実行する

Java学習では、コードを直したら再コンパイルするという感覚を早めに身につけておくと安心です。

図:コードを直したら再コンパイルする流れ

この図が示していること

この図では、Sample1.java を編集したあと、もう一度 javac Sample1.java を実行して、Sample1.class を更新する流れを表しています。

Javaでは、ソースファイルを修正しただけでは、実行用のクラスファイルには反映されません。

修正した内容を実行結果に反映するには、保存してから再コンパイルする必要があります。

この流れを覚えておくと、コードを直したのに実行結果が変わらない、という混乱を減らせます。

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

コンパイル手順では、特に次の点が重要です。

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

特に、次の形は最初にしっかり覚えておきましょう。

javac Sample1.java

この形は、Java学習で何度も登場します。

部分意味
javacコンパイルする命令
Sample1.javaコンパイル対象のソースファイル
.javaソースファイルであることを示す拡張子

ドラゴンボール風にたとえるなら、javac Sample1.java は、Sample1.java という巻物を修行装置に持ち込んで、実戦用の技へ鍛える合図です。

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

コンパイルをしようとしたときに、エラーが表示されて Sample1.class が作成されないことがあります。

でも、これは珍しいことではありません。

Java学習の最初は、少しの入力ミスでエラーになることがよくあります。

大切なのは、エラーを怖がらず、落ち着いて確認することです。

よくある原因は次の通りです。

原因
半角で入力すべき文字を全角で入力した( や ; などが混ざっている
大文字と小文字を間違えたmain を Main にしてしまった
カッコが対応していない{ と } の数が合っていない
ファイル名を間違えたSample1.java ではない名前を入力した
セミコロンを忘れた文の終わりに ; がない
違うディレクトリにいるSample1.java がある場所へ移動していない

Javaには文法のルールがあります。

そのルールに合っていないと、コンパイラは正しくバイトコードへ変換できません。

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

エラーが表示されると、失敗したように感じるかもしれません。

でも、コンパイラはただ止まっているのではありません。

コードのどこかに問題があることを知らせてくれています。

つまり、コンパイラは次のような案内をしてくれていると考えると分かりやすいです。

コンパイラの反応意味
エラーを表示するこのコードは正しく理解できない
行番号を示すこのあたりを確認してほしい
メッセージを出す文法や入力内容を見直してほしい

ドラゴンボール風にたとえるなら、コンパイラは修行を見てくれる師匠です。

型が崩れていれば、どこが違うのかを知らせてくれます。

エラーは怖いものではありません。

どこを直せばよいのかを探すための手がかりです。

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

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

確認すること見るポイント
ファイル名Sample1.java と正しく保存しているか
コマンドjavac Sample1.java と入力したか
現在のディレクトリC:\Java\01 など、保存場所に移動しているか
半角・全角記号や英数字が全角になっていないか
大文字・小文字main、String、System などを正しく書いたか
カッコの対応{ } や ( ) が正しく対応しているか
セミコロン文の終わりに ; を付け忘れていないか

特に、初心者のうちは次の3つを重点的に確認するとよいです。

優先して見るポイント理由
ファイル名コンパイル対象を間違えると始まらない
半角・全角見た目が似ていても別文字として扱われる
カッコとセミコロンJavaの文法でよく使うためミスが起きやすい

エラーが出たときは、一気に全部を直そうとせず、上から順番に確認していきましょう。

図:コンパイルエラー確認の流れ

この図が示していること

この図では、コンパイルエラーが出たときに、どこを確認すればよいのかをチェックリスト形式で表しています。

エラーが出ても、慌てる必要はありません。

ファイル名、コマンド、現在のディレクトリ、半角・全角、大文字・小文字、カッコ、セミコロンを順番に見直すことで、原因を見つけやすくなります。

また、コードを修正したら、保存してからもう一度 javac Sample1.java を実行する流れも大切です。

エラーは学習の妨げではなく、正しいコードへ近づくための手がかりです。

コンパイル後は実行へ進む

コンパイルに成功して Sample1.class が作られたら、次はプログラムを実行します。

実行には java を使います。

java Sample1

ここで注意したいのは、実行時には .java も .class も付けないことです。

場面入力する内容
コンパイルjavac Sample1.java
実行java Sample1

実行例です。

PS C:\Java\01> java Sample1
Java修行の第一歩です。

これで、Sample1.java に書いた処理が実行され、画面に文字が表示されます。

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

手順入力例起こること
1Sample1.java を作成ソースファイルを用意する
2cd \Java\01保存先へ移動する
3javac Sample1.javaSample1.class を作る
4java Sample1プログラムを実行する

ドラゴンボール風にたとえるなら、巻物を書き、修行部屋へ移動し、技を鍛え、最後に技を放つ流れです。

Javaの操作ドラゴンボール風の流れ
Sample1.java を作る技の型を巻物に書く
cd \Java\01巻物のある修行部屋へ行く
javac Sample1.java技を鍛える
Sample1.class ができる実戦用の技が完成する
java Sample1技を放つ

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

Java学習では、コードを入力したあと、すぐに実行へ進むのではなく、まずコンパイルを行います。

この流れに慣れることは、Javaを理解するうえでとても大切です。

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

この真ん中にあるのが、コンパイルです。

最初は、javac という命令や class ファイルという言葉が少し難しく感じるかもしれません。

でも、実際に Sample1.java をコンパイルして、Sample1.class が作られる様子を見ると、Javaのしくみがぐっと身近になります。

学習で身につく感覚内容
書いたコードはそのまま動かないまずコンパイルが必要
javac は変換する命令ソースファイルをクラスファイルにする
classファイルが実行に関係するjava で実行するときに使われる
エラーは確認の合図修正点を探す手がかりになる

Javaのコンパイルは、プログラムを動かすための準備作業です。

地味に見えるかもしれませんが、この手順を理解しているかどうかで、今後の学習のしやすさが大きく変わります。

コードを入力したら、保存する。

保存したら、正しい場所へ移動する。

移動したら、javac Sample1.java でコンパイルする。

成功したら、Sample1.class が作られる。

そして、java Sample1 で実行する。

この一連の流れを身につけることが、Javaプログラムを自分の手で動かすための大切な一歩になります。