プログラミング言語「MVEL」を簡単に試せる実行環境をコンテナとして提供するものです。
MVELがどういう言語か端的に表現すると、Javaの資産を使えるのにコンパイル不要でJavaScriptのように書ける動的型付け言語です。
Javaへ埋め込み可能なランタイム言語なので、実行環境としてはJavaのコンテナになります。
ぜひ、コンパイル作業から解放されJavaの資産を自由自在に扱える、MVELの高速な開発体験を試してみてください。
- DockerとDocker Composeに関する基本的な知識があること
- Javaの知識は不要ですが、コンパイル言語の概念を理解していること
- このリポジトリをgit cloneしてプロジェクトを始めます。
git clone https://github.com/y-magavel/MVEL-playground.git
- ルートディレクトリに移動してコンテナイメージをビルドします。
cd MVEL-playground
# Docker Composeを使用してDockerイメージをビルドする
docker compose build
- コンテナを立ち上げます。
docker compose up -d
- コンテナの中に入り、Javaファイルをコンパイルします。
# コンテナの中に入る
% docker compose exec -it java /bin/bash
# コンテナの中でJavaファイルをコンパイルする
root@コンテナID:/usr/src# javac Main.java
- コンバイルされたJavaのクラスファイルを実行します。
root@コンテナID:/usr/src# java Main
# 実行結果
Hello World! from Java
Hello World! from MVEL
MVELのソースファイルはsrc/mvelディレクトリに配置しています。
src/mvel/main.mvel
// これはMVELのソースコードです。
// HelloWorldを出力するシンプルな関数を定義
def sayHello() {
place = "from MVEL";
System.out.println("Hello World! " + place);
}
// 関数の呼び出し
sayHello();
HelloWorldを出力するシンプルな関数をサンプルとして用意しています。
MVEL-playgroundでは、基本的にこのmain.mvelファイルを編集することになります。
下記のようにimport文でJavaに存在するクラスを使用することができます。
// これはMVELのソースコードです。
import java.util.Calendar; // Javaの資産をimportで使える
// JavaのCalendarを使って現在日時を出力する関数を定義
def isTime() {
Calendar calendar = Calendar.getInstance();
today = calendar.getTime(); // 現在日時を取得
System.out.println(today);
}
// 関数の呼び出し
isTime();
詳しい文法については下記の公式ドキュメントを参照してください。
前述の通り、MVELはJavaと違ってコンパイルが不要です。
MVELのソースファイルを編集後、すぐにjava Main
で既にコンパイル済みのクラスファイルを実行することで動作を確認できます。
実行環境はJavaのDockerコンテナで動いています。
Docker Composeでローカルとコンテナのポートマッピングや、コンパイル時に参照するclasspathをコンテナの環境変数として設定していたりします。
ディレクトリ構成は下記のようになっています。
.
├── LICENSE
├── README.md
├── docker-compose.yml
├── infra
│ └── java
│ └── Dockerfile
└── src
├── Main.java
├── lib
│ └── mvel2-2.4.14.Final.jar
└── mvel
└── main.mvel
MVEL-playgroundを作成するにあたって参考にさせていただいた記事の一覧です。