第四回 #渋谷java に参加しました

参加してきました。(スポット参戦中のプロジェクトから抜けて)

まとめ

  • Grails 使ってみるのはありかも
  • groovy 触ってみようかな(とりあえずテストからかな?)
    • そのときはSpock を使ってみよう
  • Gradle もそろそろ使いたいなー
  • JUnitにおけるオブジェクトの等価比較って、他の人も悩んでたんだなー
    • コード補完で頑張る以外にも、がんばれば方法はあるんだなー(JSONPath で除外はありかも)
  • Servlet のURLって、きれーに出来ないのかなーって思ってたけど、UrlRewriteFilter を使えばよかったのか
  • Reactive Extensions って、うまく使えれば便利そうだなー
    • ただし、Java8のラムダを使わないと記述量が増えそう
  • 並行処理とか、真面目に学ばないとなー
  • テンプレートエンジンって、色んなのがあるんだなー
    • Mayaa につづき、Thymeleaf ってのもあるんやなー
      • 個人的には、Java, JS 両方で出来るらしい、Mustache(Handlebars?) を、まずは使ってみたいけど
  • Juzu Web Framework は、、、まぁ、いいか。

感想

  • こういう、色んな技術を知れる場はいいですね〜
  • 仕事が無ければ、もうちょっと他の参加者と話してみたかったけど、残念

雑多なメモ


http://www.slideshare.net/kazuhiroserizawa988/shibuya-java4op

・_y_u_さん Grailsのちょっとイイ話
http://www.slideshare.net/sudoyu/20131116-shibuyajava-grailsgoodness


 NTTソフトウェアの Grails推進室の方

JGGUGの方

Grails
・WebアプリケーションフレームワークRuby on RailsのJavaVMで動く奴てきな
・XML設定不要
 Groovyのコードで書ける

イイところ

Javaの世界と地続き

JVM環境から逃げたいって人いないですよねー。

中身(一部)
Spring Framework
Hibernate
Apache Tomcat Embed 7
Apache Ivy
H2 Database

ほとんどのServletコンテナで動く

性能
http://www.techempower.com/benchmarks/
Scala/Lift, Play、Ruby/Rails より速い!


Javaの資産の活用

・Grailsアプリはただのwar
 いままでの運用ノウハウが活かせる
・Spring / Hibernate の経験が活かせる
 学習コストが抑えられる

Groovyで書ける

クロージャ
メタプログラミング / MOP
AST変換
 DSLを簡単に作れる
Groovy-JDK
 演算子オーバーロード
チェック例外のチェック省略

本:プログラミングGROOVY


Spockでテスト

JGGUGのワークショップ資料をご覧ください

GVM
 rbenv
 Goとかぶってる・・・
Grails wrapper
 Gradle wrapper チェックアウト→コマンドでインストールが不要
Grails console
dbconsole
 DBの中身をWebから見れる
プラグイン機構
 Security coreとか(View, Controller, Serviceとかがはいる)
Serviceとトランザクション
 勝手にトランザクション


デメリットいところ

Checkstyle / Findbugsが使えない
 CodeNarcを使うことになる
パートナー探し
 Spring / Hibernateの経験があれば!
メモリフットプリントが大きい
 PaaS利用では大きなデメリット

ログ出力
 log4j内蔵
スタックトレース
 development モードで画面に出てくる
マルチデータソース
 デフォルトで対応
NoSQL
 プラグインで対応
Hibernateを使いたくない / SQLを生で書きたくない
 HibernateのネイティブSQL API
 Groovy SQLを使う(キャッシュ管理?が必要)
 MyBatis
Grailsプラグインの一覧
 list-pluginsコマンド
Grailsに対応しているIDE
 IntelliJ IDEA が一番いい
Struts1からの移行
 変態プラグインがある
Grailsの書籍
 2.x系に対応した日本語の書籍は無い
 本家のドキュメント


実際の案件で20件ぐらいやってる
ものすごい大規模システムで使ったよ、というのはまだない




jfluteさん MySQLJDBCドライバに振り回されるDBFlute

フリープログラマーさん
現場での教育や、フレームワークの拡張とかやってます

中がGroovyで出せる
0x1f004


MySQLさん
なぜあなたは、バッチ更新しないの?
for文で回っとる
別マシンへの通信コストとかあるから、ちゃんと考えようねって教えてたのに。。。
まじでー

MySQLさん
なぜあなたは、 カーソルフェッチしないの?
数十万件ぐらいだったら、メモリ上に全部乗っかる
本番運用に入って、大量の会員を抱えたあとに発生する(結合テストとかではみつからない)
fetchSize に Integer.MIN_VALUE を設定すると、1件ずつの取得になる
 MIN_VALUEって、、、
い、Integer.MIN_VALUE技!?
closeしないから、新しいSQLを発行出来ない。。。

sql_calc_found_rows
limitが無かった時の件数が取得できる
→MySQLちょっとやるじゃn



grimroseさん Gradleについて
https://github.com/grimrose/shibuya-java-04

Gradleって何?

現在 version 1.8
世界で一番イケてるビルドツール

本:WEB+DB PRESS val.76
 英語ならオライリーにある
Gradle 日本語ドキュメント
 実験的なところは追いついてないところもある


AntからGradle

build.xmlのインポート
17章に書いてある

project: "Ant + Ivy”


MavenからGradle

project: “maven”
ひな形プロジェクト 1.9からコマンドが変わってる
 pom.xmlから生成可能
maven plugin→使えません

コスト と メリット
mavenのレールから外れてる
pom.xmlがツライ
pluginをそんなに使っていない
使いたいpluginがみつからない
→上記に当てはまるひとは gradleへ

“mvn …”.execute()


プロジェクトに柔軟性を
・gradle wrapper
・custom task or plugin
・task test
・groovy





komiya_atsushiさん Junitのオブジェクト透過比較を怠けたい
https://github.com/komiya-atsushi/shibuya-java4

代々木の緑色の会社(渋谷じゃない)

#TokyoWebmining 事務局


「あるメソッドから返却されるオブジェクトの内容が想定しているとおりか?」をテスト

Dto
  List
    BookDto

アプローチ
・assertThat() をひたすら並べる
 →つらい
・equals() を実装する
 →普通にやるのはつらい、Commonsつかう?
・専用のMatcherを実装する
 →テストコード量が増える

汎用的な透過比較 Matcher を実装してみた
komiya-atsushi/shibuya-java4

IsEquivalentTo の概要&機能
・データ構造を再帰的にたどる
・equalsをオーバライド
・Json-path的な記法で
・比較的親切(?)なメッセージ


他の人の意見としては、
・コード補完でがんばる
・toStringでわりきっちゃう



kazurofさん UrlRewriteFilterに手を入れてみた
http://sssslide.com/www.slideshare.net/kazurof/urlrewritefilterissue120

外向きには綺麗なURLを書き換えるライブラリ

外部:/data/123/…
↓
内部:/data/get.do?id=123…

3系→4系
URL変換動作の${…}の
関数の連続はNG
ネストはOK

木構造で解釈
Interpreterパターン

実際に実装してみることが大事ですね



ngsw_taroさん RxJava使ってみた

夢と魔法の待ち時間
https://play.google.com/store/apps/details?id=com.taroid.parkwaittimegetter

自称Kotlinエバンジェリスト

Reactive Extensions のJava実装

LINQのデータソースをイベントと非同期処理に拡張したもの

・学習コスト若干高め
・ 書きやすい、読みやすい
・SAM無名クラス(Java8 早く、、、)



azusaさん 真にスレッドセーフなHashMapとは
http://www.slideshare.net/setoazusa/hash-map-28306457

そのクラスが使われるコンテキストに強く依存する

本:Java並行処理プログラミング

タイトルは釣り

ConcurrentHashMap使えばいいんじゃね?
新規なら、それ一択

無条件には置き換えられない
HashMap extends AbstractMap
ConcurrentHashMap extends AbstractMap

HashMap の値にnullは入る
ConcurrentHashMap の値に nullはNullPointerException

synchronizedMap を仕方ないので使う 
ループするときは呼び出し元で同期しないといけない

シリアライズは同期できない

ひっかかったケース
HttpSessionにHashMapを格納

スレッドごとにオブジェクトを分割すればいい


まとめ
コレクションAPIには地雷があります

スケールアウトの容易さという点では、railsが羨ましい

Java並行処理プログラミング を読みましょう 



eiryuさん Thymeleafのすすめ

TwFavViewの作者

Javaのテンプレートエンジン
たいむりーふ
最新は2.1系

ブラウザで見てもJSPのように崩れない

spring統合用のモジュールがある

属性にth:をつけるだけ
 data-xxxみたいなのはth:attr
マニュアルは短いから、全部読めばいい
サンプル:stfm

th:text
th:each
th:remove=“all-but-first"

JavaScript inlining
 URLとか、言語対応とか

JSP書いてた人なら問題なく書けるはず
 スクリプトレットもりもり使ってなければ

ブラウザで確認できることはかなり便利

デザイナさんとルール
XHTMLで記述する
JavaScriptで扱うためのclass名は、”js-“で始める
極力デザイナー作成部分は触らない。逆もまた然り。
 追加するイメージ

デメリット
th:ifの制御
ヘッダ、フッタなど、include はコピペしないといけない
Spring以外では、そんなに、、、




seri_k 謎のWAF Juzu FrameWorkを試してみたリベンジ

 あんまり使われてない?
play 1.x系に近い

ViewとController機能のみ薄いフレームワーク
template は groovy ベース
Annotationで機能や設定を指定

mavenでベースをサクッと作れる

Annotation Processing を利用する
factory pathにjuzu-core.jar 

更新を検知して、ファイルが消えちゃう。。。?
 cleanすると、再生成