Scalaで小さいAppletを作る8手順
グラフィカルなアプリケーションをScalaで作ったら公開したくなりますよね。
となれば、Appletを使いたくなります。
ここで問題になるのがScalaのランタイムライブラリであるjarファイルのサイズが結構でかいことです。
Proguardというソフトを使って圧縮をすることでjarファイルが劇的に減らすことが広く知られています。
しかしながら、問題はその作り方がよく分からないってことでした。
ということで、ひとつバッチファイル一発でappletが作れるサンプルを作ってみました。
やりかたは以下の8手順です。8と言っていますが肝は2〜6です。
1.アプレット用のフォルダを作る
2.proguard.jar (scalaのソースプログラム)をダウンロード
3.app.scala (scalaのソースプログラム)を書く
4.app.html (アプレット表示用html)を作成する
5.appm.bat (バッチファイル)を作成する
6.app.txt (proguard用設定ファイル)を書く
7.appm.bat (バッチファイル)を実行する
8.app.htmlを開く
1.まずは適当にappとかいうフォルダを作ります。
2.次に、proguardをsourcefogeのサイトからダウンロードしてきます。
アドレスは、ここから、ここいって、このファイルになります。
そして、ファイル中のlib以下にあるproguard.jarを取り出して、appフォルダに置きます。
3.app.scalaを書きます。たとえばこんな感じです。
import java.awt._ import java.applet._ case class HelloWorld() class app extends Applet { override def paint(g:Graphics) { val hoge = HelloWorld() g.drawString(""+hoge, 20, 20) } }
いちお、scalaっぽさを出すために無駄にcase classを作ってます。
これも、appフォルダに入れておきましょう。
4.アプレットを開くためのapp.htmlを作ります。
<html> <title>Hello World Applet</title> <body> <applet code="app" archive="app.jar" width=100 height=100> </applet> </body> </html>
5.appm.batというバッチファイルを作ります。windows以外のOSであれば、シェルスクリプトになるかと思います。
call scalac app.scala jar cvfM app.jar *.class java -jar proguard.jar @app.txt
最初にscalacでコンパイルして、jarファイルで圧縮した後、proguard.jarを実行するというものです。
cvfMのMはjarファイルにManifestファイルを入れないオプション。
@app.txtというのは、proguard用の設定ファイルの名前です。
6.では、app.txtというproguard用の設定ファイルを作ります。
-dontusemixedcaseclassnames -dontoptimize -injars app.jar;'c:/Program Files/Scala/lib/scala-library.jar'(!META-INF/MANIFEST.MF,!library.properties) -outjars app.jar -libraryjars <java.home>/lib/rt.jar -keep public class app
中身はこんな感じです。
injarsの'c:/Program Files/Scala/lib/scala-library.jar'は適当に書き換える必要があるかもしれません。
この設定をどうするんだ−ってところがかなり悩む部分です。
7.後はapp.batを実行してビルドします。
8.app.htmlを開いてHelloWorld()と表示されたら成功です。Conglatination!! おめでとうございます。
ということで、できた、jarファイルの中身はちゃんと圧縮されて、a,b,cっていう名前のクラスやら
フォルダが沢山並んでます。
今回作ったアプレットは12.4kbyteです。PCで使うなら十分小さいですよね。
さ、これで思う存分、scalaでアプレットを書くぞーっと!!