バナー画像

クラスパス(classpath)とは?

JVM(Java Virtual Machine: Java仮想マシン)の中でクラスファイルを読み込む仕事は、クラスローダー(class loader)という機能が行っています。

クラスパスとは、このクラスローダーがクラスファイルを探すときに見に行くべき場所のことです。

例えば、クラスパスに「c:¥Desktop」が指定してある場合、クラスローダーはc:¥Desktopの中にクラスファイルがあるかを探しに行くだけでよくなります。

ポテパンダの一言メモ

クラスパスを指定することで、高速にクラスファイルの検索が可能になるのです。

クラスパスを指定する方法

クラスパスを指定する方法は、以下の3通りあります。

クラスパスを指定する3つの方法
  • 起動時にjavaコマンドで指定する
  • 検索場所をOSに登録する
  • 特に指定しない

ひとつずつ、解説します。

起動時にjavaコマンドで指定する

最初の方法は、JVMをjavaコマンドで起動するときに「-cpオプション」または「-classpathオプション」を指定します。

具体的な指定方法は以下の通りです。

>java -cp c:¥Desktop "ファイル名"

サンプルを使って実際に動かしていきましょう。

↓Main.java

public class Main {
 
    public static void main(String[] args) {
        ClassPath cp = new ClassPath();
    }
 
}

↓ClassPath/ClassPath.java

public class ClassPath {
    public ClassPath() {
        System.out.println("ClassPathファイルを実行しました!");
    }
}

↓実行結果(Mac)

mbp:Desktop (ユーザー名)$ javac -cp .:ClassPath Main.java
mbp:Desktop (ユーザー名)$ java -cp .:ClassPath Main
ClassPathファイルを実行しました!

Macで実行しているため、複数のパスをコロン(:)で区切っています。

コロンの前にあるドット(.)は、相対パスです。現在いるフォルダを指定する場合に使用されます。

相対パスではなく絶対パスで実行するのであれば、以下のように記述すれば同じ実行結果が得られます。

mbp:Desktop (ユーザー名)$ javac -cp Desktop:ClassPath Main.java
mbp:Desktop (ユーザー名)$ java -cp Desktop:ClassPath Main.java
ClassPathファイルを実行しました!

絶対パスで取得するときは、2行目がMainが「Main.java」に変わるので注意しましょう。

検索場所をOSに登録する

Javaコマンドを入力する際に、いちいち指定するのが面倒な場合は検索場所をOSに登録しておくと便利です。

具体的には、OSの「環境変数」という設定にクラスパスを登録します。

これによって、javaコマンドは環境変数を自動的に読み込み、クラスファイルの検索に利用してくれます。

環境変数の設定は、WindowsとMac/Linuxの場合で異なるのでそれぞれ見ていきましょう。

Windowsの場合

Windowsの場合は、以下の手順で環境変数を設定できます。

  1. コントロールパネルを開く
  2. システム>システムの詳細設定を開く
  3. 詳細設定のタブを選ぶ
  4. 環境変数のボタンをクリック

ここから、ユーザー環境変数としてクラスパスを追加し、値を設定しましょう。

Mac/Linuxの場合

Mac/Linuxの場合は、「(ユーザーのホームディレクトリ)/.profile」ファイルの末尾を変更します。

例えば、「/var/javadev」をクラスパスとする場合は以下のように追記しましょう。

export CLASSPASS=/var/javadev

特に指定しない

検索場所をOSに登録せずjavaコマンドで指定もしない場合は、デフォルトでjavaコマンドが実行されたフォルダがクラスパスになります。

例えば、c:¥Desktopでjavaコマンドを実行すれば、c:¥Desktopがクラスパスに設定されるといった感じです。

クラスパスで指定できる対象

クラスパスで指定できる対象は、以下の3つから選べます。

クラスパスで指定できる対象3つ
  • フォルダの場所
  • クラスファイルが入ったjarファイルやzipファイル
  • 複数フォルダ、jarファイルやzipファイル、それらの組み合わせ

ひとつずつ詳しく解説します。

フォルダの場所

クラスファイルが置かれている絶対パス(フォルダの場所)が指定できます。

最も一般的な指定対象で、例えば、c:¥Desktopを指定すると、Desktopのクラスファイルが検索の対象です。

クラスファイルが入ったjarファイルやzipファイル

クラスファイルが入ったjarファイルやzipファイルがあれば、そのファイルの絶対パスもクラスパスの対象にできます。

例えば、work.jarファイルがc:¥Desktop¥jarsに置いてある場合、

c:¥Desktop¥jars¥work.jar

と指定することで、クラスパスからクラスを読み込むことができます。

複数フォルダ、jarファイルやzipファイル、それらの組み合わせ

複数のフォルダやjarファイル、zipファイルをデリミタ文字で区切ってクラスパスの指定も可能です。

デリミタ文字はOSによって異なります。

です。

Windowsの場合は、以下のように記述します。

c:¥Desktop;c:¥Desktop¥jars¥work.jar

Mac/Linuxの場合は、以下のように記述します。

/var/javadev:/var/javadev/jars/work.jar

クラスパスの確認方法

プログラムを実行した際に、指定したクラスパスを確認したい時は、-verboseオプションを使いましょう。

「-verbose:class」と指定することで、クラスをロードするたびにクラスに関する情報を表示してくれます。

java -verbose:class "ファイル名"

クラスパスの取得方法

クラスパスはプログラムから取得することも可能です。

クラスパスを取得したい場合は、getPropertyメソッドを記述して取得します。

サンプルを見てみましょう。

↓Main.java

public class Main {
 
    public static void main(String[] args) {
        ClassPath cp = new ClassPath();
    }
 
}

↓ClassPath/ClassPath.java

public class ClassPath {
    public ClassPath() {
        System.out.println(System.getProperty("java.class.path"));
    }
}

↓実行結果(Mac)

mbp:Desktop (ユーザー名)$ javac -cp .:ClassPath Main.java
mbp:Desktop (ユーザー名)$ java -cp .:ClassPath Main
.:ClassPath

まとめ

Javaのクラスパスの意味や指定方法、確認方法などをご紹介しました。

プログラムを組んでいく中でクラスは数多く使われるでしょう。

そんなとき、クラスがフォルダごとにしっかり分かれていると、後に修正や機能の追加をするときにファイルを探すのが簡単になります。

クラスパスを使いこなせるようになっておいて損はありません。ぜひ、この記事を参考にマスターしてください。

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

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

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

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

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

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

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

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

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

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

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