コンパイルとは、プログラムの翻訳作業のことだ。
Javaプログラムはプログラムを書いてすぐに実行をすることはできない。そのプログラムを機械がわかるように翻訳してはじめて、コンピュータが実行をしてくれる。
このページでは「コンパイルとは」のもう少し詳しい説明と、Javaのコンパイル方法についてまとめてご紹介しよう。
目次
コンパイルとは?
コンパイルとコンパイラ
コンパイルとは、プログラム言語をコンピュータが理解できる言語に変換することだ。そのための翻訳ソフトウェアをコンパイラという。
ほとんどのコンパイラは、コンピュータが直接実行できるコンピュータ特有の言語に合わせ翻訳する。そして、それを直接実行する。
Javaだけ少し特殊
コンパイルが必要なプログラミング言語はたくさんあるが、その中でもJavaは特殊だ。
Javaは「どんな環境でも動く!」、Windowsだろうと、Macだろうと、Linuxだろうと他の何かだろうとひとつのプログラムで動くという信念で作られている。
そのため、特定のコンピュータが理解出来る機械語に翻訳するのではなくて、どのコンピュータでも使える中間言語というものを作成する。
下記のイメージだ。
実行するときは、それぞれのコンピュータにインストールされたJavaの仮装マシンが機械語に翻訳して実行してくれる。
プログラムを実行するために2段の翻訳機があるようなものだ。日本語から中国語、ドイツ語に翻訳するのではなくて、必ず英語に翻訳してから他の言語に翻訳するイメージになる。
Javaのコンパイル方法
では、実際にJavaプログラムをコンパイルしてみよう。
ここでは、WindowsのDOS窓からコマンドによりJavaのコードをコンパイルすることを、前提として説明を行う。コンパイルするための環境のインストール方法は下記のURLを参考にできる。
Javaインストール:https://eng-entrance.com/category/java/java-install
Javaファイルを置くフォルダの作成
まずはJavaファイルを置くフォルダを作成しよう。作成場所はどこでもいいが、わかりやすいのでCドライブの直下などがいいだろう。
下記のように「JavaSample」というフォルダを作ってみる。
Javaのプログラムファイルを保存する
続いてテキストエディタを使用して、以下のプログラムを打ち込んでソースファイルを作成する。
1 2 3 4 5 |
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
テキストエディタは何を使っても構わない。Windows標準のメモ帳でも大丈夫だ。
このファイルを「HelloWorld.java」という名前をつけて先ほどのフォルダに保存する。
コマンドプロンプトを開く
ここからが少々難しい。コマンドプロンプトというものを開く。
メニューを開いてアクセサリを選択する。
その中のコマンドプロンプトを選択する。
するとコマンドプロンプトが開く。
これがコマンドプロンプトと呼ばれる、コンピュータをコマンドで直接操作する画面だ。例えばファイルのコピーをしたり、フォルダを作成したりなどの作業を一通りこの画面で実施することができる。
Javaのコンパイル作業はここで行っていくことになる。はじめからコマンド操作のすべてを理解するのは難しいと思うので、まずはJavaコンパイルに必要なところだけ見ておこう。
Javaのコンパイル作業
まず、以下のcdコマンドをコマンドプロンプトに入力し、ファイルを保存したフォルダC:\JavaSampleに移動する。
cdとはChange directoryの略で、そのフォルダに移動しますよ、という意味だ。CドライブのJavaSampleフォルダに移動するという意味になる。
移動したフォルダに保存したJavaのファイルがあるかをdirコマンドで確かめよう。
以下のコマンドを打ち込み、先ほどのソースファイルをコンパイルする。コンパイルのためのコマンドはjavacである。コマンドの入力の仕方は簡単だ。
javac Javaのファイル名
実際に、JavaのファイルHelloWorld.javaをコンパイルするためのJavacコマンドを入力する。ソースファイルに誤りが無ければ、次のようになるはずだ。
コンパイルの結果をdirコマンドで見てみよう。
コンパイルに成功すると先ほどのフォルダに「HelloWorld.class」が作成されている。これでコンパイルは成功だ。
実行の仕方は次ページで紹介をしているので続きはそちらから確認しよう。
コンパイルエラー
先ほどは正常にコンパイルできた例を紹介したが、記述内容に誤りがあると、コンパイルを実行した段階でエラーが表示される。初心者にありがちなコンパイルエラーと対処方法を紹介する。
セミコロン「;」が不足
まず、コンパイルエラーの見方から説明しよう。
わざとエラーのあるプログラムをコンパイルしてみた。エラーを見つけると、コンパイラはエラー情報を表示する。
そのエラー情報からエラーの原因を見つけることができる。次の図はその方法を示している。
エラーの場所が、ファイル名→ファイルの先頭からの行数→エラーのカラム位置というようにエラーの場所がすぐに分かるようになっている。
エラーの理由も表示される。セミコロン「;」が不足しているために発生しているエラーだ。
1 2 3 4 5 |
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!") ← セミコロン(「;」)が足りない } } |
Javaの記述ルールは、1つの命令ごとにセミコロン「;」をつける決まりだ。
ダブルクオーテーション「”」が不足
これは少々分かりにくいが、「Hello World」の文字列の終わりのダブルクオーテーション「”」が不足していると、こんなエラーが起きる。
1 2 3 4 5 |
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!); ← World!の後に「"」がない } } |
コンパイル後にエラーが表示された画面を示す。
2つ目のエラーに「エラー: ';'がありません」とあるが、これは最初のエラー(「”」で閉じられていないエラー)の為に、文字列の終わりが判断できず、結果として命令文の終わりが見つけられないことから起きているエラーだ。
全角空白文字
これも初心者は意外とハマりやすいエラーだ。このエラーは、本来「半角空白」文字を入れるべきところに、「全角空白」文字を入れてしまったことから発生している。
1 2 3 4 5 |
public □ class HelloWorld { ← publicの後に全角空白(□) public static void main(String[] args) { System.out.println("Hello World!") } } |
コンパイル後にエラーが表示された画面を示す。
初心者が書籍やWebで紹介されているソースコードを、そのまま打ち込んでいると意外と起こりやすい。見た目でも違いがわからないので、何故エラーなのかで頭を抱えてしまうことも珍しくない。
このエラーを回避するには、全角空白を視覚的に表現してくれるエディタを使うとよいだろう。
メモ帳で開いた例:
視覚的に表現してくれるエディタの例(サクラエディタ):
このエディタで表示すると、3行目の「public」の後ろに全角の空白が入っていることがわかる。
ファイル名とクラス名が異なる
このエラーは、ソースファイルに記述されているクラス名が「HelloWorld」であるのに対し、ファイル名を「Hello.java」としたために発生している。
Javaでは、一つのファイルに一つのクラスを記述し、ファイル名は「クラス名.java」とする決まりだ。
閉じ括弧「}」
このエラーが一番やっかいなエラーだ。
1 2 3 4 5 |
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!") ← 「}」がない } |
コンパイルし後にエラーが表示された画面を示す。
この例は短いソースコードなので、とじ括弧「}」が不足していることがすぐわかるが、数十行のプログラムで、if(){}やfor(){}のような段落のとじ括弧が不足していると、非常にわかりづらい。
開始括弧{一つに対し、とじ括弧}一つが対応するが、二段三段と入れ子になっていると、別のとじ括弧と対応してしまい、結果として後のほうでとじ括弧が足りないという事態になる。そのため、エラーとして表示されている行番号の付近にとじ括弧が不足しているとは限らないからである。
まとめ
このページでは「コンパイルとは」と、Javaのコンパイル方法についてお伝えした。
コマンドプロンプトを使ったことがないと難しいと思うかもしれないが、気合を入れる必要はない。すぐに慣れるはずだ。
javac Javaのファイル名
覚えておこう。
このファイルをどう実行していくのかなどは次の項目を確認していってほしい。
プログラミングを学ぶにはレッスンが必要です
環境変数を設定し、コマンドプロンプトでJavaが正常にインストールされていることを確認し、JavaのファイルHelloWorld.javaをコンパイルするためのJavacコマンドを入力するとコマンドプロンプトには、「'javac'は、内部コマンドまたは外部コマンド操作可能なプログラムまたはパッチファイルとして認識されません。」と表示されて先に進めません。構文が間違っているのでしょうか?
御教授のほど宜しくお願いします。
いつもご愛読有り難うございます。
環境変数がうまく設定できていない可能性がございます。
下記URLの記事を参考に再度設定を確認してみて下さい。
https://eng-entrance.com/java-install-env
引き続きご愛読の程よろしくお願いいたします。
記載された順に沿ってコマンドを打ち込みコンパイルしたつもりなのですが、エラーメッセージとして、
指定されたパスが見つかりません
と表示されています。
これは、どこに誤りがあると考えられるのでしょうか。初歩的な質問ですいません。
いつもご愛読いただきありがとうございます。
カレントディレクトリ(今いる場所)からみて、javacの後に記載したJavaのファイル名が見当たらないため、
「指定されたパスが見つかりません」とエラーが発生します。
カレントディレクトリの位置をJavaファイルのある場所まで移動して、確かめてみてください。
引き続きご愛読のほどよろしくお願い致します。