Javaで開発を行っていると、
「コンパイル済みの
.class ファイルから元のコードを復元したい」という場面に遭遇することがあります。
このような時に役立つ技術が 「デコンパイル(逆コンパイル)」 です。
かつては専用のツール(JD-GUIなど)を別途インストールして使うのが一般的でしたが、現在はIDE(統合開発環境)の機能として標準搭載されていたり、拡張機能を入れるだけで簡単に実行できるようになっています。
この記事では、Javaにおけるデコンパイルの仕組みから、EclipseやVS Codeを使った手軽な方法、そしてコマンドラインで使えるツールまで、用途に合わせた最適なデコンパイル手法を徹底解説します。
![]() 執筆者:マヒロ |
|
Javaのデコンパイル(逆コンパイル)とは?
デコンパイルとは、コンパイルされたバイナリファイル(機械語や中間言語)を、人間が読めるソースコードの形に復元する処理のことです。
Javaの場合、.java ファイルをコンパイルして生成された .class ファイル(バイトコード)を解析し、元のJavaソースコードに近い形に戻すことを指します。
なぜデコンパイルが必要なのか?
主な用途は以下の通りです。
- ライブラリの挙動確認:ドキュメントだけでは分からないライブラリ(JARファイル)の内部ロジックを確認する。
- ソースコードの紛失対策:ソースコードを誤って消してしまい、コンパイル済みのファイルから復旧したい場合。
- デバッグと解析:本番環境で動いている
.classファイルが、手元のソースコードと一致しているか確認する。
ただし、デコンパイルしたコードは元のソースと完全に一致するわけではありません(コメントやローカル変数名が消えていることが多いです)。
あくまで「ロジックを理解するための手段」として利用しましょう。
VS Code(Visual Studio Code)でデコンパイルする方法
現在、多くのJavaエンジニアが利用しているVS Codeでは、拡張機能を入れるだけで驚くほど簡単にデコンパイルが可能です。
特別な操作は不要で、「定義へ移動」する感覚で中身を見ることができます。
拡張機能「Extension Pack for Java」を使う
Microsoftが提供している 「Extension Pack for Java」 をインストールしていれば、デコンパイル機能はすでに備わっています。
- VS Codeの拡張機能マーケットプレイスで「Extension Pack for Java」を検索し、インストールします。
- プロジェクト内の
.classファイル、または参照しているライブラリ(JAR)内のクラスを開きます。 - 自動的にデコンパイルが実行され、エディタ上にソースコードが表示されます。
ポイントは、「ソースコードが添付されていません」といった警告が出ることなく、シームレスに中身を確認できる点です。
変数名なども可能な限り復元してくれるため、可読性も非常に高いです。
IntelliJ IDEAなら標準機能でデコンパイル可能
Java開発でVS Codeと並んでシェアの高いIntelliJ IDEAを使用している場合、追加のプラグインや設定は一切不要です。
IntelliJ IDEAには、世界最高峰のデコンパイラエンジンであるFernflower(JetBrains社が開発)が標準搭載されています。
使い方
- プロジェクトツリーから
.classファイルをダブルクリックするだけです。 - ライブラリのメソッドを使用している箇所で
Ctrl+Click(MacならCommand+Click)して定義元にジャンプするだけでも、自動的にデコンパイルされたソースが表示されます。
特別な準備なしに最高精度のデコンパイルが行えるため、IntelliJユーザーは標準機能をそのまま活用しましょう。
Eclipseでデコンパイルする方法(Enhanced Class Decompiler)
長年Java開発のスタンダードであるEclipseでも、プラグインを導入することでデコンパイルが可能になります。
デフォルトの状態では .class ファイルを開いても「ソースが見つかりません」と表示されるだけですが、以下の手順で解決できます。
Enhanced Class Decompiler(ECD)の導入手順
- Eclipseのメニューから
[Help] > [Eclipse Marketplace]を開きます。 - 検索窓に 「Enhanced Class Decompiler」 と入力し、検索します。
- 「Install」ボタンをクリックしてインストールし、Eclipseを再起動します。
- メニューの
[Window] > [Preferences] > [General] > [Editors] > [File Associations]を開きます。 *.classおよび*.class without sourceのデフォルトエディタを「Class Decompiler Viewer」に設定します。
これで、Eclipse上でクラスファイルを開くだけで、自動的にデコンパイルされたコードが表示されるようになります。
専用ツール「Recaf」を使ったデコンパイル
IDEを使わずに、単体のツールとしてJARファイルやclassファイルの中身を見たい場合は、「Recaf」がおすすめです。
以前は「JD-GUI」というツールが定番でしたが、Java 8までの対応にとどまるため、Java 11以降のモダンな機能(モジュールやRecordなど)を含むファイルではエラーになることがあります。
現在は、多機能なバイトコードエディタであるRecafを使うのがデファクトスタンダードです。
Recafの特徴と使い方
Recafは、複数のデコンパイラエンジン(CFR, Fernflower, Procyonなど)を切り替えて使用できる強力なツールです。
- GitHubのリリースページなどから
recaf-x.x.x-jar-with-dependencies.jarをダウンロードします。 java -jar recaf-xxx.jarで起動します。- 解析したい
.jarファイルや.classファイルをドラッグ&ドロップします。
読み込めなかった場合でも、デコンパイラの種類を変更することで表示できることが多く、解析作業において非常に頼りになります。
コマンドライン(CLI)でデコンパイルする
GUIを使わず、ターミナルやコマンドプロンプトでサクッと確認したい、あるいはスクリプトに組み込んで自動化したい場合は、CUIツールを使用します。
JDK標準の「javap」コマンド
JDKには標準で javap という逆アセンブラが含まれています。
これはソースコードへの復元(デコンパイル)ではなく、バイトコードの中身(命令セット)を確認するためのものですが、メソッドのシグネチャ(引数や戻り値)を確認する程度なら十分使えます。
javap -c MyClass.class
実行結果(例)
Compiled from "MyClass.java"
public class MyClass {
public MyClass();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void sayHello();
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello!
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
FernflowerやCFRなどのデコンパイラ
完全なソースコードに戻したい場合は、IntelliJ IDEAの内部でも使われている「Fernflower」や、最新のJava構文に対応した「CFR」などのコマンドラインツールをダウンロードして使用します。
例:CFRを使ってデコンパイルし、標準出力に表示するコマンド
java -jar cfr.jar MyClass.class
デコンパイルの注意点と法的リスク
デコンパイルは非常に強力な技術ですが、利用には注意が必要です。
ライセンス違反
商用ソフトウェアやライブラリの多くは、利用規約(EULA)で「リバースエンジニアリング(デコンパイル含む)の禁止」を明記しています。
規約を必ず確認し、許可されている範囲内(または自社コードの解析など)でのみ行いましょう。
コードの完全性
デコンパイルされたコードは、元のコードと論理的には等価ですが、コメント、空行、ローカル変数名などは失われていることがほとんどです。
そのまま再コンパイルして動くとは限りません。
Javaのスキルを活かして年収を上げる方法
以上、Javaのデコンパイルについて解説してきました。
なお、Javaのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなJavaの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



