第21回 G*ワークショップ に参加してきた #jggug


(写真:お手製の"Dukeクッキー"。)

デブサミ、JavaOneと続いたため、少し間が空いてしまいましたが、久しぶりのG*ワークショップを開催します。

今回は、今や飛ぶ鳥を落とす勢いのきょんさんによる Griffon でのテスト戦略、
JavaOne Tokyo で好評だった JGGUG セッションから Gradle をフィーチャーした特別編、
そして大手メーカーでの Grails 開発事例と G* 全開の三本立てです。

という訳で久々G*ワークショップ。テーマも個人的に興味深いものが並んでいたので参加してきました。

会場は『無限コーヒー』で毎度お馴染み、オラクル青山センター@外苑前。

会場入場時にはお手製の『Dukeクッキー』が参加者全員に振る舞われました。(当エントリTOP画像参照)造詣の丁寧さは勿論の事、味の方も美味でした!美味しいスイーツをありがとうございました。

▶Griffonうさみみ補完計画-UIをもつアプリへのテスト戦略-

Griffonのテスト周りを紹介しつつ、UIをもつアプリにおけるテスト戦略を紹介します。
  • 今日のテーマ:テスト戦略
    • Griffonでデスクトップアプリ
    • Caution!
      • Griffon:幻獣
      • あんまGriffonの話はしません。
  • Griffonの説明
    • 何か:デスクトップアプリフレームワーク
    • Groovyでかなり楽に書ける。
    • 何故デスクトップ?デスクトップアプリ全盛ですよ?→例)Twitterクライアント。
  • ■Griffonを支える概念
    • Grailsライクアーキテクチャ
      • 設定よりも規約
      • 基本は規約通り。
        • 外れた事をする場合のみ設定。
        • DIでのXML地獄からの脱却
        • XMLとか書いて良いのは小学生(ry
        • コマンドラインで各種操作可能
    • plugin機構
        • コマンドでインストール可能
    • MVCレイヤー
        • MVCでのバインドが非常に容易:@Bindable
        • View上のバリデーション
        • 重要:model != domain model。
        • Griffonでのmodel =あくまでデータの容れ物
    • SwingBuilder
      • Groovyの機能として用意
      • Groovyが提供している内部DSLの1つ
      • DSL
        • 外部:正規表現を書くようなもの。
        • 内部:言語内で表現出来る。非常に簡潔な記述が可能。
          • ASTBuilder, MarkupBuilder
          • SwingBuilderを更に簡潔にしたのがGriffon
    • テストフレームワーク
      • GroovyTestの拡張
      • GroovyTest = JUnit3のGroovy拡張
      • コマンドラインでテストを振り分けられる
      • Controlerのテストだけとかも出来る
      • あるパッケージ配下だけとかも出来る
      • 特定のテストメソッドだけとかも出来る
      • もちろんみんな大好きSpockも!
      • デフォルトでMockもある。
  • ■テスト戦略策定
    • 削除しちゃったので、今からライブで作ります。
    • テスト戦略策定とは何か?→ざっくりいうと、テスト全体の構造作成、計画作成。
    • テストの構造を作る
      • 1.機能を分割すること
      • 2.目的を分割する事
      • ポイント:
        • ※単体、結合、機能テストを行う際に、どのような過程で導き出しているか?
        • ※何も考えずにやってしまうと、項目を分けている時に基準が曖昧になりがち。
        • ※テストの重複をまとめて、無駄をなくすのもテスト戦略。
      • JUnit:カテゴリを使う。
        • テストクラスに対してカテゴリを付ける。
    • (そしてやっとここでGriffonに戻って来る)
    • Griffonはテストフェーズ、テストタイプを指定出来る。
      • コマンドで指定が可能
        • 単体テストフェーズの機能性テスト、という指定が出来る。
        • 何が嬉しいか?
          • テストアプローチ毎に実行出来る。
          • アプローチ毎にメトリクスを収集出来る。
          • Doneの定義をテストアプローチとすると、進捗や信頼性を測りやすくなる。
          • Gtriffonのテスト実行環境素晴らしい!
講演動画

「次世代ビルドツールGradleの最新情報アップデート」

AntやMavenの課題を解決する次世代ビルドツールとして最近注目を集めているGradleの最新情報をご紹介します。 
Antからの移行や、Jenkinsとの統合についても簡単に触れたいと思います。 
(本セッションはJavaOne Tokyo 2012のJGGUGセッションの拡大版です。)
  • 自己紹介
  • ビルドの悩み
    • Java(特にJavaEE)のビルドプロセスは複雑。
      • 依存ライブラリの管理
      • 環境の差異への対応
      • Java以外へのJVM言語への対応
    • これに応えるべく、ビルドツールが進化してきた。
  • ビルドツールの進化
    • Make
      • あんまポータルではなかった
    • Ant
    • Maven
      • Antの良い所を残しつつ
      • POMの概念を導入
      • 予め定義をテンプレートとして用意した
      • ビルド職人は数千行のAntスクリプトとの闘いから逃れる事が出来た。
      • しかし、Mavenプラグインとの闘いが・・・
      • カジュアルにビルドしたいけど、自由度が無い
    • Gradle
      • Ant/Mavenの課題を解決する次世代ビルドツール
        • antやmaven、makeの良いとこ取り。
      • 標準化と柔軟性の両立
      • ビルドスクリプトはGroovyで記述
        • 内部DSLを使って記述
      • 2012/05/21現在、1.0-rc-3が最新。
  • 要するにGradleとは?→クロスプラットフォーム対応次世代ビルドツール
    • mavenのように:規約によるビルドで効率的に記述可能
    • antのように:プロジェクト特有の事情に柔軟に対応可能
    • Makeのように:スクリプトのパワーを活かしたビルドが実現可能
  • Gradleのビルドスクリプト(例)
    • apply plugin: 'java'
    • gradle testを実行:
      • Mavenと同様の規約に従ってプロダクトコードとテストコードを配置
      • gradleはここからはずれた形でも使う事が出来る。
    • ※この辺りの仕組み、実はメソッド呼び出しの形で処理を実現している。Map/メソッド呼び出しの階層、チェーンを使用
    • gradle DSL:素朴な疑問


  • 各種実行デモ
    • 条件分岐も簡単(OS判定)
    • 動的タスク定義も簡単
  • AntからGradleへ
    • Gradleは既存のAntの資産を活用出来る
      • Antのbuild.xmlをそのまま読み込んで実行可能
      • AntタスクをGradleから直接利用可能
      • AntタスクとGradleタスクを共存することも可能
    • Gradleは『Better Ant』としても使える。
    • GradleでAntのタスクを利用例
  • Jenkinsとの統合 - Gradle
    • Gradle Wrapperを利用
      • JDKさえ導入されていれば、Gradleを自動でインストールして実行してくれる
      • Jenkins上では汎用コマンドとして実行すればよい
    • Gradle WrapperはCI用途に限らず、開発者の環境構築負荷軽減にも有用

    • 仕組み:
      • Buildスクリプト¥の中に、wrapperタスクを追加するだけ。
      • Gradle導入済みの環境で・・・
      • すると、Gradleのブートストラップ(gradlew)が生成される
        • gradle wrapper実行
        • gradlew等が自動生成される。
        • gradlew jettyRun
  • Jenkinsのビルド設定
  • Jenkinsとの統合 - Spock
    • レポートはJunit互換なので、Jenkinsでそのまま利用可能
  • Jenkinsのテストレポート設定
講演動画

Grailsを活用したBD-J(Blu-ray Disc Java)アプリケーション制作支援ツール」

  • by 竹内 武 さん

BD-J向け軽量アプリケーションフレームワークをベースとしたアプリケーション制作を支援する
ツール開発におけるGrails活用事例を実際のBDタイトルとともに紹介します。
  • 自己紹介:
    • Webアプリについては初心者。
  • BD-JBlu-ray Disc Java
    • どんな安いプレイヤーにもJVMが入っていて、Javaを動かす事が出来る。
    • BDの動作モードの1つ(もう1つはHDMV)
    • Javaアプリによっってインタラクティブなコンテンツを実現
  • BD-Jアプリケーションの起動
    • index-bdmvの世実行
    • Moview Object→HDMVモード
    • BD-J Object →BD-Jモード
  • BD-Jタイトル制作フロー
  • BD-Music アーキテクチャ
  • BD-Musicの展開に向けて
    • プラグインにある程度再利用性を持たせる事は可能だが、UI/シナリオはタイトル毎にカスタマイズが必要
    • スクリプトによるUI定義が可能なGRINを採用
    • GRIN:BD-J等のCDC機器向けのグラフィックライブラリ
    • Showファイル文法の理解が課題
  • Show/Segment関連クラス構成
  • Feature関連クラス構成
  • RCHandler関連クラス構成
  • BD-アプリケーションビルダ概要
    • 対話形式でUI定義
      • Showファイル文法の理解は不要
    • 複数ユーザによる共同作業
    • GRINビューアによる動作確認(Java Web Startを利用)
  • システム構成
  • まとめ
    • Webアプリ開発に不慣れでも何とか動く物を得られる。
    • しかも短期間に。
    • 少し手間取ったのはメソッドのオーバーロードとオブジェクト生成時の振る舞い
    • パフォーマンスチューニングが課題
講演動画

『レッツゴーデベロッパー THE NEXT』のお知らせ


  • 豪華セッション。
  • 継続的デリバリーセッション『継続的デリバリーが拓く新世紀』
  • JGGJG三大猫アイコン揃い踏み!
  • 今年もやります!個人サポーター制度。
  • Tシャツ、今年も買って下さい!今年は4種類。


  • Tシャツ申込は5/24まで。
  • 2012/06/09仙台で会いましょう!

このプログラムラインナップ、かなり魅力的ですね…。定員100名、エントリ執筆現在で30名弱の参加申込アリ。興味のある方は是非申し込んで見てはいかがでしょうか?

講演動画


懇親会


今回のG*ワークショップ、半数近い方々が(G*ワークショップ)初参加だったそうです。参加定員70名と多かったのもあるし、このG*系初参加の割合もあるし、やはりGroovy界隈は熱を帯びつつあるのでしょうか。

懇親会の最中には、うさみみさん初サインを書く一幕も。(つうかこの件、自分が急かしたのも若干無くもなかったがw)

YouTube動画について

本当は先日買ったWebカメラ、単独でUST放送機能もついていたのですが機材経由での接続が上手く行かず(WiMAXなら行けそうだったが、オラクル青山センターの場合WiMAXは使えず独自のWiFi接続:そこの接続方法に機材が上手く対応出来なかった)。結局は動画撮影→YouTubeへとUPという形をとる事になりました。

Webカメラの機能的にはフルHD動画撮影も可能という事でしたが、充電などの問題もあり、若干画質を落とした形で(それでもHD動画)座席最前列に陣取って撮ったのが今回UPしたものになります。カメラ単体のみ使用、マイクなども使っていません。(Webカメラ備え付けのマイクのみ)

会場の方で用意されたマイクがあったお陰で充分な音量を得る事が出来ましたが、これ無かった場合はどの程度拾えるのでしょう?その辺はやってみないと分からないですが、マイク有りでこれだけ充分な結果を得られているので、やはりマイクはあった方が撮影環境的には助かる感じですね。

また、今回はUSTREAM配信をゆーすけ(TwitterID:@yusukey)さんが担当されており、横で準備〜当日の各種機材捌きっぷりを拝見しておりましたが、機材やソフトの準備、調整、制御等事細かに対応されているのをみて、これはやはり熟練ガ必要な領域であるのだな〜と痛感致しました。(^_^;)


と言うわけで、以降は可能であればUSTREAM配信を試みてみたり、それが無理目ならば今回のように動画撮影→YouTube動画UPをやってみようかと思います。参加した勉強会でその辺可能であれば対応しようかと思いますので、よろしくお願い致します。


その他関連: