Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaではプログラムを動かすためにclassファイルを生成するため、アプリケーションとして配布されている中にJavaファイルが存在せずソースコードを確認出来ないことも少なくありません。

本記事では、classファイルからJavaコードを確認するデコンパイルの方法についてご紹介していきます。

デコンパイルとは


Javaのようなコンパイル言語と呼ばれるプログラミング言語では、コンパイルと呼ばれる作業により人間が読めるように記述したソースコードをコンピューターが読めるコードにあらかじめ変換しておく方法が採用されています。

このコンパイルしたコードを、再度人間が読めるソースコードに戻す作業をデコンパイルと呼びます。

デコンパイラ

デコンパイルを行うためには、デコンパイラと呼ばれるツールを利用します。

デコンパイラは複数の種類が提供されているので、ご自身の開発環境で利用しやすいツールを選びましょう。

デコンパイラ

逆アセンブルとの違い

機械語から人間が理解するための言語に変換する似た機能に「逆アセンブル」と呼ばれる処理があります。

逆アセンブルとデコンパイルの違いは、機械語から変換される言語がアセンブリ言語かJavaのような高級言語かによって分かれています。

アセンブリ言語以外の場合にはデコンパイルと呼ばれることが多く、アセンブリ言語に変換する場合は逆アセンブルと区別されることが多いようです。

Javaのデコンパイラをインストールしてみよう


では今回は「JD-Eclipse」を利用してJavaのデコンパイルを試してみたいと思います。

まずはダウンロードページにアクセスし、ソフトウェアをダウンロードしておきましょう。

ダウンロード方法


Java Decompilerのトップページを開くとJD-Eclipseの項目に「Download」のリンクが見えるのでクリックします。


zipファイルのダウンロードリンクが表示されるので、クリックします。

インストール作業

ダウンロードが完了しましたら、Eclipseを起動してメニューバーの「ヘルプ」から「新規ソフトウェアのインストール」を選択します。


インストール用のポップアップ画面が開くので、作業対象の追加ボタンをクリックします。


「アーカイブ」ボタンからダウンロードしたzipファイルを選択し、「追加」ボタンをクリックします。


表示される「Java逆コンパイラー Eclipseプラグイン」にチェックをいれ、「次へ」ボタンをクリックします。


インストール項目が表示されるので確認して「次へ」ボタンをクリックします。


ライセンスの確認画面になりますので「使用条件の条項に同意します」を選択して「完了」ボタンをクリックします。

再起動を促されるので、Eclipseを再起動するとインストールが完了です。

デコンパイラを使ってJavaのクラスファイルをデコンパイルしてみよう


では実際にインストールしたJD-Eclipseでデコンパイルを試してみましょう。

サンプルコード

まずはクラスファイルを作成するための簡単なJavaプログラムコードを作成しておきます。

Main.java

package sample;

public class Main {
	
	public static void main(String[] args) {
		String name = "ポテパン";
		int number = 100;
		
		System.out.println("name: " + name);
		System.out.println("number: " + number);
	}
	
}

クラスファイルの作成

サンプルコードが作成できたらコンパイルを実行してクラスファイルを作成します。

作成したソースコード(Main.java)のあるフォルダで下記のコマンドを実行します。

javac Main.java 

デコンパイル

ではクラスファイルが作成出来たのでEclipse上で「プロジェクトエクスプローラー」を開きます。


作成したクラスファイルを右クリックして「次で開く」から「クラス逆コンパイラー・ビューアー」を選択します。

表示されたコードはクラスファイルからデコンパイルされたものとなっています。

/*    */ package sample;
/*    */ 
/*    */ 
/*    */ public class Main {
/*    */    public static void main(String[] var0) {
/*  6 */       String var1 = "ポテパン";
/*  7 */       Object var2 = true;
/*    */ 
/*  9 */       System.out.println(var1);
/* 10 */       System.out.println((String)var2);
/* 11 */    }
/*    */ }

元のコードと比較すると若干異なりますが、大まかには一致していることが確認出来ます。

jarファイルからデコンパイル

Javaのシステムは多くのクラスファイルから構成されるため、jar形式にまとめられて配布されていることも多いので、jar形式のデコンパイル方法も確認しておきましょう。

jarファイルを展開

jarファイルは複数のclassファイルを圧縮しているだけなので、ダブルクリックやEclipse上では矢印アイコンをクリックするだけでclassファイル単位に展開することが可能です。


参照ライブラリに格納されたjarファイルを順に展開していくと、画像のように複数のクラスファイルが表示されます。

classファイルをデコンパイル


クラスファイルまで展開出来たらあとは同様に、クラスファイルを右クリックして「次でクラスを開く」から「JD-Core」を選択します。

表示されたコードが下記です。

/*    */ package com.mysql.jdbc;
/*    */ 
/*    */ import java.io.PrintStream;
/*    */ import java.sql.SQLException;
/*    */ 
/*    */ public class Driver
/*    */   extends com.mysql.cj.jdbc.Driver
/*    */ {
/*    */   public Driver()
/*    */     throws SQLException
/*    */   {}
/*    */   
/*    */   static
/*    */   {
/* 43 */     System.err.println("Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.");
/*    */   }
/*    */ }

元のコードが分からないので100%正確だとは言えませんが、プログラマーが読み取れるJavaのコードとして表示されていることが分かります

さいごに: Javaシステムをデコンパイルしてプログラミング学習に役立てよう


本記事では、Javaのデコンパイルについて実際のツールを使いながらご紹介してきました。

プログラミング学習にもこのデコンパイル機能は非常に有用で、jarファイルやクラスファイルしか提供されていないシステムでもある程度の解析が可能となります。

jarファイルやクラスファイルしか提供されていないシステムでも、一度デコンパイルでのソース解析を試してプログラミング学習に役立ててみてください。

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

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

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

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

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

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

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

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

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

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

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