この国では犬が

本と芝居とソフトウェア

JJUG CCC 2015 Fall とてもたのしかった! #jjug_ccc

久々に *1 Java の話。

JJUG CCC 2015 Fall に行ってきました。

JJUG CCC は朝の 10 時から、懇親会まで含めると 22 時までという地味にハードコアなイベントなのですが、初めてフル参加しました!

参加したセッション

参加したセッションは以下の通り。

  • keynote-1 基調講演1 : Javaは守りに入らない、これが今のJava
  • keynote-2 基調講演2:Java EE 8 – Work in Progress
  • CD-1 苦手克服!例外スタックトレースから読み解くバグ
  • CD-2 Java8移行から始めた技術的負債との戦い
  • CD-3 よくある業務開発の自動化事情
  • GH-4 GS CollectionsからEclipse Collectionsへ - 機能豊富なオープンソースJavaコレクションフレームワーク
  • EF-5 これからのコンピューティングの変化とJava
  • CD-6 Garbage First Garbage Collector (G1 GC)
  • GH-7 てらだよしおの赤裸々タイム
  • 懇親会

順にレポートしてまいります。

Java は守りに入らない、これが今の Java

最初の基調講演のスピーカーは Acroquest Technology の、そして JJUG の幹事でもある谷本心さん(@cero_t)。

JavaOne 2015 の所感も随時絡めつつ、近年の Java のトレンドを紹介しながら今回の JJUG の全セッション(!)を紹介しつくすという大仕事でした。*2

竹ですね

印象に残ったのは、

  • G1 GC はたこ焼き器
  • 「Bamboo……竹ですね」
  • Java の老化を感じていたが、Spring Boot と Spring Cloud があるから Java にとどまった
  • 勉強会はきっかけにすぎない、自分の仕事を改善することが大事

といったことでした。竹はだいぶウケてました。

何度かセッションを見ていると、@cero_t さんのプレゼンテーションが「すべり芸」と呼ばれる理由がわかってきました。すべりなくして笑いなしです。
心が強い! いい意味で。

Java EE 8 – Work in Progress

2 つめの基調講演のスピーカーは、Oracle の David Delabassee さん( @delabassee)。

データベースみたいな名前の人だな……と思っていたらやっぱりそう思う人は多いみたいです。

内容の大半は、JSON-P や JSONB、MVC 1.0、HTTP/2 のサポートなと、Java EE 8 のゴールを順に概観していくものでした。

Server-sent events

その中に Server-sent events(SSE)というものがあって、Websocket のことかしら……と思ったら、ちょっと違ったものなのですね。

とはいえ、こちらの記事を見てみると、Websocket にも優位性があり、一概に SSE の方が優れているというものでもないようです。

ダンな WEB 通信周りのことを全然知らないので、こないだ買ったこの本で勉強します。

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

苦手克服!例外スタックトレースから読み解くバグ

午後からはトラックが 6 つに分かれます。

午後イチは、サムライズムの山本 裕介さん(@yusuke)のセッション。

満員です!

トラブルシューティングの基本

以前にスレッドダンプの話をした頃から感じているのですが、こういうトラブルシューティングの基本のキみたいなところをカバーする WEB ページだとか書籍だとかいったものが案外見つからなくて、引き合いが強いんだよな……と思います。

内容は初心者向けだろうな、と思っていたらやはりその通りで、とても丁寧な例外、スタックトレース、そしてスレッドダンプへの入門セッションでした。

こういうのは誰かが継続的にやっていくとみんな幸せになれると思います。
ただ、山本さんが取った会場のアンケートで Java 歴 5 年以上という人も結構いたのが気になりましたが。笑
トラブルシューティング実践編みたいなのも結構不足していて、求められているということなのかもしれません。そういえば朝の基調講演に立たれた谷本さんも、昨年の JJUG CCC Fall ではトラブルシューティングのセッションで大人気でした。

華麗なる IDEA 捌き

個人的には、山本さんの華麗な IDEA 捌きが見られたのが収穫でした。
余談ですが、IDEA を使ってみたいのですがなかなかとっかかりがないので、また IDEA のハンズオンやっていただけると嬉しいです……。

Java8移行から始めた技術的負債との戦い

続いて、ビズリーチの清 大輔さんのセッション。

超満員です!
立ち見どころか、一部通路まで埋めるほどの盛況でした。さすがに通路の確保が必要なので、入れずに諦めた方もいらっしゃったと思います。

いかに日本のプログラマが、あるいは日本の Java プログラマが、かわかりませんが、技術的負債に強い興味関心を持っているかがうかがえます。

ライブラリが死ぬ

内容はというと、転職サイト BizReach を Java 6 から Java 8 に移行する過程で出会ったトラブルの話でした。

「ラムダ書くと開発環境で起動しない」「検証環境だと起動しない」「Mac だと死ぬ」「帳票のデザインツールが動かない」「JSP の描画で死ぬ」等々次々と襲い掛かるトラブルに会場も沸いていました。

結構周辺ライブラリやツールの問題が多かったな、という印象で、ライブラリへの依存を増やすことにはそういう(ライブラリがメンテナンスされなくなったり、ライブラリのバージョンアップを怠っていた結果、JDK のバージョンアップと同時にライブラリの大幅バージョンアップも必要になったり)リスクもあるのだよな……と思います。

よくある業務開発の自動化事情

続いて、関西からいらっしゃったいろふさん(@irof)のセッション。

「環境構築」「構成管理」「ビルド」「CI」「コーディング」「テスト」といったそれぞれの領域で、自動化の「課題」と、それに対する「解決案」を提示したうえで、そうはいっても、「現実」は……という構成で進みました。

自動化残酷物語

「環境構築を Docker で自動化したものの、環境がクリーンすぎてテストが不足する」、「Maven で依存解決とか自動化したものの、pom.xml が一部の詳しい人しか触らない・触れないものになってしまう」「Jenkins で色々自動化してビルド職人を廃したものの、かわりに CI 職人が生まれてしまう」等、涙なしには聞けない自動化残酷物語にあふれていました。

「どうすればいいかはそれぞれ考えてください」とのことでしたが、……どうすればいいんだろう……。

でも、こうやって問題をはっきりと認識することは大事ですよね。

どうすればいいんだろう……。

GS CollectionsからEclipse Collectionsへ - 機能豊富なオープンソースJavaコレクションフレームワーク

ゴールドマン・サックスの伊藤 博志(@itohiro73)さんのセッション。

僕の中では、JavaOne のときに Null Pointers にいた人です。笑

appresso.hatenablog.com (記事の最後のほう)

内容は、タイトルの通り、最近露出が増えてきている印象のある GS Collections 改め Eclipse Collections について。

ゴールドマン・サックスというと投資銀行というイメージがありますが、世界で全社員の 4 万人中 1 万人(!!)がエンジニアで、うち 3000 人が Java エンジニアなのだそうです。

ゴールドマン・サックスほどの会社が社員として抱えるエンジニアであれば精鋭が揃うのではないか、と推測されますが、それが Java だけで 3000 人となるとなんだかもううまく想像できません。

最高のコレクション

さて、Eclipse Collections ですが、これがすばらしいです。

もともと GS Collections として開発され、社内で使われていたもので、オープンソース化し、さらに外部からのコントリビューションも受け入れるために Eclipse Collections として名称やライセンスの変更を行っています。
現在は、もう少しで移管が完了する、という状態のようです。

機能としては、簡単に言うと Java 8 のコレクション / Stream API の(大幅に)上位互換、という印象です。

  • of / with に初期化ができる
  • mutable / immutable / fixedsize が選べる
  • Bag や Multimap もある
  • 即時実行が可能
  • メソッド参照に引数を渡せる
  • あいまいな filter ではなく select / reject
  • Stream と違って再利用が可能
  • メモリ効率がよい
  • Exception への対処が簡潔

等、いいところの枚挙にいとまがありません。かゆいところに手が届くというか……。

将来的に JDK に取り込んでもらいたい、それほどの価値があるはず、とのことでした。

こんなエライものがいきなりどこから来たんだ、という感じですが、もともと GS の社内で(3000 人の Java エンジニアのうちでも、おそらく選りすぐりの精鋭によって)脈々と開発されていたものがここ数年でようやく外に出てきた、ということのようです。

それなら、納得。

使い方はこちらの記事に詳しいので、興味のわいた方はぜひ!

qiita.com

タイトルは GS Collections となっていますが、今のところ GS Colllections の最新版を Eclipse Collections に名称変更中というステータスなので、API は同じです。
この内容は(来たる)Eclipse Collections でそっくりそのまま使えると思います。

これからのコンピューティングの変化とJava

きしだなおきさん(@kis)のセッション。

この 2015 年、処理を速くするために、「CPU のクロックを上げる」……ということには(めったに)ならず、たいていはサーバを増やすことを考えますよね、というところから話は始まりました。

データの移動を減らすには

今はデータの処理よりもむしろ「移動」に多くの電力や時間が食われており、データの近くで処理を行うこと、いろいろなところで動くコードが必要、という話から、FPGAJava による GPU コンピューティング(Aparapi / JOCL / Project Sumatra)、ディープラーニングの性能、sun.misc.Unsafe、そして Project Panama や Project Valhalla、Arrays 2.0 の話にいたるまで、多岐多様な話題を流れるようにまとめて見事なプレゼンテーションでした。

ということを懇親会でしていたら、「今興味のあるものをつなげてみたらこうなった」とおっしゃっていました。
な、なんと……。

実際のところ Java で(ぜひとも Java で)GPU コンピューティングを行いたいシチュエーションがどれくらいありうるのか、ということは正直実感できていないのですが、たしかにデータの移動が問題になりつつある(ミクロでも、あるいはマクロでも)、というのは何となくながらわかる気がします。

また、昨年の JJUG CCC Fall でも話されていましたが、Project Valhalla によって(ようやく) Stream<int> が可能になる、という話もあります。
ただ、直前に Eclipse Collections の話を聞いているので、それ Eclipse Collections でできるのでは……? という気もしてしまうのですが。何がどれくらい違うかは、使ってみないとわかりません。

Garbage First Garbage Collector (G1 GC)

NTT の久保田 祐史さん(@sugarlife)のセッション。

以前に渋谷 Java で聞いた OOME のセッションも丁寧な解説ですばらしかったので、楽しみにしていました。

ところ、期待通りの内容でした!
G1 GC の概要から Young GC、Marking Cycle、Mixed GC、Humongous Object について、ログの読み方、果ては注意すべきパターンについてまで、懇切丁寧としか言いようのない充実した内容。

ご本人もおっしゃっていたのですが、その場ですべてを理解して記憶しつくすことは難しくて、あとから振り返ってゆっくり理解して、活用するような内容だなとも思います。
といってもプレゼンテーションがよくないわけでは全然なくて(むしろとてもよい)、そもそも内容が簡単ではないし(おそらく多くの人にとって)身近でもないので、むしろ資料が後からでも参照可能な詳細なかたちになっていることが非常にありがたいと感じます。

JDK9 からは標準に

といった風に内容はみっちりたっぷりでしたが、個人的に印象に残ったのは以下の 2 点。

  • JDK9 からは G1 GC が標準になる
  • (アプリケーションにもよるし、あくまで今の実装に対して、久保田さんだったら、という前置きをしたうえで)メモリが 8GB 以下であれば Parallel GC ないし CMS GC を使う

G1 GC が標準になることを知らなかったので、冒頭でいきなりハッ! となってしまいました。

そして、トレードオフもあるだろうに標準にしてしまっていいのか、どういう判断なんだ、と思っていたら後半、2 つめのコメント。
G1 GC が基本的に「大きなヒープ」を効率的に扱うためのアルゴリズムだからこういう話になるわけですが、8GB というのはまた絶妙なラインです。

僕が普段開発しているのが DataSpider Servista というパッケージ製品(クライアント-サーバ型の EAI)なのですが、8GB も割り当ててもらえているのかな、と考えると、うーむ、ユーザによるような気がする……。
とくに開発用クライアントには 8GB も使えるケースなんてほとんどないのでは、と思います。

なお余談ですが、@cero_t さんの基調講演での「たこ焼き器」の振りはバッチシ回収されていました。笑*3

てらだよしおの赤裸々タイム

日本マイクロソフトのてらだよしおさん(@yoshioterada)の赤裸々なセッション。

どれほど赤裸々なのだろう……と他人事ながらちょっと不安になっていましたが、結果として思いのほかてらださんの熱意とか人柄が伝わる良セッションになっていました。

個人的にはてらださんがマイクロソフトに行った理由もこれから(実際のところ)何をやっていくつもりなのかもわかっていなかったので、それがちゃんとわかったのが大きな収穫でした。

なぜマイクロソフトに行ったか

色々と道行きはあったのですが、あえて短くまとめると、「Microsoft は今(Apple や、Amazon といった会社に)挑戦しようとしていて、それに惹かれたから」、それから「JJUG も立派に成長して、Java コミュニティは自分がいなくなっても大丈夫だと思えたから」ということだったと思います。

「Sun はほんとうにいい会社だった」「Sun が本当に好きだった」ということをざっくり十数回くらいは言われていて、「今の Microsoft は(チャレンジしている会社だ、というところが)往時の Sun に似ている、今は Sun に戻ってきたような感覚」というのが印象的でした。

何をやっていくつもりなのか

こちらもごく短く言うと、「Java を使ってよ、と言っていく」ということなのだそうです。

Java エバンジェリストと名前もついているし、まあそうなのだろうとは思えるのですが、うーんマイクロソフトVisual J++、ウッ頭が……という感じでなんか混乱してしまうところがあって、でもてらださんから直接話を聞いていると、ああ、本当にそういうことなんだ、と思えました。

もちろんただ Java のことだけを言うのではなくて、要するに(Azure に代表される)Microsoft のプラットフォームで Java が使えるよ、使ってよ、ということなのですが、本気で使ってよ、と言っていくんだな、というか……。

てらださんのことに限らずそう思うのですが、Microsoft が面白くなってきている、というのは最近色々なところで感じます。

これからのご活躍が楽しみです!

懇親会

JJUG CCC への参加は去年の秋から 1 回(春)飛ばして通算 2 度目ですが、初めて最後の懇親会まで参加しました。
JavaOne で多少知り合いもできたので、少しはとっかかりもあるかな……と思って。

結果としてきしださんや、(結局 JavaOne 期間中にはお話できなかった)GS の伊藤さんにご挨拶できて一安心。

初対面の方とも何人かお話できました。
とはいえ、やっぱりなかなかとっかかりが見つけにくいところもあるので、登壇者の方に話しかけてみるか、自分が登壇することを目指すか、していくと広がりやすいだろうな……とも思ったりします。

LT 大会も楽しいものですね。
列が全然途切れなくてすげえな、と思います。通算 20 人以上は発表されていたのではないでしょうか。
会話の種にもなるし、次回はなんかネタを考えて出たい……。

おわりに

そんなこんなで初フル参加の JJUG CCC は前回以上に充実した一日となりました。

ネタがたっぷり集まったので、ここからひとつガシガシリサーチ&アウトプットしていきたい所存です。

あ、最後になってしまいましたが、タイムキープや多数の参加者の誘導、懇親会まで見事な運営だったと思います。
JJUG 運営メンバーの皆さま、並びにスポンサー各社の皆さまほんとうにありがとうございました。

*1:1 年前の JJUG CCC 以来という説が……

*2:じ、じつは 10 分ほど遅刻してしまったのですが……。少なくとも僕が到着してからはそうでした

*3:まあ途中まで忘れられてましたが!