潜伏バグからのロングフリーズ

Javaっぽいエンジニアの徒然草

Java Day Tokyo 2014

2014/5/22(木) に品川プリンスホテルで行われたJava Day Tokyo 2014に行ってきました。

Java Day Tokyoは、2013年から初まって今年で2回目の開催となるイベントです。

 

品川駅から2分の距離であり、建物自体も大きくて迷うはずは無いところですが、

案の定30分程迷いました('A`)

 

会場は基本的に全席テーブル+座り心地の良い椅子でした。

人気セッションでは即席で追加されたと思われるパイプ椅子や、

立ち見の出るセッションもありました。

電源なし、wifiなしの環境だったので、苦労された方が多数出たようです。

この辺りの環境は事前に告知していただけると参加者としては助かります。

 

教育用レゴロボットMindstormsが会場で販売されていたり、書籍が10%割引で販売されていました。 

Mindstormsと言えば大学の授業で扱った事があり懐かしいものです。

 

全体を通してのキーワード

IoT(Internet of Things)

 

それでは個別に記載していきます。

以下継承略させていただきます。

 

 

■基調講演

#jdt2014_K1

 

会場入口には電子パネルが。

f:id:monokurotamago:20140522094954j:plain

 

基調講演会場。 流石は品川プリンスホテル! 豪華です。

f:id:monokurotamago:20140522095418j:plain

 

オープニング画面。 この後オープニングムービーが流されました。

f:id:monokurotamago:20140522100233j:plain

 

基調講演は基本的に英語のセッションなので内容はあまり理解できていません。

多くの人が入れ替わり登壇する形で執り行われました。

 

 

Nandini Ramani

javaは900万人以上の開発者がいる。

java8ではラムダ式が取り入れられた。

java se8の日本語ドキュメントがJava Day Tokyo 2014の開かれた当日に公開された。

 http://docs.oracle.com/javase/jp/8/

java9 open jdkに貢献してもらえると助かる。

既に総人口よりも接続デバイス数の方が多く、今後は更に差が開いていくはず。

 

 

NECの事例紹介

 papero(ロボット) Java SEで動いている。

   f:id:monokurotamago:20140522103916j:plain

 

 

パナソニックの事例紹介

 Java MEで電子マネー決済システム。

 

 

Cameron Purdy

Java EE 7のお話からのJava EE 8のお話。

Java EE 8 のテーマ

 HTTP2.0, JSON Binding, Server-Sent Events(SSE), JAX-RS MVC

JAX-RS 2.0で唯一廃案になったMVCJava EE 8新機能の上位に入ったらしい。

Java EE8リリースは2016年のQ3になるとのこと。

 

 

Stephon Chin

 Lego Mindstorms, DUkePad, ChessRobot

 

Legoで作られたDukeの登場。

f:id:monokurotamago:20140522111422j:plain

 

レゴのDukeSSHで接続して。セグウェイ

Duke, 大地に立つ!!

プルプルしながらバランスをとるデモ。

f:id:monokurotamago:20140522111851j:plain

 

内部の説明のために首をもがれるDuke.

説明が進むにつれて分解されていき、最後は影も形もない状態に。

TwitterではDuke公開処刑と盛り上がり。

※残忍であるため画像はありません

 

DukePadの説明

構成部品としてRasBerryPIが組み込まれていました。

Padにしては分厚い印象です。

 

ChessRobotの説明

DukePad -> JavaFX on DeskTop -> RealRobo 一連の流れでチェスのデモがありました。

CGは美しく、チェスの駒になったDukeがかわいいw

 

 

Simon Ritter

Oracleがリーダーシップをとって、コミュニティと連携とってますとのこと。

 

 

Yusuke Suzuki

日本Javaユーザグループ(JJUG)について。

2014年5月現在で会員数2290名、Javaに関するイベントやってます。

情報の入手法

 ML

 http://www.java-users.jp/

 twitter @JJUG

 Facebook?

会員数はML登録者数でカウントしているとのこと。

 

 

情報少なくて申し訳ないですが、基調講演に関しては以上です。

 

 

JavaScript Running On JavaVM: Nashorn (新JavaScriptエンジン)

#jdt2014_d1

西川 彰広 (江草家の人々の江草ロジ子さん)

 http://orablogs-jp.blogspot.jp/p/blog-page.html

 

f:id:monokurotamago:20140522132902j:plain

 

agenda

 Nashorn

 Server Side JavaScript

 Nashornの今後

 

Nashorn

JavaScript Engineの一つ。

Rhinoの置き換えで作られた。

JavaJavaScript間での相互呼び出しが可能。

ドイツ語読みで「なすほん」

 

JavaからNashornの呼び出し例

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("nashorn");

~~

~~

 

JavaScriptで「こんにちは」と表示するプログラムを、

Java側でJavaScriptを2秒ごとに呼ぶプログラムを書くと、

2秒ごとに文字が出る。

実行中にJavaScriptに変更を加える。

「こんばんわ」

そうすると、少し時間がかかるが、実行中に変更を検知して表示される文字が「こんばんわ」に変更される。

 

当然、Nashornからjavaも呼び出せる。(相互呼び出し)

 

Nashornならではの拡張は?

java typeの参照が取得出来る

  Rhinoと同じ方法でも取得出来るが、こちらの方法を推奨。

  var HashMap = java.type('java.util.HashMap')

 何が違うの?

  ▶︎ エラー場所が適切に表示されるようになった。

    以前の書き方だと、離れた場所でエラーを検知してしまうことがある。

 

Script functionをLambdaオブジェクトやSAMインタフェースを実装するオブジェクトに自動変換してくれる。

 

Scope and Context

変数の衝突を避けるために、新しいグローバルスコープを作ってそちら側にロードする、といったことができる。

 

Server Side JavaScript

Node.js on JVMをやろう!

 ▶︎ Avater.jsを作った。

  Node.jsで使えるモジュールはそのまま使える。

  Avater.js = Node + Java

    ※Threadも含めたjavaテクノロジが活用できる

 

Avater EE

  Avaterは死んでない!

  Avater is not dead!!

 

Nashornの今後

 スクリプトコンパイルしてバイトコードするときに、今はスレッドしか持てない。

 他のスレッドは前のスレッドのバイトコードが利用出来ない。

 これを解決したい。

 Java 8のupdateの中で対応される予定。

 

 

Javaを活用するユーザー企業の最新事例ご紹介

#jdt2014_d2

製品紹介の印象が強かったので細かい記載は省略します。

f:id:monokurotamago:20140522143412j:plain

 

 

Javaアプリケーション開発におけるテストとTDDの実践

#jdt2014_C3

f:id:monokurotamago:20140522154128j:plain

 

渡辺 修司(Junit実践入門の著者)

自動化テストの成熟度

レベル0 自動化テストしていない。

1 一部テストのみ

2 主要部分はやってる。CIはじめた

3 アーキテクチャレベルでやってる

4 開発プロセスにテストをはじめとした「自動化」が組み込まれている

5 4+さらに改善を続けている。

UTは基本スキル。やったらやっただけレベルが上がる。

社内でテストの勉強会やると良い。

 

CIとUTは手作業したら負け。Jenkinsしましょう。

 

自動化のメリット

・コスト削減

・手作業のミス

・コンピューティングリソースを有効活用

・繰り返し何度もテスト出来る  ◀︎ これ大事

・楽しい

 

UTの特徴

・自動的に実行可能なプログラム

・実行コスト < 実装コスト / 手動テスト

・変更の影響がなければ継続利用出来る

早い段階でテストを行うことで、テストの実行回数が増える、間違いに気づきやすくなる。

リグレッションを防止するのではなく、起きた場合に即座に修正できる。

EC2でJenkinsするとリソース確保が簡単。

 

DB連携

DAO, Repository, EntitiyManagerあたりを使うことが多い。

永続化層のUT戦略は2つある。

 外部システムに依存する部分はモックとする方法。

 RDBは実質的にシステム内部とみなす方法。

  ▶今回はこっちの説明。

 

4 Phase Test

初期化

 DBデータの初期化

  あるべき状態にリセットする。

  関連テーブルの削除。

  シーケンス

  システム時間

  初期化にかかる処理時間

実行

 1テストケースで1SQL相当にする。

検証

 selectはそうでもないが、update やdeleteは検証が難しい。

後処理

 次のテストの初期化に任せて何もしない。

 こうすると、失敗したテストのデータが残るので、失敗発生時に役立つ。

 

DbUnit

 Junit3のころに作られたライブラリ。

 

cmtest-db

 DbUnitをJunit4対応したラッパー。

 

その他のポイント

 なるべくローカル実行

 システム時間に依存しない

 

 

木村 貴由

統合テストの自動化

http://nekop.github.io/slides/Arq.html#/

 

自動化されていない統合テストをすると...

 ▶︎ 死んだ魚のような目でスクリーンショットを取り続ける人

 

arquillian(あーきゅりあん)

 統合テストのフレームワーク

 モックするな!本物に近いテストをしよう!!というコンセプト。

 本物の実行環境へデプロイしてテストすることが主機能。

 IDE連携も出来る。

 Reporterという機能でデスクトップをビデオ撮影できる。

  ▶︎ 大量のキャプチャ画像より映像化した方が便利かも?

 

 

和田 卓人 (TDDの話)

テスト駆動開発入門の書き出し「動作するきれいなコード」

 

TDDのサイクル

 いつものサイクル。Red - Green - Refactor

 

TDDと黄金の回転

 いつもの図。

 リファクタリングやらなくなると回転が壊れる。

 日々の作業にリファクタリングを埋め込むことが大事。

  ▶︎ 後回しにすると、リファクタリングするために許可を得る必要が出る。そうなると許可は出ない。

 

TDD導入効果(MS, IBM)

 TDD導入によって、2社ともコード実装時間は増えるが、欠陥も減った。

 実装時間が2割増えて、欠陥が7〜8割減るといった感じのデータ

 

TDD

 開発工数は増える。が、デバッグ工数が減る。

 デバッグ工数減る方が大きいので、全体的な工数は減る。

 

テストは品質を上げない。

体重計のように、どのぐらいの品質か把握するためのもの。

把握した後にどういう行動をとるかが大事。

 

カバレッジ

 カバレッジも計器の一つ。

 カバレッジを上げる、100を目指すということにはあまり意味がない。

 カバレッジに使われるのではなく、自分たちでカバレッジを使いこなす。

 

TDDは死んだ By DHH  2014/4/24

 タイムリーな話題。

 結論は...IS TDD DEAD? というサイトで現在進行形で議論されてる。

  f:id:monokurotamago:20140522163523j:plain

 

こだわるなかれ

 テスト駆動にこだわるな

 テストファーストにこだわるな

 ユニットテストにこだわるな

 テストの速さにこだわるな

 テストの網羅性にこだわるな

  ▶︎ 自らが品質に安心できればそれでよい

 

テスト駆動開発とは、あなたとコードの間の話。

自分で手を動かして考えよう。

 

 

J2EE世代からJava EE世代へ移行せよ

#jdt2014_C4

岩崎 浩文

f:id:monokurotamago:20140522164632j:plain

 

1999 -> 2014の15年間で何が変わった?

J2EEが出た1999はISDNの時代。携帯も折りたたみの前のPHSみたいな形。

javaも当時はEnter priseでは使えないという烙印を押されていた。

 

EE7, SE8に対応したwebServerは公式のものしかない。

他はβ版なら動くものがちらほらあるぐらい。

 

昔の構成Struts ▶︎ 今の構成 JSF, JavaFX

JavaServer Faces (JSF)

 

開発環境

今はNetBeans or IntelliJ Idea

多くの人はeclipseで止まっている。

 ▶︎ 企業もStrutsで止まっている

 

2014年にキャッチアップしないと死んじゃうよー。

つい最近、Strutsゼロデイ脆弱性出たよね。

windows XP, Office2003死にました。

来年Windows Server2008も死ぬ。

 

Struts -> JSFに移管するには?

EJBを使うところは変更なし。

JSF1系はヒドい。使うならJSF2系にしましょう。JSF1系ダメ、絶対。

Java EE7の標準はJSF2.2 これで作れば安心。

JSFではJSP使わない。

文字書き換えてリロードするだけで画面が更新される(やっと)

やっぱり移管するには書き換え多い。

 

 

 

【オマケ】

イベントのショップが出ていたので、JavaのTシャツとペンスタンドを購入。

帰り際にアンケートを提出して手帳をいただきました。

昨年度は帰り際にメモ帳をいただきましたが、こちらにはJava Day Tokyo 2013 と記載されていました。

今年もらった手帳には Oracle Java としか書かれておらず、少し残念ですが、質感は昨年のものより高級です。

入場先着200名のアイテムは、先述した通り迷いに迷ったため入手できませんでした。

 

 

以上。