ClojureでGUIを作る為の良い方法を教えてください。

自分が特に良い方法と思うのは以下のような物です。

  * Clojureのみで完結する

  * GUIビルダ等を使いGUIでUI設計ができる

  * コードを書く量が少ない

勿論一般的に良い方法と思われる物も知りたいのですが、上の条件を満たす方法があれば嬉しいです。

今までの試行錯誤では、SwingやSWTを直に叩く方法や、SeesawもしくはSeesaw+GoogleWindowBuilderという方法を試しました。
今の所Seesaw+GoogleWindowBuilderを使っています。

今の方法にも一応満足はしているのですが、何か他の良い方法は無いかを知りたいです。

方法のサンプルや、チュートリアルもあれば嬉しいです。
CC BY-SA 3.0
2014-12-18T12:34:16.820
2038
2015-01-25T02:54:13.743
2014-12-18T16:01:35.613
4632
4632
question
lisp clojure
ClojureでGUIを作る良い方法を教えてください
ClojureScript で良いのであれば

  * <https://github.com/rogerwang/node-webkit>

でLinux, Mac OS X, Windows に対応したアプリを, Html, CSS, JavaScript(ClojureScript)
で作成できます。

LightTable というエディタが上記の方法で開発されています。

また、

  * atom-shell

でも同じような構成でアプリを開発することができます。
CC BY-SA 3.0
2014-12-18T13:40:36.117
2045
2014-12-18T13:40:36.117
3199
2038
answer
やはり JavaFX が一番良いのでは無いでしょうか？

JavaFX には FXML という XML で UI の構造を組み立てる仕組みがあり、[Scene
Builder](http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-
info-2157684.html%22Scene%20Builder%22) という FXML の構築に特化した GUI ビルダもあります。

Clojure + JavaFX + FXML でのアプリケーション構築を試された方のブログエントリもあるので、参考になると思います。

<http://tnoda-clojure.tumblr.com/post/54691550227/clojure-java-fx-5-fxml>
CC BY-SA 3.0
2014-12-19T01:23:49.057
2076
2014-12-19T01:23:49.057
3374
2038
answer
現時点でGUIビルダとセットで使える開発環境は、

  * Eclipse & SWT (どちらもEclipse財団の管理)

くらいのはずです。なので、GUIビルダを使う前提であれば、SWT や AWT/Swing で実装されているクラスを gen-class/gen-
interface マクロで拡張しながらClojure本体のコードを書くというスタイルになります。 例えば、

```

    (gen-class
      :name myns.ExtendedFrame
      :extends java.awt.Frame
      #_"Follow others")
    
```

や

```

    (gen-class
      :name myns.ExtendedButton
      :extends java.awt.Button
      #_"Follow others")
    
```

のように実装をカスタマイズしたいクラスを1つ1つ Clojure 側に引き込み、その都度自分の手で拡張することから始まります。 DSL
の設計が必要になる時もあるでしょう。

もし、あなたがGUIビルダ(それとGUIな環境)に拘らないのであれば、

  * [seesaw](https://github.com/daveray/seesaw)

というよくできた Swingラッパ(with DSL)
ライブラリがあります。こちらについては詳しくないので、お時間よろしい時にでもソースを漁ってみてください。

GUIな環境で何度も画面を切り替えながらやるよりかは、マクロを上手く使って、ご自身がよく書き下すコードのパターンをGUIコンポーネント共々局所化または抽象化しておき、必要になったらそのマクロにまとめて呼び出してもらうスタイルの方が、後々捗る部分が多いと思います。
CC BY-SA 3.0
2014-12-20T17:18:38.500
2285
2014-12-20T17:18:38.500
5385
2038
answer
新しいものでは clojruefxというものが出てきていますね。GUIビルダには対応していないものと思いますけれども。  
<https://bitbucket.org/zilti/clojurefx>
CC BY-SA 3.0
2015-01-25T02:54:13.743
5231
2015-01-25T02:54:13.743
564
2038
answer