Clojure CLIでGraalVMなモジュールをつくる
お断り(disclaimer):もちろんこの手順は無保証です。
Clojureの起動の遅さをどーすっかなぁって思って調べると、GraalVMってのがあって気になっておりました。 あれこれ調べてみるとBuild GraalVM native images with Clojure Deps and CLI tools ってのが楽そうなので試してみました。 ふつーにREADMEに従ってやってみたのですが、GraalVMのbinaryにPATHを通した だけではだめっぽくって環境変数も設定しました。
export GRAALVM_HOME=${INSTALLED_DIR}
export PATH=${PATH}:${GRAALVM_HOME}/bin
Clojure CLIつかうので構成は下記の通り。classesがあるのはご愛嬌です。 gitの使い方がまだ下手なだけです。
.
├── README.md
├── classes
│ ├── core$_main.class
│ ├── core$fn__852.class
│ ├── core$loading__6706__auto____850.class
│ ├── core.class
│ └── core__init.class
├── deps.edn
└── src
└── core.clj
2 directories, 8 files
Clojureのソースは
(ns core
(:gen-class))
(defn -main[& args]
(println "Hello, World!"))
です。大したことやっていません。
deps.ednはコーンな感じ
{:deps {org.clojure/clojure {:mvn/version "1.10.0"}}
:aliases {:native-image
{:main-opts ["-m clj.native-image core"]
:extra-deps
{clj.native-image
{:git/url "https://github.com/taylorwood/clj.native-image.git"
:sha "498baa963e914fd817dbf33ea251729efd0c8f95"}}}}
:jvm-opts ["-Dclojure.compiler.direct-linkng-true"]
}
これでCLIから
clj -A:native-image
でうちこむと実行モジュールができちゃいます。 こりゃええわぁ。