Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

VoiceText Web APIを利用したテキスト読み上げソフトを作ってます

近況のご報告

CC関連の記事の連載が絶賛停滞中ですが、最近はプログラミング言語の勉強を兼ねてソフトウェアを作っています。

CC関連の記事は、週末にでも更新する予定です。

背景

もともとは、HOYAサービス株式会社さんのテキスト読み上げエンジンVoiceTextのWebAPI公開に端を発しています。

とても素晴らしいAPIなので、RubyでVoiceTextAPIを使えるライブラリをこっそり作っていたのですが、次のような興味深いページを見つけたので、GUIアプリを作ってみたくなりました。

簡単に言うと、スクリプト言語であるRubyで、JavaおよびJavaFXの機能を呼び出して、GUIアプリケーションを作ることができる。しかもJAR形式で配布もできるのでマルチプラットフォームなアプリが開発できるよ! そしてWindowsPCは売ってしまいなさい。(この要約は個人的なものなので異論は認める)

これは素晴らしい! ということで早速試してみたのです。・・・これが全ての苦労の始まりでした。

苦労の連続

かれこれ2週間近く、JRubyおよびJRubyFXと戯れていたのですが、ドキュメントの少なさに苦労します。

基本的にJRubyFXは、JavaFXの機能をRubyから呼び出すライブラリなので、

欲しい機能がある→JavaFXでどう実現するのか調べる→JRubyFXでそれをどう書くのか調べる

というワンクッション置いた調べ物になります。コード書いている時間より調べている時間の方が長いくらい。

そして苦節10日間あまり。「念願のJRubyFXアプリを作り上げたぞ!」

手元のJRubyFX環境で、VoiceTextアプリが完成しました。

さあ、配布のためにJARファイルにするぞ・・・あれ?エラー?

そしてここからが悲劇の始まりでした。

JARファイルにパッケージングすることで、Java環境さえあれば誰でも使えるソフトになるはずだったのですが、パッケージングするとエラーを吐いて動いてくれないのです。

エラー1 「"FXML"ファイルが読み込めないのですけど!」

JavaFXでは、GUIのレイアウト情報をXML(JavaFXではfxmlファイルと呼んでいます)で記述し、それを起動の時に読み込んでいるのですが、パッケージングするとその情報を見失ってしまうようです。

いろいろと調べた結果、

fxml_root File.dirname(__FILE__), "src"

のように2番目の引数として、JARファイル内の相対パスを指示することでこの問題は解決しました。

エラー2 「AnchorPane is not valid type」

お前は何を言っているんだ?

fxmlファイル自体はJavaFX SceneBuilder2.0というOracle社謹製の公式ソフトを使って作りました。

このエラーが出るということは、JRubyFX関連のライブラリがうまく読み込めておらず、fxmlファイル内の記述が解釈できていないということに、・・・ここであきらめました。

ドキュメントが少なすぎて、ソースコードを追うしか方法はないのですが、さすがにそんな気力はありません。

そして、せっかくJRuby+JRubyFXで作ったアプリは泣く泣くお蔵入りに。

解決法の模索

ここで取れる根本的な解決法は2つありました。

  1. fxmlファイルのロードでエラーでるなら、fxml、ひいてはSceneBuilder使わずにGUIを記述すればいいんじゃね?
  2. もうJavaでプログラム作っちゃえYO!

前者は、多分一番早い解決法なのですが、なんというかこれだと敗北感が・・・。それに今回は良いとしても、今後には続きませんしね。

そこでJavaの勉強も兼ねて、アプリを作り直すことにしたのです。

JavaFX楽しいよ

JRubyFXの勉強と同時にJavaFXについても学んでいたので、進行はとても楽でした。

Java自体を触るのが、それこそ数年ぶりという事実を除けば!

もうJavaに関する知識がJava6のあたりから止まっていたのですよね。しかも本格的に使ったことはありません。

そして今の完成度

現状は、Version0.1としては90%くらいの完成度です。

必要最小限の機能は実装できたので、バグ潰しの段階。

今度の土日くらいには、公開のご案内ができると思います。お楽しみに。

そしてもちろん、CCの記事も週末に更新しますね。