JJUG CCC 2015 Spring に行ってきた #jjug_ccc
少し時間が経ってしまいましたが。
前回までの会場とは違い、西新宿駅から近くなったのでより行きやすくなってた。この辺りは以前通っていた職場にも近くて、歩いて通ったことも何度もあったので、懐かしさを感じつつ会場入り。もうやんカレー昔よく行きました。
タイムテーブルはこちら。
参加したセッション
- 基調講演1 Java 20年史
- 基調講演2 Java SE 8 と Raspberry Pi
- Java における null。これまでとこれから
- Web開発における最新テスト手法
- 大規模な負荷でもドキドキしない為のJava EE
- 『Embulk』に見るモダンJavaの実践的テクニック ~並列分散処理システムの実装手法~
- Grails 第3章 進化したSpring-bootベースフレームワーク
- いろんなデータをKibana4で見てみよう
- JobStreamerではじめるJavaBatchクラウド分散実行
感想とか思ったこととか
参加レポートは他の方にお任せして、個人的に感じたことや思ったことなどを。セッション資料も JJUG のサイトにリンクされてますし、以下のブログでも素晴らしくまとまっているのでそちらをどうぞ。
基調講演1 Java 20年史
JJUG 副会長の河村さんによる Java 昔話。なんだか大学の講義を聞いているようで懐かしさを覚えつつ、前半は聞いたことが無い単語や技術要素もあったりして逆に新鮮だったのと、全体を通して Java がどう変化してきたのかを俯瞰で見ることができていい機会だった。
私は Java 触り始めたのが大学3年の頃なので 2003 年くらい。ちょうど Struts が出始めの頃で、卒業論文で分散オブジェクト技術について書いてたので、 RMI/IIOP とか EJB とかについて調べていた記憶が話を聞いていて蘇った。それから新人研修がちょうど Java5 が出たての頃で、研修の補助図書として Java5 の本を渡された記憶とかも。懐かしい。
全体として、Java はインターネットの普及とともに進化してきたのだと改めて感じた。ブラウザの覇権の歴史とか、JavaScript の復興とか、これまでのインターネットの歴史について振り返るような授業が大学にあるとすれば、必ず出てきそうな話だと思うし、それとともに Applet やら Servlet やら EJB やらが出てきて何が問題だったのか、みたいなことが教科書に乗ってると思う。そういう意味で、むしろ最近入社した新卒〜3年目くらいの人に聞いて欲しいと思った。その時どんな問題があってそういった技術が出てきて、その技術がどんな課題があって消えていったのか、といったことは、技術がどんなに進歩しても普遍的な話だと思うし。
そしてこれからの20年はどんな技術とともに Java が進歩していくのか、そういったことに思いを馳せるきっかけとなる講演だったと思う。20年後、どうなってるかな。まだあるのか、別のものになってるのか。その時、自分は何してるだろ。
基調講演2 Java SE 8 と Raspberry Pi
Oracle の Stephen Chin さんによる Raspberry Pi と Java を使った楽しいデモ。NetBeans を使って実際にコーヒーを入れるデモや、自走するライン追跡ロボットのデモ、3Dプリンタのデモなど、より現実世界に近いレイヤーで Java を使うデモがどれも興味深かった。
これはライン追跡ロボットのデモの様子。ちょっと見づらい…。
個人的には、
と日本人のツボを心得てるなーと思った。
Java における null。これまでとこれから
太一さん(@ryushi)による null の扱いや Java8 の Optional の話。とても参考になった。
- null 参照の起源の話
- 様々な言語での null (nil) の扱い
- Java の null ハマりどころとパターン
- 言語仕様のハマりどころは覚えればおk
- ライブラリ
- null となんとか付き合っていくための方法
など、示唆に富む話が盛りだくさん。この話をチーム内で一度話し合うだけでも、そのチームの品質は大分向上するんじゃないかと思った。何はなくともとりあえずこの資料読んどけ、って言いたいくらい。
Web開発における最新テスト手法
tokuhirom さんによるテスト話。
自働化は自動でやったほうが楽になるところまでやるとか、壊れそうなところだけやっておくとか、そうだよねって思うことが多くて、他の人も同じようなこと考えながらやってるんだなぁという感想を持った。他にも、
- RDB のテストは初期化時にさっくり消して他の人とかぶらないような名前でやる
- 外部の Web API のテストは組み込み Jetty 起動して実行する。細かくやる
- コントローラのテストは実際にサーバ立ち上げてエンドポイントを HttpClient で叩く
- 画面通した E2E テストは変更の頻度やコスト次第
- CI ないとテストは壊れる
辺りはその通りですねという感じです。全体を聞いて私の感想は以下のツイートに集約されるかなと。
これ一枚岩のでかいWebアプリのテストと、APIごとにコンポーネント分けてるアーキテクチャのテストとで違ってて、今の話は後者だと思うし、それなら必要十分なやり方でシンプルだし違和感ない #jjug_ccc #ccc_ab2
— Yusuke Ikeda (@yukung) 2015, 4月 11
assertj は聞いた感じ良さそうだったので、今度使ってみようと思います。
大規模な負荷でもドキドキしない為のJava EE
nagaseyasuhito さんの大規模トラフィックの対処話。
裏番組の GS Collection が、直前の Java Day Tokyo で話題になっていたので直前まで迷ったんだけど、こちらを聞きに行きました。 B2C のトラフィック多めなサービスで Java を使った主に負荷テストの手法と分析、あと JPA の分散戦略についての話。
正直トラフィック多めな B2C で JPA を使っているというのをあまり聞いたことがなかったんですが、やれるんだなぁというのを改めて感じました。(ちゃんとやればそりゃそうだという感じだけど)
分散戦略自体はスレーブに参照向けたり、シャーディングしたりと、B2C ならたぶんみんな一度は通ってる道だろうなと思ったけど、それを JPA で実現するのにそれ用のアノテーションがあったりするのは知らなかったので、勉強になりました。
負荷テストの方は、JMeter 使ったり JVM チューニングしたりは私も普段やっているようなことだったので、おさらいといった感じで聞いていました。スライドでは Ganglia で JMX の情報を見るのに jmxsh plugin というのを紹介されていましたが、私が関わっているサービスでは Jolokia を使ってたりします。ただ、負荷テストの CI は全然やれていないので、これはやるべきだなぁと思った。
『Embulk』に見るモダンJavaの実践的テクニック ~並列分散処理システムの実装手法~
nahi さんによる Embulk の話。
Embulk は、気になっていたけど使うシチュエーションがなかなか思い当たらなかったんですが、今後使えそうな機運があったので、まずどんなものかを正しく把握しに行こうと思って聞きました。
いきなり各論から入るのではなく、まず最初に Embulk が解決したい問題が何か、という説明があったおかげで、どういう時に使えばいいのか、というのを整理できたのがありがたかったです。
バルク処理は結局入出力と変換処理がほとんどだけど、その部分がバラバラだったり品質がまちまちだったり、そもそも色んな所で各々に作っていてムダが多い問題を、プラグインアーキテクチャを採用したOSSにすることによって、N*M の Scripts を無くして問題を解決していこうというアプローチはなるほどなぁと思った。この辺り fluentd の経験が活きてるのかなぁとも。
Grails 第3章 進化したSpring-bootベースフレームワーク
tyama さんによる最近の Grails 話。
Grails3 は Spring Boot ベースになったということで、ちょうど Spring Boot をちょっと前の案件で使ってリリースしたのもあってより期待感が高まっていたけど、なかなか使う機会がなくって中身もちゃんと追いかけられてなかったので、ここらでキャッチアップしておきたいなぁと思い。
tyama さんは今週の Grailsを継続的に配信してくれていて、それもあってか最近の Grails 2.4, 2.5 から 3.0 までの動きとその違いをわかりやすく説明してくれてました。実際にコードを書いてデモしながら挙動を解説してくれていたのもよかったです。ただ会場はどうやら Grails よりも Spring Boot の話を期待してきていた人が多かったようで、tyama さんもそれを聞いて笑ってました。
Grails3 は tyama さん曰くまだバギーな感じだそうなので、もう少し安定するのを待ったほうがよい?かもしれないとのこと。Grails2 系からの移行で気を配るところなども挙げられていてありがたい情報でした。
今度、個人的なツールをちょろっと作るのに使ってみようかなと思ってます。
いろんなデータをKibana4で見てみよう
johtani さんによる Kibana4 + ElasticSearch + LogStash の話。
今のプロジェクトでちょうど Kibana4 を使っているので、他の人のユースケースや今後のロードマプを聞けたらいいかと思って聞きました。
今のプロジェクトの使い方は、運用しているサーバ群に対するリクエスト数や平均レイテンシ、呼び出し元ごとのコール数の集計などをリアルタイム監視の用途で使っていて、データ分析というよりはモニタリングの用途で使っているので、どちらかというとサーバ状態のトレンドを掴む目的が強いんだけど、話を聞いていて思ったのは Kibana4 はどちらかというとそれよりはデータ分析の方が向いているのかなぁという感想を持ちました。
結局のところ今の私たちの使い方だと、ElasticSearch のキャパが辛くなってくるので、相当数の台数を並べないと計算が追いつかないんだけど、元々が監視用途なのでそんなに台数面倒みたくない、っていうジレンマがあって、そうすると今の用途だとある程度の妥協はやっぱり必要なのかなーと思った。
Git のログを食わせるのは仕事量見える化できて、ネタ感あるけど現場によっては真面目にアリだなーと思ったりw
JobStreamerではじめるJavaBatchクラウド分散実行
kawasima さんによる すべては S 式になる JavaBatch めんどくさすぎるからの分散実行環境+管理コンソール自作したよ話。
S 式のインパクトが強くてそれだけでも必見のセッションでしたが、内容も着眼点が素晴らしいというか、そこきっとみんな欲しかったはずだけど誰もやらなかったのを見事やっちゃいましたねーという感想でした。
Web UI も ClojureScript 使って徹頭徹尾 Clojure にこだわってたり、ストレージに Datomic 使ってたり、WebSocket 使って Class をロードすることでエージェントのセットアップを不要にしてたりと、いい感じに尖っていて興味深かったです。
セッション後に少しお話させていただきましたが、kawasima さんクラスになると Datomic のクエリが SQL に見えるそうで、全てが S 式への道はなかなかに遠いですね。
謝辞
長丁場だったので、結構疲れた…。お腹も減ってたし、少しクラクラしてたので、いろんな人と話したかったですが、懇親会には出ずに早めに帰った。
今回は募集時点で1000人超えとか言われていたので、会場も変わったことで少し混乱や混雑を予想してたけど、それほど大きな混乱もなくて、個人的には大満足だった。人数がキャパオーバーしている部屋も、スタッフの皆さんが都度都度椅子を入れたりなど、気を配っている様子がとても印象的だった。
それにしてもこれだけの大きなイベントを、毎度毎度準備や当日の仕切りなど滞り無く行っているスタッフの皆様は本当に凄いと思う。今回も楽しかったです。ありがとうございました。