この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: Applet(アプレット)
SEOタイトル: Java Applet とは — 廃止された技術と現代の代替(JavaFX / Spring Boot / WebAssembly)

この本文には実行可能なタグ等が含まれるため、安全のためHTMLソースとして表示しています。本文データは変更していません。

<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;background:#fffbea;border:1px solid #f4c430;margin:1em 0;width:100%"><tr><td style="background:#f4c430;color:#000;font-weight:bold;padding:8px">この記事の要点</td></tr><tr><td style="padding:10px"><ul><li><strong>Java Applet</strong> は HTML の <code><applet></code> タグでブラウザ内に Java を埋め込む 1995 年からの技術</li><li><strong>2017 年に Oracle が Java Plug-in を廃止</strong>、主要ブラウザも NPAPI を削除済 → 現代の Web ブラウザでは動かない</li><li>代替の <strong>Java Web Start</strong> も Java 11 (2018) で廃止</li><li>デスクトップ用途は <strong>JavaFX</strong> / <strong>Swing</strong>、Web 用途は <strong>Spring Boot + フロントエンド分離</strong></li><li>Applet コードを救済するなら <strong>JavaFX への移植</strong> または <strong>CheerpJ / TeaVM</strong> で WebAssembly 化</li></ul></td></tr></table>
<h2>Java Applet とは</h2>

<p><strong>Java Applet</strong> は、1995 年に Java 1.0 とともに登場した「ブラウザ内で Java プログラムを実行する仕組み」です。HTML 内に <code><applet></code> タグを書くと、ブラウザがクライアント側で JVM を起動して Java のコードを動かしました。</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-html"><!-- 当時の典型的な使い方 (1990 年代〜2000 年代前半) -->
<applet code="HelloApplet.class" width="300" height="200">
  あなたのブラウザは Java をサポートしていません。
</applet>

<!-- HTML 4 / 5 では object タグも使われた -->
<object type="application/x-java-applet" width="300" height="200">
  <param name="code" value="HelloApplet.class">
</object></code></pre><pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-java">import java.applet.Applet;
import java.awt.Graphics;

public class HelloApplet extends Applet {
    public void paint(Graphics g) {
        g.drawString("Hello Applet World", 50, 50);
    }
}
// javac HelloApplet.java で生成した .class をブラウザが読み込む</code></pre>
<p>Swing が使える <code>JApplet</code> もありました:</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-java">import javax.swing.JApplet;
import javax.swing.JLabel;

public class HelloJApplet extends JApplet {
    public void init() {
        add(new JLabel("Hello, Swing Applet"));
    }
}</code></pre>
<h2>なぜ廃止されたのか</h2>

<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;width:100%">
<thead><tr style="background:#fff3e0"><th>時期</th><th>出来事</th></tr></thead>
<tbody>
<tr><td>2013-2015</td><td>Java Plug-in の脆弱性 (CVE) が大量に発覚し、ブラウザベンダが警戒</td></tr>
<tr><td>2015</td><td>Chrome が NPAPI サポートを廃止 (Java Plug-in 使用不可)</td></tr>
<tr><td>2016</td><td>Firefox が NPAPI 廃止予告 (ESR を残し本流は終了)</td></tr>
<tr><td><strong>2017</strong></td><td><strong>Oracle が Java 9 で Java Plug-in を deprecated と宣言</strong></td></tr>
<tr><td>2018</td><td>Java 11 で Java Plug-in / Java Web Start が完全削除</td></tr>
<tr><td>2020</td><td>Edge (Chromium 版) も NPAPI 非対応 (Internet Explorer サポートも縮小)</td></tr>
<tr><td>2022</td><td>Internet Explorer 11 廃止 (Microsoft が IE をサポート終了)</td></tr>
</tbody>
</table>

<p>主な廃止理由:</p>

<ul>
<li><strong>セキュリティ</strong>: サンドボックスをすり抜ける脆弱性が多発、PC ウイルスの主要侵入経路に</li>
<li><strong>NPAPI 終焉</strong>: モダンブラウザは古いプラグイン規格を排除</li>
<li><strong>JavaScript の進化</strong>: HTML5 / Canvas / WebGL で Applet のできることは置き換え可能に</li>
<li><strong>モバイル非対応</strong>: スマートフォンのブラウザでは元々 Applet が動かない</li>
</ul>

<h2>Java Web Start も廃止</h2>

<p>ブラウザ廃止後の代替として「JNLP ファイルをクリックで Java アプリを起動する」 <strong>Java Web Start (JWS)</strong> が用意されていましたが、これも <strong>Java 11 で削除</strong>されました。</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-xml"><!-- 旧来の JNLP (もう使えない) -->
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://example.com/app">
  <information>
    <title>My App</title>
    <vendor>ACME Inc.</vendor>
  </information>
  <resources>
    <j2se version="1.6+"/>
    <jar href="MyApp.jar" main="true"/>
  </resources>
  <application-desc main-class="com.example.Main"/>
</jnlp></code></pre>
<p>代替として <strong>OpenWebStart</strong> という OSS プロジェクトはありますが、新規採用は推奨されません。</p>

<h2>現代における代替手段</h2>

<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;width:100%">
<thead><tr style="background:#e8f5e9"><th>旧 Applet の用途</th><th>現代の代替</th></tr></thead>
<tbody>
<tr><td>ブラウザ内インタラクティブ UI</td><td>JavaScript / React / Vue / Svelte</td></tr>
<tr><td>業務 Web 画面</td><td>Spring Boot + フロントエンド (React/Vue)</td></tr>
<tr><td>デスクトップ GUI</td><td>JavaFX / Swing / SWT</td></tr>
<tr><td>クロスプラットフォーム実行</td><td>jpackage で .exe / .dmg 配布、または Electron</td></tr>
<tr><td>3D / グラフィック</td><td>WebGL / Three.js / WebGPU</td></tr>
<tr><td>Java コードを Web で動かしたい</td><td><strong>CheerpJ</strong> (Applet を WebAssembly 化) / TeaVM</td></tr>
</tbody>
</table>

<h2>JavaFX への移行例</h2>

<p>Applet を JavaFX デスクトップアプリに置き換える簡単な例:</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-java">import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFx extends Application {
    @Override
    public void start(Stage stage) {
        Label label = new Label("Hello JavaFX");
        Scene scene = new Scene(new StackPane(label), 300, 200);
        stage.setScene(scene);
        stage.setTitle("Migrated from Applet");
        stage.show();
    }

    public static void main(String[] args) { launch(args); }
}
// jpackage で .exe / .app / .deb として配布可能</code></pre>
<h2>CheerpJ — Applet を WebAssembly で動かす</h2>

<p>レガシー Applet をどうしてもブラウザで動かしたい場合、Leaning Technologies 社の <strong>CheerpJ</strong> が使えます。Applet の JAR を WebAssembly に変換してブラウザで実行できます。商用利用は要ライセンス。</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-html"><!-- CheerpJ で旧 Applet をブラウザ復活させる例 -->
<script src="https://cjrtnc.leaningtech.com/3.0/cj3loader.js"></script>
<script>
  cheerpjInit();
  cheerpjCreateDisplay(800, 600);
  cheerpjRunJar("/app/HelloApplet.jar");
</script></code></pre>
<h2>FAQ</h2>

<p><strong>Q: Internet Explorer なら Applet が今でも動く?</strong><br />
A: 動きません。IE 自体が 2022 年にサポート終了済。Windows 11 では起動すらできません。</p>

<p><strong>Q: 自治体・銀行で Applet を使い続けている事例があるが?</strong><br />
A: 専用ブラウザや OpenWebStart で延命しているケースがありますが、<strong>セキュリティリスクが大きく早期移行が必要</strong>です。多くの公共システムが 2020 年前後に置き換えを完了しています。</p>

<p><strong>Q: 学習目的で Applet を書きたい</strong><br />
A: 教育用途なら Java 8 + 旧 Eclipse で <code>appletviewer</code> を使う方法がありますが、現代の入門としては<strong>JavaFX や Swing</strong> を学ぶ方が将来役立ちます。</p>