Javaにもう一度REPLを~平成生まれのOpenJDKコミッターを刺激するOSS開発の緊張感

平成生まれのOpenJDKコミッター、吉田真也さんにOSSに触れ始めた理由やモチベーションについてインタビューしました。もっと積極的にOSSに関わりたいと考えている方は、吉田さんの考えや言葉が一つの道標になるかもしれません。

Javaにもう一度REPLを~平成生まれのOpenJDKコミッターを刺激するOSS開発の緊張感

Javaのオープンソースの実装であるOpenJDKの開発が始まってから、10年以上の月日がたちました。その間に成長した若いエンジニアは、ひょっとするとJavaがオープンソースで開発されていなかった時代を知らないかもしれません。

オープンソースという文化が身近で当たり前になっている現代のエンジニアは、何を感じ、何を思ってオープンソースにコミットしているのでしょうか。平成生まれのエンジニアである、吉田真也(よしだ・しんや/ 1 shinyafoxさんにインタビューしました。

吉田さんは、学生時代からOpenJDKの超若手コミッターとして活躍し、Java8で追加されたラムダ式(Project Lambda)や、Java9で導入されたREPLツールJShell(Project Kulla)の開発などに参加していました。

もっと積極的にOSSに関わりたいと考えている開発者の方には、吉田さんの考えや言葉が一つの道標になるかもしれません。

手を伸ばせばすぐ身近にあったOSSという存在

──まずはプログラミングをどのように始めたのかを教えてください。

吉田 両親がプログラムを書いていたので、その影響で小学5年生のころから自然とプログラミングしたい思うようになりました。自宅で技術書を読みながら、JavaScriptやVisualBasicなど、すぐ結果が見えるスクリプト系の言語を書いていました。

中学2年生くらいで「別のことがやりたいなー」と、たまたま手に取った一冊がJavaの本でした。パラパラと読んでみると、構文や書き方が個人的にハマる部分がありました。

Javaの構文は大人数で開発することを前提にしてるので、冗長な文が多くてディスられることも多いんですけど(笑)、何が書いてあるのかパッと分かるみたいな部分や、冗長な部分も逆にコードを書いている感じがして、僕はけっこう好きなんですよね。

2

吉田真也さん:1993年生まれの24歳、平成世代エンジニア。高校時代から積極的にOSSに触れ、大学時代は超若手のコミッターとしてOpenJDKプロジェクトに参加。2018年4月からLINEに入社し、エンジニアとしての活躍を期待されている。Hey! Say! JUMPの知念侑李くんを応援している。 3 bitterfox/ 4 bitter_fox

──吉田さんがオープンソースを初めて意識したのはいつごろでしょうか?

吉田 それこそ高校3年生のころに参加したProject Lambdaで初めて感じました。実装についてオープンに議論できるのは良いですよね。バグがあったら報告して、その修正があがってきて、それをすぐに試せるのは、効率的で面白いと思いました。

──それ以前は、Javaのサードパーティーのライブラリを使うときなどにもOSSを意識していなかったということでしょうか?

吉田 まったく意識してなかったですね。そもそもコードをどこで見られるかも知らなかった。IDEでポチっとやれば見えることはわかってましたけど、ソースコードがネット上で公開されているかどうかなんて気にしていなかったと思います。

──学生時代にOpenJDKに関わることは大きな出来事だと思うのですが、どうやって参加するようになったのでしょうか?

吉田 僕がOpenJDKで大きく関わったプロジェクトは2つあって、Project Lambdaと、Project Kullaです。高校3年生でProject Lambdaに関わりだしたんですけど、当時2011年ごろはJava7の開発から5年たって、正式リリースとなり、Project Lambdaの開発が佳境にさしかかっていたころです。

そのころ僕はJavaもそこそこ書けるようになっていて、Scalaなどの関数型の言語に手を出しはじめてたんですね。ちなみに、大学ではサークルで友人とWebサービスを作ってましたが、そのときはScalaやRubyも書いていました。

それで、Java8にはラムダ式っていう関数型っぽい書き方が追加されることを、Javaエンジニアの櫻庭祐一さん記事で知って、それからOpenJDKのアーリーアクセス版を触るようになりました。

すると意外にも未熟な部分が多くて、新しい機能を試しているとコンパイルが落ちるんです(笑)。「このままじゃつらい!」ということで、Project Lambdaのメーリングリストにバグ報告だったり、「ここがおかしいんじゃないの?」という指摘を送ったりし始めました。

──それから自身でコードを書くようになるには、どれくらい時間がかかったのでしょうか?

吉田 3年ほどたったころだと思います。さすがにいきなりパッチを送ることは厳しいですね(笑)。

──バグ報告するうちに「OpenJDKに関わりたい」という気持ちになったのでしょうか? それとも初めからそういった気持ちを持っていたのでしょうか?

吉田 関わりたいという気持ちは最初からありました。Javaという言語が好きなので、好きなものに関わっていける喜びもあるし、いろいろな人と開発していく経験もなかったので、その楽しみもありました。

あと、高校3年生なので大学受験を控えていたんですけど、受験勉強がしんどくて、憂さ晴らしや気分転換としてやっているところも実はありました(笑)。

Project Lambda:Java8でリリースされたラムダ式を実装したプロジェクト。関数型インターフェースを実装する際に簡略化して記述することができる(吉田さんが2014年の「Java8Launch」で発表した資料「徹底解説!Project Lambdaのすべて リターンズ」より)。

──次のProject Kullaに関わるようになった経緯を教えてください。

吉田 2014年ごろ「Project Kullaが始まります」というアナウンスがありました。面白そうだなと思って、すぐにメールでコンタクトをとりました。すでにProject Lambdaに関わりがあったので、思っていたよりもスムーズに参加ができました。

──Project Kullaでは吉田さんはどのような立ち位置で作業されていたのでしょうか?

吉田 基本的にOpenJDKはOracleの社員の方が開発しています。メインの部分はOracleの方が担当し、僕はコードを書いて、パッチを送るというような感じで参加していました。

Project Kulla:Java9でリリースされたJShellを開発したプロジェクト。JShellはワンラインで即時実行が可能なJavaのREPLツールである(吉田さんがJJUG CCC 2016 Springで発表した資料「Introduction to JShell: the Java REPL Tool」より)。

「Javaがナンバーワンじゃなくなってしまう」という緊張感

5

──Project KullaのJShellはなぜ開発されたのでしょうか?

吉田 Javaって、これまではプラットフォームの言語でナンバーワンだったじゃないですか? それがだんだんナンバーワンじゃなくなってきたというのが背景にあると思います。

特に教育の分野では、REPL(Read―Eval―Print Loop、対話型評価環境)のある環境でプログラミングを教えるのがとても流行っているんです。例えばアメリカの有名な大学は、最初の言語としてPythonで教え始めるみたいなイメージです。日本でもそういう大学があったりします。

そういった教育の分野でJava言語のプレゼンスが下がっていて、その背景には「REPLがない」というディスアドバンテージがありました。そこを埋めようと立ち上がったプロジェクトです。

実は、すごく昔にサードパーティーでREPLのライブラリがあったらしいんです。でも、Java 1.5あたりの時代なので、もちろん今の環境では動きません。動いたとしてもエラーがめちゃくちゃ出ると思いますね(笑)。

──Project Kullaなどの開発を通して勉強になった経験を教えてください。

吉田 現在は、コードを書いてパッチを送って、レビューをして、修正して……という一連の流れを仕事として体験できますが、当時はかなり勉強になりました。学生でそのフローを経験するのは難しいと思います。

大人数で一つのプロジェクトを動かすことも良い勉強になりました。さらに、Oracleの社員にコードをレビューしてもらえることも、なかなかない経験だったなと思いますね。

──そんな経験の中で、影響受けた人や印象に残っている言葉などはありますか?

吉田 「おおっ!」と思ったのは、OracleでJava言語のアーキテクトをやっていて、今はJavaプラットフォームのリードをしているブライアン・ゲーツ(Brian Goetz)というエンジニアがMLに投げた「Don't Break Java」という言葉です。

これは、その人が常に意識していることなんです。例えば、その人の仕事や決断でJavaが、その存在が壊れてしまうかもしれない。そういう重い責任を背負って仕事しているんだ、と知れたのは良かったです。

そういった方と同じように「Javaがナンバーワンじゃなくなってしまう」という緊張感の中で仕事ができたことも良い経験だったと思います。

コミュニケーションは無理にとらなくても良い

──OpenJDKに関わり始めたころは「メールでバグ報告」していたとのことですが、リモートでのやり取りだけではなく、実際にプロジェクトの人たちに会ったのはいつごろでしょうか?

吉田 Project Lambdaで言うと、毎年秋にサンフランシスコで行われている「JavaOne」というイベントで、2014年ごろ、当時日本オラクルに所属されていた寺田佳央さんに「来ませんか?」と誘っていただいて、そのときに初めて会いました。

Project Kullaのメンバーとも、JavaOneに参加したときに会ったという感じです。

──Project Kullaにコミットし始めてから会ったのでしょうか?

吉田 ちょうどProject Kullaをやり始めて1年ほどたったときに会いました。Java8がリリースされた後のJavaOneで、プロジェクトとしてはProject Lambdaが終わっていて、Java9をどうしていこうかという時期だったと思います。

──プロジェクトに参加して実際に会うまで長い期間がありましたが、リアルで会ってみると、コミュニケーションをとるときに精神的に変わった部分などありますか?

吉田 コミュニケーションは、多少は取りやすくなりました。実際にその人がどういう感じなのかを知っていますので。

ただ、そんなに大きな違いがあったかというと、そうでもないと思います。みんなTwitterとかFacebookなどのSNSをやっていて、すでに顔や雰囲気は知っていたので、そこまで大きな違いはなかったですね。

──今の時代はSNSでやり取りするのが当たり前で、そこから自然な流れで一緒に開発していくと思いますが、まったく会ったことのない人とやりとりするのに違和感はないでしょうか?

吉田 「わざわざ、時間を割いてまで会いたいか?」と言われると、そこまで強い気持ちはないですね。実際に深く関わることで「会いたい」という気持ちが出てくるのかな。パッチを何回か送るくらいのプロジェクトでは「そんなに」って感じですね。

6

JavaOneが2018年から名称と内容を変更する「Oracle Code One」のWebサイト

よくないものを直すという気持ちがOSS開発への一歩

──OpenJDKのような大きなプロジェクトに関わるときには「世の中のため」という気持ちで開発を行うのでしょうか? それとも「好きだから作る」という個人的な気持ちが大きいのでしょうか?

吉田 どちらかというと個人的な気持ちの方が大きいと思います。「自分が納得いかないから直したい」という気持ちですね。僕がコミットしたことが、結果的に世の中にとって良いことになったかもしれませんが、そこまで考えてやっているつもりはあまりありません。

──吉田さんが個人的に開発意欲が湧くのはどういったところからでしょうか?

吉田 根底には「よくないものをよくしたい」という気持ちが強いですね。

Project Lambdaのときは「コンパイラが落ちるからどうにかしたい」という気持ちでレポートを送ったのが最初ですし、Project Kullaも序盤は機能が微妙だったり、補完機能が賢くなかったり、バグがあったり、そういう部分をよくしたいという気持ちでやっていました。

──さまざまなOSSに触れていると思いますが、その中で参考になったコードなどありますか?

吉田 Javaのコンパイラのコードは参考になりましたね。僕の研究でも型システム周りとかそういうのをやっていて、コンパイラそもそもの仕組みというか、実装レベルで完全に動いているコードが見られるのはとても勉強になりました。

──コンパイラの実装は、自分が想像していたコードと差がありましたか?

吉田 いい意味でも悪い意味でも差は大きかったですね。Javaのコンパイラのコードってけっこう常識外れな形で書かれていたりするんですよ(笑)。

getterやsetterがなくてフィールドを生で触れる状態になっていたり、Java言語のベストプラクティスではないこともやっていて「そういう書き方もありなんだ」っていう既成概念を崩された瞬間でもありましたね。

ただ、適当に書いてるわけではないと思うんですけど、理由があんまりよく分かってないんです。これは予想ですが、メソッド呼び出しを少なくしてパフォーマンスを上げるなどの狙いがあるかもしれませんね。

そういったところも含めて、コンパイラのコードは全部エレガントに書かれていると思います。

──「どのようにOSSと関わればよいのか?」という人も多いかと思いますが、どうアドバイスしますか?

吉田 僕の場合は「よくないものを自分で直せる世界だから、よくないと思ったら直そう」という意識が強いんですね。

OSSっていっぱいあって、簡単に使えると思うんですけど、少々微妙なところもあるんです(笑)。それを自分が思うように少しずつ直していけば、自分が便利になりますよね。そういったところから始めていくといいんじゃないかな。

気になったOSSがあればコードを読んで、メーリングリストがあればバグ報告や改善案を投げてみるとか、やれることから始めるのが良いと思います。

OSSで勉強して、OSSで成長していく

7

──OSS文化がなかったら、吉田さんのキャリアにどんな影響があったと思いますか?

吉田 学生時代にプログラムの勉強はできていなかったと思います。勉強する機会や、自分の技術力を高める場がない。インプットする場所もアウトプットする場所もなくて、そういったサイクルがうまく回らないと思います。

──ちなみにLINEのエンジニアというキャリアを選んだ経緯を教えてもらえますか。

吉田 逆求人という就職活動サービスがありまして、本来の就活とは逆に学生がブースを持って、企業が話をしに来てくれるんです。何社かインターンに行きました。LINEには自由応募でインターンに参加しましたが、いくつかのインターンを経験したなかでも良いと思ったのがLINEだったため、就職を決めました。

その後1年ほどLINEでバイトをし、そのまま入社という流れです。

──OpenJDKのような大きなOSSに関わっていると、企業から注目を集めそうですね。

吉田 自分でもけっこう人気があったように思います(笑)。あまり学生でOSSをやっている人がいなくて、僕の周りでも「Webサービスやっています」という人が多かった。

みんな自分のサービスを作りたいんだと思います。僕は、どちらかというとコードを書いて勉強したいというタイプで、探究心や向上心が強い。OSSをやっている人が少ないことは、逆に就職には有利だと感じていました。

──OSSに関わることは、少なくとも吉田さんの就職には影響があったんですね。

吉田 とても影響がありました。

ただ、OpenJDKは興味から始めたことで、将来につなげようとか、仕事にしようといったことはまったく考えていませんでした。問題を解いたり、理解することを楽しんでコードを書き続けていただけです。いわゆる一般的な就職活動はしませんでしたし。

──これからは学生でなく社会人として、どのような勉強をして、どのようなエンジニアになっていこうと考えていますか?

吉田 コンパイラや、データベース、アプリケーションサーバのフレームワークなどをもっと勉強していきたいですね。コアな部分が得意なエンジニアになりたい。今後の配属先でもデータベースなどのミドルウェアを扱うことになりそうなので、そこを重点的に伸ばしていきたいですね。

自分が思い描いているエンジニアを目指すに当たって、OSSの文化はかけがえのない大事なものです。今後もOSSで勉強して、OSSにコントリビュートしていきたいと思います。

──今後もOpenJDKに関わっていくとしたら、どのような領域を考えますか?

吉田 もともとコンパイラとか、コアな領域が好きなのでそういった部分に関わっていきたいです。具体的には新しい言語機能の処理系ですね。これから入ってくる、switch式とか、Value Typesみたいな機能です。

最近、JavaでもScalaなどに近い書き方ができるようになっていて、そういう言語との開きがどんどん小さくなっている流れは面白いですね。

──それは興味深いですね。本日はありがとうございました。

取材:megaya {$image_8}megayaのブログ

若手ハイキャリアのスカウト転職