記事内にはプロモーションが含まれています

【Java】デコンパイルとは?EclipseやVSCodeでclassファイルを復元する方法とおすすめツール

【Java】デコンパイルとは?EclipseやVSCodeでclassファイルを復元する方法とおすすめツール Java

Javaで開発を行っていると、

「ソースコードがないライブラリの中身を確認したい」
「コンパイル済みの .class ファイルから元のコードを復元したい」

という場面に遭遇することがあります。

このような時に役立つ技術が 「デコンパイル(逆コンパイル)」 です。

かつては専用のツール(JD-GUIなど)を別途インストールして使うのが一般的でしたが、現在はIDE(統合開発環境)の機能として標準搭載されていたり、拡張機能を入れるだけで簡単に実行できるようになっています。

この記事では、Javaにおけるデコンパイルの仕組みから、EclipseやVS Codeを使った手軽な方法、そしてコマンドラインで使えるツールまで、用途に合わせた最適なデコンパイル手法を徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

Javaのデコンパイル(逆コンパイル)とは?

デコンパイルとは、コンパイルされたバイナリファイル(機械語や中間言語)を、人間が読めるソースコードの形に復元する処理のことです。

Javaの場合、.java ファイルをコンパイルして生成された .class ファイル(バイトコード)を解析し、元のJavaソースコードに近い形に戻すことを指します。

なぜデコンパイルが必要なのか?

主な用途は以下の通りです。

  1. ライブラリの挙動確認:ドキュメントだけでは分からないライブラリ(JARファイル)の内部ロジックを確認する。
  2. ソースコードの紛失対策:ソースコードを誤って消してしまい、コンパイル済みのファイルから復旧したい場合。
  3. デバッグと解析:本番環境で動いている .class ファイルが、手元のソースコードと一致しているか確認する。

ただし、デコンパイルしたコードは元のソースと完全に一致するわけではありません(コメントやローカル変数名が消えていることが多いです)。

あくまで「ロジックを理解するための手段」として利用しましょう。

VS Code(Visual Studio Code)でデコンパイルする方法

現在、多くのJavaエンジニアが利用しているVS Codeでは、拡張機能を入れるだけで驚くほど簡単にデコンパイルが可能です。

特別な操作は不要で、「定義へ移動」する感覚で中身を見ることができます。

拡張機能「Extension Pack for Java」を使う

Microsoftが提供している 「Extension Pack for Java」 をインストールしていれば、デコンパイル機能はすでに備わっています。

  1. VS Codeの拡張機能マーケットプレイスで「Extension Pack for Java」を検索し、インストールします。
  2. プロジェクト内の .class ファイル、または参照しているライブラリ(JAR)内のクラスを開きます。
  3. 自動的にデコンパイルが実行され、エディタ上にソースコードが表示されます。

ポイントは、「ソースコードが添付されていません」といった警告が出ることなく、シームレスに中身を確認できる点です。
変数名なども可能な限り復元してくれるため、可読性も非常に高いです。

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)の導入手順

  1. Eclipseのメニューから [Help] > [Eclipse Marketplace] を開きます。
  2. 検索窓に 「Enhanced Class Decompiler」 と入力し、検索します。
  3. 「Install」ボタンをクリックしてインストールし、Eclipseを再起動します。
  4. メニューの [Window] > [Preferences] > [General] > [Editors] > [File Associations] を開きます。
  5. *.class および *.class without source のデフォルトエディタを「Class Decompiler Viewer」に設定します。

これで、Eclipse上でクラスファイルを開くだけで、自動的にデコンパイルされたコードが表示されるようになります。

※注意:Enhanced Class Decompilerは便利ですが、企業によってはセキュリティポリシーで使用が制限されている場合があります。その場合は、よりシンプルな 「JD-Eclipse」 プラグインの利用や、Eclipse標準の「Source Attachment(ソースの添付)」機能の利用を検討してください。

専用ツール「Recaf」を使ったデコンパイル

IDEを使わずに、単体のツールとしてJARファイルやclassファイルの中身を見たい場合は、「Recaf」がおすすめです。

以前は「JD-GUI」というツールが定番でしたが、Java 8までの対応にとどまるため、Java 11以降のモダンな機能(モジュールやRecordなど)を含むファイルではエラーになることがあります。

現在は、多機能なバイトコードエディタであるRecafを使うのがデファクトスタンダードです。

Recafの特徴と使い方

Recafは、複数のデコンパイラエンジン(CFR, Fernflower, Procyonなど)を切り替えて使用できる強力なツールです。

  1. GitHubのリリースページなどから recaf-x.x.x-jar-with-dependencies.jar をダウンロードします。
  2. java -jar recaf-xxx.jar で起動します。
  3. 解析したい .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の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。