JavaFX で Javascriptを
      テストする
  presented by @mike_neck
皆さんご存知とおもいますが、

JavaFXにはWebkitを搭載した
WebViewがあります。
だから…

JavascriptのテストをJavaでや
ることができるんです!
Javascriptで
  Javaではありません
型安全
カターンゼン
バンザーイ
 (∩´∀`)∩
!
?
ところが…
 なにっ(・・;)
JavaFXやる
   …
余裕なかった

  んで
  (;・∀・)ハッ?
なんもやって

 ません
 (ΦωΦ)!!!!!!!!!!!!!!!!!!!!!!!!
おあり
(´・ω`・)エッ?
…
…
……
…
………
 |д゚)チラッ
ダメだよね…
  (´;ω;`)ブワッ
最近やってた

       こと
      サボってないよ
 (゚д゚)(。_。)(゚д゚)(。_。) ウンウン
話します
 ε-(´∀`*)ホッ
Swingの
JavaFXからずいぶんと離れるな…
レガシーコード

   を
やっつけてま

  した
どんなに、

レガシー?
こんな感じ
あるソースの100行目付近

strValue = "";
File file = new File ("conf/system.properties");
FileInputStream in = null;
try {
    in = new FileInputStream (file);
    Properties prop = new Properties();
    prop.load(in);
    strValue = prop.get("hoge");
}
その12行くらい後

strValue = "";
File file = new File ("conf/system.properties");
FileInputStream in = null;
try {
    in = new FileInputStream (file);
    Properties prop = new Properties();
    prop.load(in);
    strValue = prop.get("huge");
}
さらにその12行くらい後

strValue = "";
File file = new File ("conf/system.properties");
FileInputStream in = null;
try {
    in = new FileInputStream (file);
    Properties prop = new Properties();
    prop.load(in);
    strValue = prop.get("hade");
}
コピペ!
 (´;ω;`)ブワッ
レガシーコード

  の
   氏ね!
改修

やってました
  (´;ω;`)ブワッ
というわけで
自己紹介
@mike_neck
   みけでいいです
Javaなんか

やってます
  Groovyが好き
あんな酷い

コードですが
ありがたい

オマンマの種
  ありがたい…
ビルドとか

面倒なので
最初はビルドできませんでした
gradleで

buidしてます
 build.gradle組むの大変だった
欲が出てtest

書いてます
  レガシーすぎるので
欲が出て

groovyでtest
  Javaでテスト面倒なので
だんだん

イラっとして
それでもまだまだレガシー
プロダクトに
 groovy
  やったー
と思ったのも

つかの間
  (´・ω`・)エッ?
ビルドおちた
  (´;ω;`)ブワッ
原因

● Javaのプロダクトコードから
  Groovyのプロダクトコードを参
  照している
● gradleのビルドモデルは
  Java→Groovyの順で実行さ
  れる
つまり
Javaが依存しているGroovyのコードを先にコン
      パイルしていないとAUTO!
解決策
コンパイル時に実装を隠蔽していくれるようなそ
     んなコンパイルを行いたい
DIほしい
それも実行時に実装クラスを指定できるような
         やつ
欲しい機能

● 文字列から実装クラスを指定
  できる。
● staticなコンテキストでも呼び
  出せる。
● Exceptionとか面倒なんで、
  例外はRuntimeにしたい。
作った機能

● アノテーションで実装クラスを
  指定する。
● アノテーションで指定されたク
  ラスを注入する。
● 指定されたクラスがない場合
  は、それを示す実行時の例外
  をthrowする。
作った機能

● @GroovyImpl
  (implementedClass = "クラ
  スのFQCN")
● インタフェースに付与された
  @GroovyImpleアノテーション
  をから実装クラスをインスタン
  ス化
https://github.com/mike-
   neck/gj-groovy-joint


にて公開予定
groovyのご利

用は計画的に
   by mike_neck

Groovy joint