バナー画像

プログラミングの学習を始めたばかりの方から、WindowsからMac環境へ移行してきてJavaファイルのコンパイル方法が分からないといった方向けに、Mac環境でのJavaのコンパイル方法をご紹介していきたいと思います。

Javaファイルのコンパイルって何?

ポテパンダの一言メモ

まずコンパイルの方法を説明する前に「コンパイル」とは何かをご紹介していきます。

コンパイルとは

コンパイルとは「プログラムのソースコードをコンピューターが実行可能な機械語に翻訳すること」を指します。

プログラマーが作成したソースコードは人間が分かるように記述したもので、そのままの状態ではコンピューターは理解する事が出来ないため「コンパイル」という作業を通して、コンピューターが理解出来る機械語へ変換をかける作業のことを示します。

ではその翻訳作業は誰がするのかというのが次にご紹介する「コンパイラ」です。

コンパイラとは

初心者の方で名前が似ていることから混乱しがちなのが「コンパイル」と「コンパイラ」の違いです。

「プログラム」と「プログラマー」の違いと似たイメージで、「コンパイル」は機械語へ変換する作業自体を示し、「コンパイラ」は機械語へ変換するための作業をするシステムのことを指します。

Javaでは「javac」というコンパイラが利用され、「Java SE Development Kit(JDK)」に含まれています。

Javaファイルをコンパイルして実行してみよう

ここからは実際にJavaファイルを作成し、コンパイルして実行するまでの手順をご紹介していきたいと思います。

サンプルで実行するJavaファイルを作成しよう

まずはサンプルで実行する用のJavaファイルを作成する必要があります。

自身でコンパイルしたいJavaファイルが特にない場合は、メモ帳でも何でも構わないので下記のコードをサンプルとして「Main.java」のファイル名で保存してください。

public class Main {
  public static void main(String args[]) {
    System.out.println("Hello World");
  }
}

保存した「Main.java」のファイルは、Finderの「書類」→「sample」フォルダに格納してください。

ターミナルでJavaファイルを格納した場所に移動する

次にターミナルを開いて「Main.java」を格納したフォルダに移動しましょう。

「書類」→「sample」フォルダに移動している場合は下記のコマンドで移動出来ます。

cd Documents/sample/

下記の画像では「ls」コマンドで「sample」フォルダにMain.javaファイルが格納されているのを確認出来ます。

Javaファイルをコンパイルしよう

ファイルを格納しているディレクトリに移動出来たので、実際に「コンパイル」を実施します。

下記のコマンドが「Main.java」ファイルのコンパイルコマンドとなります。

javac Main.java

実行した結果が下記の画像の通りとなります。

1枚目の画像では特に何も表示されず次の行に移動していますが、コンパイルに成功した場合の例です。

ポテパンダの一言メモ

コンパイルに失敗した場合は下記の画像のようにエラー文が出力されるので、表示されている内容に従って修正するようにしてください。

下記の画像では、「System.out.println(“Hello World”)」の行で文末に「;」を設定していないため出ているコンパイルエラーです。

2枚目の画像に関しては、「ls」コマンドでカレントディレクトリのファイルを確認し「Main.class」というファイルが追加されているのをご確認頂けます。

「Main.class」ファイルがコンパイル済みのJavaの実行ファイルとなります。

コンパイル済みのファイルを実行してみよう

コンパイル済みの「Main.class」ファイルを実際に実行するには下記のコマンドとなります。

java Main

コマンドを実行した結果が下記の通りとなります。

ポテパンダの一言メモ

ポイントとしては実行する「classファイル」の「.class」は指定しないようにしてください。

実行結果はサンプルコードでは「Hello World」が出力される結果となります。

複数ファイルで構成されたソースコードをコンパイルしてみよう

上述したサンプルコードは1つのファイルで完結していましたが、通常システムを作成する場合には複数ファイルに跨ることがほとんどです。

次は複数ファイルに跨るサンプルコードをコンパイルして実行してみましょう。

サンプルで実行する2つのJavaファイル

まず1つ目のファイルを「Main.java」として下記のサンプルコードを作成しています。

public class Main {
public static void main(String args[]) {
    Sub sub = new Sub();
    System.out.println(sub.content);
  }
}

2つ目のファイルは「Sub.java」として下記のサンプルコードを作成します。

public class Sub {
  String content = "Subクラスのフィールド値です。";

}

プログラムとしては「Sub.java」ファイルにフィールド値の初期値を設定しておき、「Main.java」でSubクラスのフィールド値を参照し表示するだけの簡単なものです。

2つのファイルをコンパイルしよう

では実際に作成したJavaファイルをコンパイルしてみましょう。

今回もJavaファイルを格納しているディレクトリは「書類」→「sample」としています。

Javaファイルのコンパイルは先程と同様下記のコマンドで行います。

javac Main.java

実行した結果を確認すると「Main.class」以外に「Sub.class」が作成されているのが確認出来ます。

Javaのコンパイラである「javac」ではコンパイルに指定したファイルの参照先を自動的に探して、一緒にコンパイルしてくれる便利な機能が提供されています。

コンパイルしたクラスファイルを実行してみよう

では作成したクラスファイルを実際に実行してみましょう。

コマンドは1つのクラスファイルを実行した上記のサンプルと全く同じです。

java Main

コマンドを実行した結果が下記の通りとなります。

「Main.java」を実行して、「Sub.java」に定義したフィールド値の値が出力されている事がご確認頂けます。

別階層に格納したJavaファイルをコンパイルして実行しよう

Javaファイルを複数コンパイルする方法をご紹介しましたが、上記のサンプルは同一ディレクトリにファイルが配置されている場合のサンプルとなります。

例えば「Main.java」ファイルを「書類」→「sample」に格納し、「Sub.java」ファイルを「書類」→「sample」→「subDir」に格納したとします。

同じように「Main.java」をコンパイルすると「Sub.java」を参照する事が出来ず下記のようなエラーとなってしまいます。

コンパイル時に参照先のパスを指定してあげよう

では同一ディレクトリ以外に参照先のファイルが格納されている場合どうするのかと言うと、コンパイル時にコマンドで参照先のフォルダを指定してあげることで解決する事が出来ます。

javac -cp .:subDir/ Main.java

上記のコマンドでは「-cp(classpath)」オプションを付け「.」カレントディレクトリと「subDir」を参照するように設定しています。

複数ディレクトリを指定する際には「:」で区切ります。

コマンドを実行した結果「Main.class」と「Sub.class」が生成されている事が確認頂けます。

javacではコンパイル時に出力先を指定していない場合、元のJavaファイルが格納されている階層と同階層にクラスファイルが作成されるため、上記のように「Sub.class」はサブディレクトリに格納される結果となっています。

参照先のクラスファイルが別階層に格納されている場合実行時にも注意が必要

サンプルのように生成されたクラスファイルが別ディレクトリに格納されている場合、参照先を教えてあげずに実行すると下記のようなエラーとなってしまいます。

コンパイル時に指定したように実行時にも参照先のクラスの場所を教えてあげないといけません。

下記のコマンドが「subDir」に格納されている「Sub.class」ファイルを参照して実行する際のコマンドとなります。

java -cp .:subDir/ Main

javacコマンドでコンパイルした時と同様、「-cp(classpath)」オプションで「.(カレントディレクトリ)」と「subDir」を参照するように指定しています。

実行した結果は下記の通りです。

環境変数に設定してしまう方法をご紹介

別階層のファイルをコンパイルする方法をご紹介しましたが、コンパイル毎にオプションコマンドを面倒なため環境変数に参照先を設定してしまう方法もあります。

CLASSPATH=.:subDir/; export CLASSPATH

クラスパスに指定した状態でコンパイルから実行をした結果は下記の通りとなります。

クラスパスを環境変数に設定したことにより、「javac」コマンドでのコンパイル時と「java」コマンドでの実行時に「-cp(classpath)」オプションを付けなくても処理が完了している事がご確認頂けます。

さいごに:Javaのコンパイル方法はしっかりと理解しておこう!

本記事ではMac環境でのJavaファイルをコンパイルして実行する方法をご紹介してきました。

最近ではeclipseなどのIDEを用いた開発が主流となっていることから、IDEで簡単にコンパイル作業が可能なため、ターミナルでのコマンド操作でコンパイルを行う方法は知らない方も意外と多いものです。

コマンドでのコンパイル方法を知ることで、IDEがどのようにコンパイルを行なっているかについて深い理解にも繋がりますので、ぜひ一度ご自身でもコマンドでのJavaファイルのコンパイル作業を試してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。