【Java】DockerにEclipseをインストールしてSpringの開発環境を作ってみた

技術

Eclipseをインストールしたくない

宗教上の理由によって、私は普段JavaもEclipseもインストールしません。
Javaの開発は基本Docker上で行いますし、エディタもEclipseではなくVSCodeを使います。

ところが時々仕事内容によってはEclipseでの作業を求められることがあります。
例えば、お客様から適用を要求される checkstyle をサポートするVSCode拡張が見つけられなかったり、コードテンプレート機能が必要だったり、Eclipseでの操作手順について問い合わせを受けたりということです。

そこで、今回はDocker上にEclipseをインストールして開発できる環境を作って見ることにします。
せっかくなので Eclipse はSpring Tools Suiteにして手軽に Spring の開発環境になることもついでに目指してみます。

ちなみに、あくまでも開発のメインはVSCodeのつもりなので、インストールして一通り操作できることが目的です。
Eclipseでガンガン開発することは考えていません。
(少なくとも私の環境ではメインの開発環境とするのは少し厳しかったです)

どうやってEclipseを表示する?

ご存知の通り、DockerコンテナではGUIなソフトウェアを起動しても画面は表示されません。
仮想マシンなので、まぁ当然ですよね。

それでもEclipseを仮想マシンで起動したいわけです。
ではどうするかというとX Window Systemを使います。

LinuxのGUIは X Window System というものが採用されていて、クライアントサーバーモデルに基づいてGUIな入出力が制御されています。
つまり、Xサーバーでウィンドウは表示され、キーボードやマウスの入力もXサーバーで受け付けます。
プログラム自身はXクライアントで動作し、Xサーバーとネットワーク越しに通信する仕組みになっている。

XサーバーはXクライアントと同じマシン上にあってもいいし、ネットワークがつながる別PCにあってもいいのです。

今回はホスト上のWindowsにXサーバーを立てて、DockerコンテナにXクライアントをインストールすることで、Docker内で起動したEclipseがホストのWindowsに表示されるということをやってみます。

ちなみにX Window SystemについてはWikipediaに分かりやすい説明がありましたので、詳しくはそちらをどうぞ。

早速Dockerfileを作ります

Dockerfileを作り始める前に、まずはホストマシンの環境を簡単に記載しておきます。

  • OSはWindows 11
  • Docker desktop for windows version 4.5.1
  • Xサーバーは「VcXsrv X Server Version 1.20.14.0」

XサーバーにはVcXsrvを使いました。
こちらの公式サイトからダウンロードしてインストールしておきましょう。
インストール&使い方は検索すればすぐに見つかります。

VcXsrvがインストールできたら起動しておきます。
もちろんDockerも起動しておきます。

では、いよいよDockerfileを作りましょう。

今回、Dockerコンテナに必要になるものを列挙すると下記のようになります。

  1. Java → 今回は OpenJDK8
  2. Eclipse → 今回は Spring Tools Suite(STS) Version 4.6.0
  3. Xクライアント
  4. 日本語パッケージの導入

ということで最終的に出来上がったDockerfileはこれです。

# ベースイメージは Java 8
FROM openjdk:8

WORKDIR /root/.local

RUN apt-get update

# Eclipse(STS)をインストール
RUN wget https://download.springsource.com/release/STS4/4.6.0.RELEASE/dist/e4.15/spring-tool-suite-4-4.6.0.RELEASE-e4.15.0-linux.gtk.x86_64.tar.gz -O - | tar zxvf - && \
    ln -s /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4 /usr/sbin/sts
# Eclipseは「libswt-gtk-4-jni」がないと動かない
RUN apt-get install libswt-gtk-4-jni -y
# Eclipseの日本語化
RUN wget https://ftp.jaist.ac.jp/pub/mergedoc/pleiades/build/old/2021/0507/pleiades_20210507.zip && \
    unzip /root/.local/pleiades_20210507.zip -d pleiades && \
    cp /root/.local/pleiades/plugins /root/.local/sts-4.6.0.RELEASE -r && \
    cp /root/.local/pleiades/features /root/.local/sts-4.6.0.RELEASE -r && \
    echo "-Xverify:none" >> /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4.ini && \
    echo "-javaagent:/root/.local/sts-4.6.0.RELEASE/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar" >> /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4.ini

# X Window Systemのインストール
RUN apt-get install x11-apps -y
ENV DISPLAY=host.docker.internal:0.0

# 日本語化
RUN apt-get install task-japanese -y && \
    apt-get install locales -y && \
    echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && \
    /usr/sbin/locale-gen

1つ1つ内容を確認してみましょう。

Java → 今回は OpenJDK8

ベースイメージをopenjdk:8にしたのでJavaはインストール済みの環境になります。
ちなみにopenjdkのDockerイメージはOSが Debian になっています。

# ベースイメージは Java8
FROM openjdk:8

Eclipse → 今回は Spring Tools Suite(STS) Version 4.6.0

STSのインストールは圧縮ファイルをダウンロードして解凍するだけです。
stsコマンドで起動できるように/usr/sbin/stsという名前で実行ファイルのシンボリックリンクを作っています。
また、Eclipseにはlibswt-gtk-4-jniが必要らしいのでインストールしています。

# Eclipse(STS)をインストール
RUN wget https://download.springsource.com/release/STS4/4.6.0.RELEASE/dist/e4.15/spring-tool-suite-4-4.6.0.RELEASE-e4.15.0-linux.gtk.x86_64.tar.gz -O - | tar zxvf - && \
    ln -s /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4 /usr/sbin/sts
# Eclipseは「libswt-gtk-4-jni」がないと動かない
RUN apt-get install libswt-gtk-4-jni -y

あと、ついでにPleiadesを導入してEclipseを日本語化しました。
この辺りはお好みでどうぞ。
(今回はJava8がターゲットなので「Java8対応版」をダウンロードしています)

# Eclipseの日本語化
RUN wget https://ftp.jaist.ac.jp/pub/mergedoc/pleiades/build/old/2021/0507/pleiades_20210507.zip && \
    unzip /root/.local/pleiades_20210507.zip -d pleiades && \
    cp /root/.local/pleiades/plugins /root/.local/sts-4.6.0.RELEASE -r && \
    cp /root/.local/pleiades/features /root/.local/sts-4.6.0.RELEASE -r && \
    echo "-Xverify:none" >> /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4.ini && \
    echo "-javaagent:/root/.local/sts-4.6.0.RELEASE/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar" >> /root/.local/sts-4.6.0.RELEASE/SpringToolSuite4.ini

Xクライアント

続いてXクライアントをインストールしています。

# X Window Systemのインストール
RUN apt-get install x11-apps -y
ENV DISPLAY=host.docker.internal:0.0

x11-appsはX Window Systemのアプリケーションを集めたパッケージです。
xeyesやxclockなんかのアプリケーションも含まれています。

それから環境変数DISPLAYに「host.docker.internal:0.0」をセットします。

ここが今回のポイントです。

host.docker.internalはホストOSのIPアドレスを表します。
つまりDISPLAYという環境変数で Xプロトコル の向き先をホストに変更しているわけです。

これでホスト側でXサーバーを起動していればコンテナ内で起動したアプリケーションのGUIがホスト上に表示されます。

日本語パッケージの導入

最後にDebianの言語設定を日本語にしておきます。
こうしないと、ソースコードのコメントなんかに日本語が含まれていても文字化けしてしまいます。

# 日本語化
RUN apt-get install task-japanese -y && \
    apt-get install locales -y && \
    echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen && \
    /usr/sbin/locale-gen

確認してみる

Dockerfileができたので、ビルドして実行してみましょう。
Dockerfileを保存しているフォルダでこのコマンドを実行してDockerイメージをビルドします。

docker build -t sts:4.6.0 .

ビルドしたDockerイメージの実行コマンドはこうです。

docker run -it --entrypoint sts --name sts_dev sts:4.6.0

--enrtypointで sts を指定しているのでコンテナの起動と共にEclipse(STS)が起動し、Eclipseを終了するとコンテナも停止します。
コンテナを起動するだけにして、Eclipseの起動は任意のタイミングにしたいって場合はエントリーポイントは上書きしないでください。

Pleiadesを導入しているので、起動したEclipseはちゃんと日本語化されていると思います。
また、Debianの日本語化も効いていれば、日本語で書かれたUTF8のテキストファイルを開いても文字化けしていないはずです。

開発のメインにできない理由

ということで、無事にEclipseをDockerで実行することができました。

ですが、ここまでやってみて私の感想は「やはりこのままではDocker上のEclipseを開発のメイン環境にはできないな」ということです。

エディタがちらつく

javaファイルをエディタで開いた時、エディタの上をマウスカーソルが移動するたびにエディタが真っ白になってしまうことがありました。

それはプロジェクトが大きくなるとひどくなるみたいで、うまく作れば回避できるのかもしれませんが、いつでも自分が作ったプログラムでだけ作業できるわけではないので、なかなか難しそうです。

ウィンドウ→設定→Java→エディター→吹き出しの順に選択して「最適な吹き出し」のチェックをOFFにすると多少マシになった気はしますが、それも気休めって感じです。

日本語入力できない

Xサーバーから日本語入力しようと思うと、Debianに日本語入力用のインプットメソッドを導入する必要があるらしいです。
少しだけやってみましたが、なかなかうまくいかず、今回はあきらめました。

また、いつか機会があればリベンジします!!

しばらく触らないと勝手に閉じる

Eclipseを起動したまま、例えばブラウザで調べ物をしたり、メールやチャットに返信したりしていると、いつの間にかEclipseが閉じてしまいます。

私の調べたところでは約5分程操作しないと閉じてしまいました。

編集中で保存していないファイルがあれば、当然その編集内容は破棄されてしまいます。
こまめに保存しておかないと痛い目にあいそうです。

まとめ

今回はEclipseをDocker上で起動してホストOSに表示させてみました。

全然使えないということはないので、一応は成功したってことでいいのかなとは思いますが、個人的には今後もやはりメインのエディタはVSCodeになりそうです。

Eclipseはスポット的に使う必要が出てきた時に利用できるかと思います。
手軽にEclipseの環境が作れるようになったという意味で、私個人としてはとても有意義な経験でした。

興味ある方はこの記事を参考にして是非試してみてください。

コメント

タイトルとURLをコピーしました