「Java SE 9」がいよいよ7月リリース。櫻庭祐一氏と吉田真也氏に注目ポイント、移行時の留意点を聞いた
「Java SE 9」の正式リリースが2017年7月に迫った。新機能の導入でさらに進化するJava SE 9の注目ポイントなどについて、Java Championの櫻庭祐一氏とOpenJDKコミッターの吉田真也氏に聞いた。
“待ちに待った”Java SE 9リリース
2017年7月、いよいよJava SEの最新版となる「Java SE 9」がリリースされる予定だ。「Project Jigsaw」や「JShell」などの新機能が追加されるJava SE 9の登場により、Java開発はどう変わる可能性があるのか? Java Championの櫻庭祐一氏と、OpenJDKにおいてJShellのコミッターを務める吉田真也氏に話を聞いた。
──Java SE 9のリリースが7月に迫りました。今回は日頃からコミュニティ活動やOpenJDKのプロジェクトなどでJavaに深く貢献されている櫻庭さんと吉田さんに話を伺います。櫻庭さんは日本人として初めてJava Championに認定されるなど、Javaコミュニティへの貢献が国際的にも高く評価されており、技術情報サイト「Java in the Box」や技術系メディアへの寄稿記事、あるいはイベントでの講演などを通じて読者の皆さんもよくご存じだと思います。吉田さんは、Java SE 9で初めて導入されるJShellのコミッターを務めていらっしゃいますね。
吉田真也氏。高校在学中よりOpenJDKのプロジェクトに参加。現在は立命館大学 大学院で情報理工学を専攻中。
Twitter:@bitter_fox
ブログ:http://d.hatena.ne.jp/bitter_fox/
吉田真也氏:はい、僕はOpenJDKのコミッターとしてJShellの開発プロジェクトであるProject Kullaに携わってきました。
櫻庭祐一氏(以下、敬称略):JDK 9のコミッターもやってるよね?
吉田:はい、それもやってます。
──今は大学院生ですよね。いつからOpenJDKに参加されているんですか?
吉田:高校生の時にOpenJDKにかかわり始めて、少しずつ“実績”を積み重ねてコミッターになりました。実績っていうのは、例えばパッチを書いて修正したり、新しい機能を提案して取り込まれたりといったことになります。
──高校生でOpenJDKに参加するって、日本では珍しいですよね。きっかけ何だったのでしょうか?
吉田:当時はJava SE 8が開発途中で、Javaでラムダ式を書けるようにする「Project Lambda」が活動していたのですが、そのベータ版を試していたらバグが見つかったので、報告したのが最初のきっかけです。その後、徐々に深くかかわるようになり、2015年にOpenJDKのコミッターになりました。
櫻庭祐一氏。Javaの黎明期よりWebサイト「Java in the Box」で精力的に技術情報を発信。2005年にJava Championに認定され、現在はセミナー講演などで日本中を飛び回る日々を送る。
Twitter:@skrb
ブログ:http://www.javainthebox.com/
櫻庭:僕と彼の付き合いの始まりも、僕のProject Lambdaの記事が間違っていることを指摘してくれたことなんですよ(笑)
吉田:櫻庭さんの記事を読みながら試していたら、書いてあることと違う動作だったので報告したんですよね。
櫻庭:まさか相手が高校生だとは思わなかったな(笑)
──そんなお二人にJava SE 9のお話を伺うわけですが、まずリリースに関して率直な感想をお聞かせください。
吉田:僕は2014年からかかわってきたJShellがようやく正式リリースを迎え、とても感慨深いですね。
──Java SEでかかわった最初のプロダクトのリリースですものね。櫻庭さんはいかがですか?
櫻庭:私は「やっと正式リリースにこぎ着けた」という気持ちです。Java SE 9は何度もリリースが延期されたり、機能変更があったりしましたからね…
──お二人とも「待ちに待った」ものなんですね。
櫻庭:本当に「やっと出るか…」という気持ちですよ。正直、今回は心配しました。Jigsawなんて10年以上も続いてきたプロジェクトですからね。一度は提案が取り下げ(Withdraw)されたこともあったし。そうして何度も延びに延びて、今回ようやくリリースされるんです。Jigsawがいよいよ日の目を見るというのは、本当に感慨深いですねぇ…
待望のモジュール・システム「Jigsaw」の導入で開発者が気をつけるべきことは?
──JigsawはJava SE 9の最大の目玉となる機能ですが、お二人はこれをどう見ていますか?
吉田:JigsawはJava開発をドラスティックに変えるもので、影響範囲が結構大きいんじゃないかと思います。これが今後どう浸透していくのか、企業でいつ頃から本格的に使われるようになるのか、気になるところですね。
──Jigsawの導入により、何か予期されることはありますか?
吉田:まず確実に起こるであろうことは、「今まで動いていたものが、そのままでは動かなくなる」ということです。なぜなら、Jigsawが入ることで、ライブラリへのアクセス制限が厳しくなるんですよ。例えば、公開されていないクラスにリフレクションを使ってアクセスしようとした時、例外がthrowされるっていうことが起きるようになります。
──櫻庭さんはJigsawの黎明期から見てこられたので、いろいろと思うところがあるでしょう。
櫻庭:モジュール機構の導入は、もともとOSGiの対抗として構想が始まりました。そのため、JigsawはOSGiと比較されることも多いのですが、モジュール・システムとして見た場合、率直に言って現状の機能はあまり多くないです。ただ、それだけの機能ですら、新たに導入されることによっていろんなところで問題が出てくるんですね。それがJigsawの導入に長い年月がかかった理由でもあります。
どういった機能を入れるかで、時に機能が拡大されたり、あるいは縮小されたりっていうのを繰り返してなかなか議論がまとまらなかったのですが、結局、Java SE 9では機能を絞り込み、「最小限のモジュール・システム」として入れることになりました。そうして入れてしまえば、機能を追加するのは後からできますしね。もし初めから沢山の機能を取り込んで、その結果「使いづらい」、「取っつきづらい」と思われてしまったら、誰も使わないかもしれません。そこで、初めは小さな機能として、とにかく入れられたことは大きな収穫です。
ただし、小さな機能だとは言え、既存のシステムに影響が及ぶので、その点で不安なところはあります。もっとも、モジュール・システムは、いずれJavaにも取り入れなければならなかったものです。例えば、大規模なシステムを作る際、Mavenなどのビルド・システムを使うようなプロジェクトでは、すでにモジュール分割などを行っているでしょう。そうしたプロジェクトでは、Jigsawにより大規模システムをより作りやすくなるはずです。
──特に大きな影響を受けるのは、どのようなところでしょうか?
櫻庭:既存のクラスパスがほぼ使えなくなるので、初めはクラスパスとモジュールの併用や使い分けが必要となり、そこでコンフリクトが起きるケースが出てくると思います。最初は皆、ノウハウがないので、どうやってトラブルを回避するかについては手探り状態になるでしょうね。
──新たな仕組みなので、初めのうちは使い方に気をつける必要はあるものの、必須だったモジュール・システムの最初の取っかかりとしてようやくJigsawが入ったと。ここから今後、Javaのモジュール機能が発展していくことへの期待もありますね。
櫻庭:もちろんです。今は足りないものがいろいろとあるので、今後の発展に期待しています。例えば、現状はセントラル・リポジトリもないですしね。
吉田:Mavenのリポジトリではなく、Jigsaw専用のものってことですよね?
櫻庭:そう。セントラル・リポジトリとは、皆が作ったさまざまなライブラリを共有し、必要に応じてそこからダウンロードして使うというものです。RubyやPerlには、すでに存在します。Javaに関してはMavenのレポジトリがあるので、例えばそれらに相乗りするという手もあるでしょうが、今はそれもできていません。
──OSGiよりも普及するでしょうか?
吉田:OSGiはオプトイン型なので、対応しなくても困らないじゃないですか。でも、Jigsawは言語に組み込まれているので無視できませんし、より身近なので取っかかりやすいと思うのですが、どうでしょうね。
櫻庭:OSGiはプラグインみたいなかたちで使われるケースが多いので、一般の開発者にはなじみが薄いかもしれません。それに、言語に含まれている仕様と外部仕様とでは扱いが大きく違ってくるので、言語に含まれているJigsawは有利でしょう。
──Jigsawの使いこなしに関して読者にアドバイスをいただけますか。
吉田:プログラム実行時にモジュール関連の例外がthrowされたとしても、それをハンドリングするためのオプションが用意されているので、ちゃんと調べれば動かせますから安心してください。
櫻庭:いきなりそれ! ハードルが高いですね(笑)
吉田:そうですか? 「例外がthrowされても怖くない」って大事なことじゃないですか(笑) だから、皆さんぜひ一度チャレンジしてみていただきたいですね。櫻庭さんからのアドバイスは?
櫻庭:最初のうちはUnnamed Moduleという名前のないモジュールをいかに使いこなすかが鍵になると思います。これは従来のクラスパスに相当するものですが、既存のライブラリがモジュールに対応していないため、それらをUnnamed Moduleとしてモジュール・システムの中に取り込めるようになっているんです。javaコマンドに関しても、モジュール関連の起動時オプションがいろいろと追加されており、それらを使うとUnnamed Moduleが使えるようになります。
Jigsawに関しては思い入れが強すぎて、ほかにも話そうと思えばいくらでも話せるのですが…。そうだ、ドキュメントなどを参照する時は、なるべく新しいものを見てくださいね。
──APIドキュメントのことですか?
櫻庭:それだけじゃなくて、ブログなどに書かれている解説記事も含め、全てのドキュメントです。何しろ仕様がコロコロ変わったので、過去に書かれた解説記事の内容が当てにならない場合が多いのです。私も昨年の春、あるメディアにJigsawの記事を寄稿したのですが、その後に仕様が変更され、早々と時代遅れの内容になってしまいました(笑)