読者です 読者をやめる 読者になる 読者になる

「わいわいGroovy ~ 教えてG*小ネタ大会 - JGGUG G*ワークショップZ Jun 2014」に参加してきた #jggug

Grails Gradle Grain GroovyFX groovy

f:id:orangeclover:20140621085611p:plain

わいわいGroovy ~ 教えてG*小ネタ大会 - JGGUG G*ワークショップZ Jun 2014 2014-06-20(金)19:00 - 21:00に参加してきました。
JGGUG G*ワークショップZに参加するのが1年数カ月ぶり。
会場が品川グランドセントラルタワーになってから初めてでした。

50人ぐらいでいつもよりもだいぶ多めです。Groovy on Androidの影響ですかね?
JGGUG G*ワークショップZ に参加したのが、初めての人が10~15ぐらい、2、3回めの人が3、4人。
あまりGroovyを書けていない人も多く、Groovyの初心者向けのワークショップが要望されてました。



@ 「最近のGrails 3分でわかるGrails

  • Grails 2.4は3.0への通過点
  • Grails3
  • これからの人はGrailsは3が出てからさわってください
  • 2.4、3.0を見すえつつ、2.3系の最新で開発すればよい
  • 2.3→2.4→3.0はスムーズに移行できるはず
  • ちなみに、Gradleは、Grailsのビルドでgantだと依存管理がメンドウという飲み会の話から生まれた
    • でも、GrailsのビルドはまだGradleにはなっていない・・・
  • あとは、今回はマジメに書いたので以下を読んで!
  • 今週のGrailsもよろしく




@ 「Dash/ZealでGroovyJDKを使う話」

    • ブログの記事を書いた人が参加してたので
    • 開発者である @nobeans さんがGroovyServ使えばいいよと
    • Groovy 1.0X sがGroovyServで0.0X.sぐらいに
      • これね、HelloWorldが十数秒かかるようなおっそーーーーーいPCだと非常にありがたいんだよね。
    • GroovyServ
  • Groovy JDKを絞り込み検索できるドキュメントビューアの紹介
  • Dash
    • http://kapeli.com/dash
    • まずはMacの紹介
    • 参加者の8割ぐらいMac
    • Groovy JDKのドキュメント(index-all.html)の時点で、クラス情報などが落ちてたので、最初はうまくいかなかった
    • Groovy JDKのドキュメントへpull req
    • DashでGroovyJDKがまともに見れるようになったのは @nobeans のおかげ
    • gdk:"をキーワードに設定すると便利
    • これでmgdk each(調べたいメソッドなど検索ワード)で、横断的に調べられる





Dash/Zealがどんなものかは以下を見るとわかるかな




@ 「Grainの紹介」

f:id:orangeclover:20140621085632p:plain





markdownで書いて、gradleでビルド、デプロイするOctopress的なもの



@ 「Gradle SSH Pluginの紹介」

  • SIerによくある、手順書を見ながら手動、秘伝のTeraTermマクロを撲滅するため
  • いろんなツールあるけど、統一してGradleにからやりたいよね
  • WebサーバにWARをデプロイ
apply plugin: 'war' 
apply plugin: 'ssh'                                    //プラグインを適用
remotes {
    webServer {                                        //Webサーバを定義
        host = '192.168.1.101'
        user = 'jenkins'  
    } 
}
task deploy(type: SshTask, dependsOn: war) {            //warタスクの後にdeployタスクを実行
    session(remotes.webServer) {
        put war.archivePath, '/webapps'                 //WARファイルを配置し、Tomcatサービスを再起動
        execute 'sudo service tomcat restart'
    }
}
  • ネットワーク機器の設定を取得
task backupConfig(type: SshTask) {
    session(remotes.switch01) {
        file('config.txt').withWriter { writer ->
            shell {
                interaction {
                    when(partial: ~/.*>/) {                           //プロンプトが出現したらコマンドを入力
                        standardInput << 'terminal length 0\n'
                        standardInput << 'enable\n'
                        
                        when(partial: /Password: /) {
                            standardInput << enablePassword << '\n'   //パスワードを入力
                            
                            when(partial: ~/.*#/) {
                                standardInput << 'show run\n'         //show runコマンドを入力
                                
                                when(partial: ~/.*[#>]/) {
                                    standardInput << 'exit\n'         //プロンプトが出現したらexitコマンドを入力
                                }
                                when(line: _) { line -> writer << line << '\n' }  //プロンプト以外の標準出力をファイルに保存
                            }
                        }
                        ・
                        ・
                        ・
  • テストコードはGroovy、Spock
  • sshのテストでApache MINA sshdを使用してる





Gradle SSH Pluginをオフラインで利用する(Fabricぽいことしたい)




@ 「GroovyでJSON、2014年版」




@ 「GroovyFX 0.4ぐらい #mini4wd」

  • Swift(とGroovyが似てる)、Groovy on Androidが注目を浴びてる頃、こっそりとGroovyFX 0.4リリース
  • GroovyFX 0.4はJavaFX 8対応
    • JavaFX 8で動かせられるだけで、新しいAPIには対応していない
    • でも、JavaFX 8のクラスとかそれなりに使える
  • ボールが箱に落ちるはずが、箱がせり上がるデモ
    • この辺のカメラの向き(?)を @skrb に聞きたかったんですが・・・





@ 「Gradleの何か」

  • ホスト環境に、IntelliJ IDEA、Gradle Watch Plugin
  • Vagrantの仮想環境に、tomcat
  • nfsで共有
  • IntelliJ IDEAでソースを修正したら、Gradle Watch Pluginが検知して、ビルドして、仮想環境へデプロイ
  • @bluepapa32 作のGradle Watch Plugin を使用
  • HelloWorldレベルなら全く問題ない
  • プロダクトレベルだと、たまに、ログが無限ループ(?)したり、困ったことにやってる
    • 誰か助けて




@ 「Unity開発、Android開発で使った小人さんスクリプトの紹介」

  • UnityでC#からJavaを呼び出す部分が面倒なので、自動生成するするスクリプトを作ってみようとした
  • でも、java.langにパッケージ追加できないなどの制約にはやってうまくできず
    • GroovyというよりJavaのスキル不足が・・・
    • 時間が・・・
  • 誰か助けて
    • jarから解析するのは厳しいかも
    • Java のbyte コードに型の情報は残ってる残ってないから、AST変換した方が楽かも




JGGUG総会

  • 秋に札幌でG*ワークショップz
  • どんなことをJGGUG、G*ワークショップzに期待しますか?
    • 初心者、入門的なGroovy言語自体のワークショップ

JGGUGメンバ登録はこちらからどうぞ



@ 「Gradleのプラグイン開発を便利にするもの」

  • 参加者への質問 以下の2択
    • Gradleを使ったことがない
    • Gradleを使って便利になっている
  • Gradle はJDK8にまだ対応していない
  • plugin がバラバラになってて一括管理されていない
  • この2つの課題はGradle 2.Xで対応されるはず
    • 先生、選択肢がおかしいです
  • REPLがないのは、Gradle Groovysh pluginを使えば、効率的に書けるよ
    • Groovyshは、補完が効くようになってるので
    • なんのAPIがあるかなと、ドキュメントを見なくても補完ができる
  • (マシンが遅くてなかなか起動せず)「どうてもよくて」とデモ打ち切り
  • markdownでコメントをかける
  • レビューの時に便利
  • f:id:orangeclover:20140621085652p:plain
  • f:id:orangeclover:20140621085707p:plain

デモは日本語コメントだったけど、スクリーンショットを撮らなかったので公式のから。






Groovy 2.2 で強化された groovysh

今Gradleのpluginを探そうとするとSearch Gradle PluginsGradle Plugins ここらへん



@ 「Groovyのtraitを使い倒す!」



LTじゃなくていつものガチなやつだ。

  • Groovyのtrait
    • ×多重継承が可能なクラス
    • ○実装を持てるインターフェース
      • 状態も持てる(Java8のDefault Methodとは違う)
    • 多重継承に付随する「ダイヤモンド継承」問題を解決





時間切れにつき、次回以降に持ち越し。

  • @touchez_du_bois 「Vert.xの何か」
  • @mkawax 「G*Magazineについて」
  • @_y_u_ 「posh-gvmの紹介」