とあるローカル辞書アプリが linux 上で動かなくなってしまったことなどをきっかけに jiro-aqua/aDice を Java Desktop App に移植することをここ最近やっていた。

jaDice is a PDIC viewer for PC ported from android app “[adice]”

Works on Java SE 8+ / OpenJDK 8+.

cat-in-136/jaDice: PDIC viewer for PC ported from android app “adice”

行儀悪いことに windows だとユーザ設定をレジストリに書き散らす、 嫌われやすいアプリに仕上がっているので、注意されたい。

User setting is stored at

  • windows: \HKEY_CURRENT_USER\Software\JavaSoft\Prefs\io\github\cat_in_136\jadice on the registry
  • macos: /io/github/cat_in_136/jadice on ~/Library/Preferences/com.apple.java.util.prefs.plist
  • linux: ~/.java/.userPrefs/io/github/_!':!}@"0!&8!a@"u!&8!:@!z!$}=/jadice/prefs.xml
Screenshot of JaDice

PDIC の読み取りを自力で実装・移植してやろう、 と1年ぐらい前からファイル形式を調べたりしてきたのだが、 PDICファイルの内部で使っている BOCU-1 という文字コードの扱いなど ちらほらと面倒くさいところがあり、 5回ぐらいプロジェクトを組む→投げ捨てるを繰り返していた。

突破口は手元に転がっていた。スマホ用の PDIC viewer である aDice を使っていたのだが、冷静に考えてみると昔からストレス無く軽快に動く。 しかも調べてみると github 上にソースが上がっていて、 PDIC ファイル関連処理と android 用処理が綺麗に分離されたコードになっていた。 かつてのアドエス(WS011SH)用の pDice とのソース管理の都合そうなっている経緯と推測される。 しかも、このソースコードのライセンスが NYSL であるから、 煮るなり焼くなり好きにしてよいわけだ。

この aDice の PDIC ファイル関連処理を丸パクリ、 適当な GUI をつければいいだろうということで、やってみたら、 当然のごとくサクサク動いた。

適当な GUI を付けるにあたっては JavaFX の使用も検討に加えたが、 レイアウト以外はそこまで凝ったことはしないのと、 OpenJFX移行などで可能なことはわかっているが色々とまだ混沌としていることがあるため現時点では避けた。 技術が枯れていないためひとまず旧時代のライブラリだが OpenJDK にも標準添付である Swing を使うことにした。

一方で、新規に書くロジック部分は Kotlin で書くこととし、 現代的な書き方としてメンテナンス性を上げておいた …というか内部クラスなど冗長な記述を書くのが面倒なだけだった気がしないでもない。

一点 aDice では C で書かれたネイティブコードで実行していた インデックスファイル生成処理があったが、 今日の CPU の性能ではネイティブコードにしなくとも充分な パフォーマンスが出るだろうし、ほぼコピペで Java に移植できた。

JaDice icon artwork

最後にアイコンも、これまた昔あった Tango Desktop Project の アイコンを 複数組み合わせて aDice のアイコンを再構成したものであり、 これまた丸パクリで作った。