この国では犬が

本と芝居とソフトウェア

JJUG 春の Java 8 祭りに行ってきた

JJUG イベント「祝☆Java 8 Launch」に行ってきたので、簡単に感想など。

はじめに

3 月 18 日に Java SE 8 がローンチされた。めでたい。

それを祝うためのイベントが催されたので、参加してきた。

以下 7 つの発表を見たので、それぞれごく簡単に感想とかを述べる。

  1. Java SE 8 正式リリース
  2. 徹底解説!Project Lambdaのすべて リターンズ
  3. null書いたら負け!Java8コーディング作法
  4. Brand new Date and Time API
  5. JavaFX - GUI by Illusion
  6. from old Java to modern Java - reloaded
  7. Raspberry Pi on Java ショートアップデート

Java SE 8 正式リリース

日本オラクル Java エバンジェリストである寺田 佳央さん(@yoshioterada)の発表。

Project Lambda、Date and Time APIJavaFX あたりについてはそれぞれ発表の枠があるため、それ以外の部分を主に拾ってくれた感じの内容だった。

特に印象に残っているのは、意外にも機能のことよりは、むしろ「プラットフォームとしての Java の進化」という話。たとえば、パフォーマンス面でも Java 8 は Java 7 に比べて向上しているということが強調されていた。

『Effective Java』に String#intern を Concurrency Utilities を使用して独自実装する→そっちのが速い、的な話が出てくるのだけど、こないだ会社でやってる輪読会のときに「Java 8 だと普通に String#intern のが速い」って話題が出たのも覚えていたので、印象的だった。

各種の目を通すべき公式ドキュメントについても案内してくださって、非常にありがたい。
特に、JDK 8 の互換性・非互換性ガイドは移行にあたって必読だなと感じた。

大部になるスライドの後半では、Java 8 の新機能・機能拡張が日本語で紹介されており、貴重な資料となる。(後半は、発表ではざっと流しただけだった)

また、ご本人によるブログも公開されている。

徹底解説!Project Lambdaのすべて リターンズ

立命館大学 立命館コンピュータクラブの吉田 真也さん(@bitter_fox)の発表。

大学 2 回生とのことで、衝撃的に若い。

発表は落ち着いたトーンで、とても聞きやすかった。若いのに……。(おっさん目線) StreamAPI / ラムダ式の難しくなさを強調した発表で、かなり使ってみようと思わせるものだった。

  • ラムダ式は匿名クラスに代わる構文だが、単なるシンタックスシュガーではないこと
  • デフォルトメソッドの導入によるクラスとインタフェースの「多重継承」問題に対しては、"Class always win" というルールがあり、ややこしい問題が呼び込まれるわけではないこと
  • StreamAPI において、メソッドチェーンの途中に .parallel() を挿入するだけで処理を並列化できる(!?)こと

あたりが印象に残った。
特に最後のは衝撃だったが、実際のところ何をどのように並列化してくれるのかとか全然わかっていない。(詳しい説明も、その場ではなかった。もしかしたら僕が何か誤解しているかもしれない)

何にせよ、ラムダ式普通に書いて、並列化はある程度言語やライブラリに任せて、というのが遠くない将来の開発では(少なくとも、大きな価値を生み出すような開発では)普通になっていくのだろうな……という印象を強く持った。

null書いたら負け!Java8コーディング作法

きしだのはてな」で何かとお世話になりがちな、きしだ なおきさん(@kis)の発表。

だが、準備ができていなくて、この次の発表と順番を入れ替えていて笑えた。
あと突然九州弁になった瞬間があったのに親近感を覚えた。そういう芸風なのか素なのかは判断しかねた。

null 書いたら負けって何なんと思っていたら、Optional の話だった。なるへそ……。

「ローカルスコープでは null 出てきてもよい、外部には null を見せないようにすべき」っていうシンプルな指針がなかなかよいと感じた。
といっても、違った指針もありうるので、異論はむしろ歓迎とのこと。

あと他にもいくつかの話題を扱ってくださったのだけれど、中でも「メモ化フィボナッチ」が魔法っぽかった。 でもぐぐったらいっぱい出てくるので、メモ化自体は目新しい手法ではないっぽい。勉強しなあかん。

メモ化フィボナッチの話はこれです。

Brand new Date and Time API

JSR 310 のオブザーバーを務める蓮沼 賢志さん(@khasunuma)の発表。

休憩時間中に表示されている表紙スライドの左半分がなぜか瑞鳳で、渋かった。
それについての説明が一切ないのも渋かった。

発表がまた渋かった。 Date and Time API の前に、ISO8601 についての説明をそれはみっちりと行ってくださった。

Date and Time API が準拠している ISO8601 が、いかに java.util.Date 等の Unix Time に基づいている既存 API との互換性がないかが強く印象づけられた。 とはいえ、便利な API であることには違いなさそうなので、しっかり理解したうえで使っていけたらよいとは思う。

なお、最後の質問タイムで「和暦関連の API において、元号が変わったときはどのように対応するのか」的な質問が上がった際、「元号が変わることを考えるのは不謹慎なので(というわけではないと思うが)元号はハードコーディングされており、バージョンアップで対応する」とか「日本が太陽暦を取り入れたのは明治だから、それ以前の元号には対応しないことが決められている」とかいった回答が出てきたのも激シブだった。(いや Java の方針がではなく、そういう回答がすらすらと出てきたことが……)

JavaFX - GUI by Illusion

Java in the Box」の櫻庭 祐一さん(@skrb)の発表。

発表始まる前ビートルズの Octopus's Garden 流してるし、超笑顔だし、クライアントサイドの人ですとか言いながら Stream API とか Date and Time API とかへの造詣も深そうだし、グルっぽくてカッコよかった。

内容は、Java 8 で Swing に代わって標準の GUI ライブラリとなる JavaFX について。
恥ずかしながら JavaFX のこと今まで知らなかったので、「Swing に代わる標準ライブラリ」と聞いてマジか!の感があった。

JavaFX では、FXML(という XML) / CSS / Java の組み合わせで GUI を構築するとのこと。
また、単なる GUI ライブラリではなく、サウンドや 3D も含めたマルチメディアライブラリ(?)的な性格を持ったものものらしい。(語彙が少なくてマルチメディアって言ってしまったけど、もうちょっとマシな表現がたぶんあるのだと思う……)

Swing からの移行はやっぱり必要で、いつするか、という話になるのかなあ。
JavaGUI に全然詳しくないこともあって、移行する嬉しさとか、移行する必然性とか、そういうのは今のところあんまりよくわかっていない。
まあ素の Swing があんまりいけてないというのは何となくわかるけど……。

ITPro に JavaFX についての連載記事もあるようなので、参照されたい。

また、先日新たに Java 8 についての連載も始まったとのこと。

from old Java to modern Java - reloaded

Acroquest Technology の谷本 心さん(@cero_t)の発表。

以前に Java 1.4 から Java 7 への移行ガイド的な発表をされたとのことで、今度は Java 7 から Java 8 への移行を意識した内容。

馴染み深いファイル操作の話題から始まって、「for 文の方が可読性が高い」みたいな「老害」的な視点に批判を加えつつ、Stream API に親しもうという主張につなげる、洗練された感じの内容だった。
恥ずかしながら Files 使ったことなかったので(まだ老害と呼ばれる年齢ではないはずだが……)、精進したい。

「for 文や while 文を書くときには、Stream API の使用を検討しよう」というシンプルな指針が心に残った。

あとは、UncheckedIOException 地味に悪くないなと思った。
こないだちょうど Effective Java 輪読会でチェックされる例外の是非(いっそ throws Exception と書いてしまったほうがよい場面もあるのではないか、的な)について話したところだったので、こういう現実的な折衷案というか代替案が出てくるのは(カッコよくはないかもしれないが)悪いことではない。

この発表で話されたことの一部についてはブログ上で議論されており、ブログもとてもよい内容なので、紹介しておく。

「ラムダ禁止」な事態にうっかり陥らないため、よく理解して使用し、必要に応じて啓蒙していくことが必要なのだと思う。

以下はこの記事に対する反応。記事の一部に改善提案がなされており、これもよい。

Raspberry Pi on Java ショートアップデート

Japanese Raspberry Pi Users Group の太田 昌文(@masafumiohta)さんの発表。

ライトニングトーク的な内容で、Java も使用できる Raspberry Pi の紹介が行われた。
今度、女子 2 名が Raspberry Pi で動くロボットを組み立てる、らしい。

おわりに

Java 8 は "Java is Back" というだけあって、他のモダンな言語にも機能面でそこそこ追いついてきてるのかな、という感想。
特に Stream API はなんせカッコいいし(僕の知ってる数少ない言語の中では、結構 Ruby っぽい書き方ができるなという印象)、これからのプログラミングのトレンドとも合っていると思うので、積極的に習得していきたい。

オラクル本社はオシャレ立地&オシャレ内装でいかしてたし、イベント自体もとても楽しかった。
トイレの窓から青山通りを一望のもとに見渡せるの、さすがにオシャレすぎる。

運営の方ほか関係者の皆さま、ありがとうございました。
受付で財布に 1000 円しか入っていなくて懇親会に参加できなかったのが残念でなりません。

そういえば、こういう勉強会的な趣のイベントに参加するの、実は東京来て以来 5 ヶ月目にして初めてだったりする。
やはりよい刺激になるので、今後ちょいちょい参加していきたいと思っている。

こういう大きいイベントではなくても、そのうち発表とかもできるとよいなあ。
レベルの高いソフトウェアエンジニア欲、今の自分としては結構社内で充足してしまっている感もあるのだが、やっぱり外に目を向けるということも(なんかこうバランス的な観点で)続けていきたい。

また、当然ながら、こうやって学んだことを日常業務に活かしたり、チームに循環させていくことができたらよいなと思っている。