第八回 #渋谷java に行ってきた
http://shibuya-java.connpass.com/event/8212/
前回の参加が第4回だったので、大分お久しぶりです、という感じでした。相変わらずオサレな会場に加え、なんとオフィス内にビーチまで出来ていました。オサレ感がレベルアップしている…!!
オフィス内ビーチ! #渋谷java pic.twitter.com/KFxZyJkFRJ
— Yusuke Ikeda (@yukung) 2014, 9月 20
資料とTogetter
感想
以下、それぞれのセッションの個人的な感想をば。思ったままに書くので読みづらいかもしれません。
QueryDSLとSpring DataでとりあえずCRUD @nabedge さん
Qyerydsl という SQL っぽい DSL でタイプセーフにRDBアクセスするフレームワークの紹介でした。資料はなく、サンプルコードを交えたコードの解説。詳しくは @nabedge さんの GitHub を見ていただければ。
- Querydsl
- サンプルコード
リポジトリを見てもらえればわかりますが、中身は DDL + 初期データのSQL と、Spring Framework と連携する Java configuration のコードだけです。DBアクセスするためのコードは Querydsl が SQL を元に自動生成するため Maven で install 実行すると生成されます。*1
実際の使い方はテストコードを見れば大体わかります。基本的には、テーブルにアクセスするための自動生成されたオブジェクトと、クエリを文字列ではなく DSL としてメソッド呼び出しで表現*2して、タイプセーフにクエリが発行できる、という感じのものでした。更新系のクエリはコールバックを更新用のメソッドに渡すようなスタイルなため、Java8 のラムダ式で書くとシンプルに書けます。@nabedge さんもこれを調べて初めてラムダ式を書いたと言っていましたw
見た感じ、S2JDBC に非常に似ている印象を受けました。公式サイトを見る限り、サブクエリや検索結果オブジェクトへの射影なども表現できるようで、簡単なクエリをバシバシ投げながらコードを書く際は気持ちが良さそうだなぁと感じました。
また、私がちょうど今お守りをしている Java のプロジェクトは O/R マッパーとして MyBatis を使っていますが、アノテーションに SQL を書きまくっていて、文字列ということもあるし、気軽に SQL をペタペタ貼り付けて実行、とかをやりづらく、実際に動かしたら SQL エラー、とかになって非常につらたん(´・ω・`)、という状況だったので、IDE の補完を駆使してタイプセーフにクエリを発行できるところに魅力を感じました。ちょっと興味が湧いたので触ってみようかと思います。
トーク中で言われていた Tips として、自動生成するプロジェクトと、それを使って手でコードを書くプロジェクトは分けたほうが良い、という事が言われてました。上記のサンプルコードも、core と db というプロジェクトに分かれています。
あとは、Querydsl に限らず、SQL をデバッグログとして出したいときは、log4jdbc
(サンプルでは log4jdbc-remix
) を使うといい感じにログに出力してくれるのでいいよ、という Tips もありました。さらに @grimrose さんからナイスな補足もありました。
log4jdbc-remixはメンテされないので後継のlog4jdbc-log4j2を使いましょう! #渋谷java
— とーます (@grimrose) 2014, 9月 20
一度ボツになったリーンスタートアップJava and DB @jflute さん
おなじみの Eclipse でプレゼンする個性的なスタイルで。以前 JJUG に出したネタらしいですが某サムライズムのイケメンさんとタイトルがかぶってお蔵入りしてた幻のセッションだそうですw
内容は Togetter を追ってもらえば大体把握できると思います。スタートアップのサービス開発において、要件は刻一刻と変わりそれに対応するためにインクリメンタルにスピード感を出しながら開発する必要がある。しかも受託開発とは違い明らかに開発リソースが足りていない状況と、とはいえドキュメントを作っている時間もなくソースコードも綺麗に保てない状況の中でどう開発を進めていくか。
それに対応するために @jflute さんのプロダクトである DBFlute を使って、字面が多くなってしまう Java でも Eclipse のコード補完をバシバシ使ってライブコーディングしてさくさく実装するデモを披露されていました。@jflute さんのライブコーディングは以前も拝見しましたが、ホントにバシバシコードを書かれていて、会員検索を行う処理の実装なんかはテストコードの実装含めて、ほんの5秒程度*3でテストがグリーンになった様はこれだけでも一見の価値ありだと思いました。やはり Eclipse はショートカットキーとコード補完、Ctrl+1 を使いこなしてはじめて Eclipse 使いだと言えるのかもしれないですw
@jflute さんが、
DBFlute は不自由なフレームワークなので、余計なことができないし、逆に壊れた時にすぐ検知できる。DBの変更はカラムだけじゃなくてリレーションが壊れるから、お行儀よく書けるAPIならコンパイルエラーでそれが分かる。これが安心・安全に繋がっていて、ひいてはスピード感を出すことの源泉になっている
と言っていたことが個人的には印象に残りました。
最近私が経験したプロジェクトは割と技術的に攻めているものを使うことが多く、それはそれでエンジニア的には楽しいのですが、本当にスピード感を出すにはこういった変更を検知・検出できる仕組みをどう作るか、ということが大事だなぁ、ということを改めて考えさせてもらいました。
11/22(土)には、DBFlute フェスも開催されるそうです。都合合ったら行こうかな。
GitBucket: The perfect Github clone by Scala @takezoe さん
急遽登板となった竹添さんのセッションは、Scala Matsuri の再演で GitBucket のお話でした。私は行けなかったので棚からぼたもち的にラッキーでした。
内容は GitBucket を作った動機と、GitBucket を支える技術ということでアーキテクチャの解説でした。@takezoe さんが言っていた中で印象に残ったのは、
JGit や Apache MINA のような言語ネイティブで低レイヤーをサポートするライブラリが多いのが、Java のいいところで、アプリケーションは Scala でも Java の技術に助けられている。JGit がなければ GitBucket は作ってなかったかも
と言っていたことですね。
GitBucket は最近は自分が使う状況ではなくなってしまったため、モチベーションを保つのが難しい、ということだったので、SIer の方はコントリビューションのチャンスではないでしょうか。きっとこれのメンテがされなくなると困る人たくさん居ると思います。
最近のjava PaaS事情 @seri_k さん
転職して heroku を使い始めたら、便利すぎたので他にも色々調べてみた、というお話でした。
デモが動かず、会場のネットワークが ssh 塞がってた疑惑、ということで残念でした。LT でのデモは鬼門ですねw
結論として組み込みサーバを使う必要があるよ、ということでしたが、個人的にも最近仕事では Play Framework、あと Netty ベースの独自HTTPサーバを使う機会が多かったため、Tomcat などのいわゆるアプリケーションサーバはここ2〜3年使っていなかったので、肌感覚として違和感はなかったです。
あと、セッション中で紹介されてた cloudbees の RUN@cloud ですが、たしかこないだ Paas 事業は終了して CI に専念する、っていうニュースがあったと思うので、これから Java PaaS として使えなくなるのでは、と思います。
Mixer2 で作るカスタムテンプレートエンジン @jfut さん
Mixer2 というテンプレートエンジンと、そのカスタマイズについてのお話でした。
Mixer2 は使ったことはないのですが、お話を聞いた限り DOM について詳しくなくても Java で要素を操作できるところがメリットという印象を受けました。最近仕事だともっぱら JavaScript の Single Page Application + Java で構築した REST API という組合せが主で、Java のテンプレートエンジンとは少し縁遠くなってしまったのですが、選択肢の1つとして引き出しに入れておきたいなぁと思いました。
Effective SQLite For Android @operando さん
- http://osyyare.blogspot.jp/2014/09/java-androidsqlitelt-java.html
- https://github.com/operando/Effective-SQLite-for-Android/blob/master/doc/Memo.md
- https://github.com/operando/Effective-SQLite-for-Android/blob/master/doc/InsertsTimeTest.md
Android における SQLite の Tips 紹介でした。
私は Android は詳しくないのですが、こういう現実的な Tips 集を共有してもらえるのはすごくありがたいですね。
SQLite を速く使う三原則、
- Transaction
- Prepare Statement
- In Memory
は肝に銘じようと思います。
あなたとスレッドダンプ @enk_enk さん
スレッドダンプの読み方の話。私も前職の時はゴミみたいなリクエスト数しか処理する必要がなかったので、スレッドダンプ?なにそれおいしいの?状態で、現職で大量リクエストに晒される環境になって初めて、スレッドダンプやヒープダンプを意識するようになりました。今振り返ると新人の時に知りたかった…。前職だとそもそも教えることができそうな人も居なかったですけど。
LT なのに枚数多いのであとでスライド見てください、とのことだったので、公開してもらって助かりますね!
Java 8 で造る認証系 @komiya_atsushi さん
- http://blog.k11i.biz/2014/09/java-java-8.html
- https://gist.github.com/komiya-atsushi/6ffac79533c3bfad8bba
Java 8 になって、暗号化のためのAPI が増えたので、それ使って上手くやりましょう、認証系処理の自作はやめましょう、作るときは、ちゃんと意識しなきゃいけないポイントを抑えないとダメだよということでした。ニッチな分野ですが、サービス運営するのに基礎となる部分ですし、いざ自分が担当となった時には必要に迫られる知識であると思うので、こういう情報は助かります。
個人的には前半の基礎的な内容は振り返りに、また Java 8 でAPIが増えたことを知らなかったので、とても勉強になりました。
まとめ
渋谷java のゆるい感じながら何気に濃かったりするところ、いいです。楽しかったです!運営の方々ありがとうございましたー!