COMMUNITY ABOUT US JAVA TECH JAVA IN ACTION Goldman Sachs の ニューヨーク支社で 話す JVM アーキテク チャ・チーム・マネー ジャ、Donald Raab 氏 (左)とアプリケーショ ン・プラットフォーム 担当グローバル責任 者、John Weir 氏。 JCP Executiveシリーズ Goldman Sachs、 GS Collectionsでラムダ式を活用 Goldman Sachs の John Weir 氏と Donald Raab 氏が、GS Collections の開発、Java SE 8 のラムダ式による影響、さらには JCP での活動に ついて語ります。STEVE MELOAN 写真:LAURA BARISONZI/GETTY IMAGES ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 Java 8 Is Here J ohn Weir 氏は Goldman Sachs のアプ リケーション・プラットフォーム担当グ ローバル責任者です。Goldman Sachs は 2011 年に Java Community Process (JCP)の Executive Committee に選出さ れており、Weir 氏はその代表を務めていま す。Weir 氏はかつて、 クレジット・デリバティ ブに関する FpML Standards Committee と FpML Architecture Committee で blog 14 ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 COMMUNITY JAVA IN ACTION JAVA TECH ホワイトボードに書 いた問題に取り組む Weir 氏とそれを 見つめる Raab 氏。 ABOUT US レクションを操作して、数百万から数億も の要素を持つリストやセット、マップを処理 していました。コードベースは非常に膨大 で、数千からときには数万もの反復パター ンが手書きの for ループで実装されていま した。 Java SE 8 がリリースされるまで、コレク ション分野には高機能な API が存在せず、 開発者は何度も何度もパターンを再作成し なければなりませんでした。私たちの目標 は、開発者のコード内で " どうやって " から " 何を " を切り離すことで重複コードを減ら す関数型 API を提供することでした。また、 Fork/Join ライブラリによる並列性を活用す ることで、開発者が複数のプロセッサ・コ アを使用してパフォーマンスを最適化でき るようにしたいとも考えていました。 8 のラムダ式に対応する準備はできていま GS Collections 向けの API には、 すが、Java 5 から Java 7 まででも動作しま Smalltalk での私のプログラミング体験 す。 が大きく影響しています。Smalltalk には Java Magazine:内部反復が GS select、reject、collect などの便利なメ Java Magazine:GS Collections の発端に Collections のキーとなる概念です。内部反 ソッドがあります。長い年 ついてお聞かせください。こ 復が非常に効果的である理由とは何でしょ 月をかけて、flatCollect や の取組みはいつ開始され、当 実現性の確認 groupBy、partition、zip など うか。 初の目標はどのようなもの 「 JSR プロセスを介し のメソッドを追加しました。こ Raab 氏:内部イテレータは、操作している だったのでしょうか。 コレクションの実装の詳細を隠して、エラー れらのメソッドは、Haskell、 Raab 氏:GS Collections は て、コミュニティがイ を減らします。この内部イテレータのおか Ruby、Scala といった言語で 2004 年、CARAMEL と呼ばれ ノベーションを慎重に げで、開発者は処理対象の各種データ型 得られた経験が影響していま る Goldman Sachs の社内プ 吟味する必要がありま を最適化するという義務から解放されます。 す。そのほかに、HashMap ロジェクトとして開始されまし 内部イテレータは、実行すべき処理を受け や ArrayList、HashSet など た。CARAMEL という名前は、 す」 取ると、データ・コレクション内のすべての の JDK Collections クラス Collection(コレクション)、 要素に対してこの処理を適用します。 を、最適化したもので置き換 Array(配列)、Map iteration ̶Goldman Sachs、ア たとえば、あるコレクションを別のコレク えています。GS Collections library(マップ反復ライブラリ) プリケーション・プラット ションに変換する場合、ターゲットとソース は、大規模と小規模の両方 に由来します。当時、私たち フォーム担当グローバル のサイズが同じだと分かっていれば、アル のパフォーマンスに合わせて は 10 ∼ 100GB レベルの非常 責任者、John Weir 氏 ゴリズム内で事前にサイズを設定できるた チューニングされています。 に大きな Java ヒープを扱って め、開発者が実装の詳細を扱う必要はなく 最新バージョンである Java SE おりこの領域内で大規模なコ Goldman Sachs の代表を務めていました。 1997 年の入社以来、数々の上級技術職を 歴任した Weir 氏は、2004 年にテクノロ ジー・フェローとなり、2008 年にマネージ ング・ディレクターに就任しました。 Donald Raab 氏は、Goldman Sachs 技 術部門のエンタープライズ・プラットフォー ム・グループに属する JVM アーキテクチャ・ チームのマネージャーです。Raab 氏は JSR 335(Lambda Expressions for the Java Programming Language)の専門家グ ループのメンバーとして活動しており、JCP Executive Committee における Goldman Sachs の代表代理の 1 人でもあります。 2001 年に PARA チームのテクニカル・アー キテクトとして入社した Raab 氏は、2007 年にテクノロジー・フェローとなり、2013 年にマネージング・ディレクターに就任しま した。 blog 15 一息入れながらプ ロジェクトを仕上げ る Weir 氏と Raab 氏。 なります。このアプローチによってコードが 簡素化され、再利用しやすくなります。 Java では、ほとんどの開発者が先行反復 と呼ばれる方法を実装しており、この場合、 計算は即座に実行されます。しかし、わず かに遅れて処理が実行される遅延方式で計 算を実行する方が便利な場合もあります。 開発者にとってこのような処理の実装は容 易ではありませんが、内部反復を使用する と、処理の詳細はコレクション・クラスによっ て内部で対処されます。 また、内部反復はコード保守にも大きな 効果を発揮します。大規模なコードベース がずっと読みやすくなるため、長いアプリ ケーションの寿命を考えると、生産性への 影響はとてつもなく大きいと思われます。 Java Magazine:Java SE 8 のラムダ式と ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 List<Integer> results = new ArrayList<>(); for (Integer each : list) { if (each > 50) { results.add(each); } } その一方で、Java SE 8 を使用した GS Collections の Select パターンは次のように なります。 /** * Aggregate the total order values by item. */ @Test public void totalOrderValuesByItem() { MutableMap<String, Double> map = this.company .getOrders() .flatCollect(Order::getLineItems) .aggregateBy(LineItem::getName, () -> 0.0, (result, lineItem) -> result + lineItem.getValue()); Verify.assertSize(12, map); Assert.assertEquals(100.0, map .get("shed"), 0.0); Assert.assertEquals(10.5, map .get("cup"), 0.0); } list.select(each -> each > 50); Java 8 にはもう 1 つ非常に魅力的な仮想 拡張メソッドというものがあります。これも、 GS Collections にとって有用です。この機 能はインタフェースへの動作の追加を可能 メソッド参照によって、保守とレビューが にしますが、デフォルトのメソッドと動作を 無駄がなくすっきりと簡単になります。これ 組み込むことで、GS Collections のテスト らのイノベーションを活用するため、言語 COMMUNITY JAVA IN ACTION JAVA TECH 階層内の重複コードの量を減らせます。ま た、フレームワーク全体を通じて、さまざ まなテスト関連事項を組み合わせてマッチ ングすることができるようになります。 Java SE 8 の機能であり、ラムダ式と密な 関係にあるメソッド参照も、GS Collections に効果があります。メソッド参照を使用する ことで、より簡潔で読みやすい形式で関数 型 API を利用できるようになります。 次のメソッド参照コード例は、GS Collections Kata Java 8 Solutions から抜粋 したものです。 ABOUT US GS Collections はどのようにやり取りするの でしょうか。ほかにも関心のある Java SE 8 機能はありますか。 Raab 氏:GS Collections は最初から、ラ ムダ式に体現された概念に基づいて開発 されています。Java SE 8 にラムダ式が組 み込まれたことは本当に素晴らしいことで す。今後は GS Collections の API で幅広く ラムダ式を利用できるようになります。GS Collections には、呼出し時にラムダ式を渡 せる関数型メソッドが 90 以上もあります。 この Java SE 8 機能がもたらすメリットは 大きく、たくさんのコードを削除できると思 います。おそらく20 ∼ 30% ぐらい削減さ れるでしょう。 たとえば、Java SE 7 で書かれた Select パターンは次のようになります。 blog 16 ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 COMMUNITY JAVA IN ACTION JAVA TECH で抽出するこの新しいメソッドの実行には およそ 3.5 倍もの時間がかかり、JVM 上に いくらかのガベージを作り出していました。 コミュニティは Goldman Sachs が持つ多彩 なコードベースのおかげでこの問題を発見 し、私たちは Executive Committee におけ る役割を通じてフィードバックを提供するこ とができました。 私たちは JSR プロセスにも直接参加して います。協力メンバーとして、ラムダ式や Collections API、JCache API、Identity API に関与してきました。また、JCP プロセス に求められる運営、発展、前進方法に関す る議論や協議にも参加しています。 Java Magazine:JCP メンバー企業にはそ れぞれ異なる関心事や優先順位があります が、これらのニーズはどのようにして JCP 内で取りまとめられているのでしょうか。 Weir 氏:Executive Committee が持つ大 きな強みの 1 つは、参加組織の幅広さで す。Java プラットフォームのベンダーや再 販業者から、フレームワークやライブラリ のプロバイダ、そして、Java ユーザー・グ ループ(JUG)やエンドユーザーに至るま で、さまざまな組織が参加する Executive Committee は、Java の発展を導くという目 標に向けて全員が協力する優れた代表者コ ミュニティです。 この目標によって、ベンダー側では激し い競争があったとしても、コミュニティとし ては 1 つになれるのです。私たちが目指す のは、断片化することなく1 つにまとまった Java プラットフォームの維持であり、今後 も幅広い機能要望に対応したいと考えてい ます。 Java Magazine:標準の推進とイノベーショ ンの推進のバランスは、どのように取れば ABOUT US と JVM(Java 仮想マシン)内で最適化を 実施しています。 Java Magazine:GS Collections はいつオー プンソース化されたのでしょうか。また、 その過程についてお話しいただけますか。 Raab 氏:GS Collections をオープンソー ス化したのは 2012 年 1 月でしたが、その 前に社内的なオープンソース化を行いまし た。Goldman Sachs は多数の開発者とア プリケーションを擁しており、非常に協力 的でコンセンサス主義の組織です。私たち は、GS Collections の実行可能なユーザー・ コミュニティがあるのかどうかを、オープン ソース化を行うことで調査したかったので す。そして、明確な需要がそこにあること がわかりました。 コレクション・ライブラリをオープンソー ス化するだけでなく、私たちは付属のトレー ニング・ライブラリである GS Collections Kata も含めることに決めました。このライ ブラリは GS Collections だけでなく、Java SE 8 のラムダ式とメソッド参照の習得に適 したツールです。 Java Magazine:JCP プロセスに対する Goldman Sachs のこれまでの貢献について お聞かせいただけますか。 Weir 氏:私たちはいくつかの異なるレ ベルで JCP プロセスに関与しています が、Executive Committee における役割 は各ステージでの JSR のレビューです。ま た、社内のネットワークを利用して、数 千名いる Goldman Sachs の開発者から JSR のフィードバックを得ています。たとえ ば、日付と時間の API を追加 / 改善した JSR 310 に関して、私たちは Joda-Time の getDateTimeMillis に取って代わるメソッド の問題を発見しました。時間をミリ秒単位 ラムダ式がコードに与 える影響を確認する Raab 氏と Weir 氏。 良いとお考えですか。 Weir 氏:誰もがイノベーションを求めてお り、イノベーションは常にそこにあります。 イノベーションは、開発者が問題を解決す るための必須要素なのです。CARAMEL か ら GS Collections への発展については先ほ ど Donald が話しましたが、このソフトウェ アは、簡単で透明性が高く、より魅力的な API を求めて開発者が努力した結果の産物 です。Java エコシステムの体制は非常に blog 17 大きく、たくさん のコードを削除 できると思いま す。 おそらく20 ∼ 30% ぐらい削減 されるでしょう」 ̶Goldman Sachs、 JVM アーキテクチャ・ チーム・マネージャ、 Donald Raab 氏 ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 MORE ON TOPIC: COMMUNITY JAVA IN ACTION ニティは大規模で多様性に富んでいます。 また、先日は OpenJDK への参加契約に も署名しました。直接的な貢献をしたいと 考えています。このプロセスを通じてオープ ンソース・コミュニティに恩返しできればと 思います。 Java プラットフォームは、Goldman Sachs のインフラストラクチャにとって非 常に重要な要素です。コミュニティや弊社 の利益のため、今後も Java が進化、発展 し続けるよう全力を尽くすつもりです。</ article> JAVA TECH たらすメリットは ん。GS Collections を通じて、多数の開発 者がソフトウェアの発展に関わることで得ら れるメリットを目にしてきた私たちは、特に このプロセスを中心的価値と位置づけて投 資を行っています。つまり、私たちは開発 者の参加を広げることに特に力を注いでい ますが、この参加拡大は、コミュニティの 利益を最優先するように、よく考えられた 系統的な方法で実施する必要があります。 この課題について、JSR 348 で取り組んで います。開発者の参加が増えると、新しい イノベーションが Java プラットフォームに 組み込まれる割合も高くなると考えていま す。私たちは、世界中の何百万もの Java 開発者が JCP プロセスに参加できるように するため、あらゆる機会を提供したいと考 えています。 Java Magazine:最後に一言お願いします。 Weir 氏:JCP プロセスとの関わりは楽しい ものです。Executive Committee での役割 は優先度の高い活動ですが、JSR に関して 意見する場合はしばしば社内の JUG を利用 しています。 JSR への参加は私たちだけでなく、幅 広い Java ビジネスに利益をもたらします。 GS Collections Kata について Donald が述 べたとおり、私たちが GS Collections 向け に作ったトレーニング資料を使って、ラム ダ式や Java SE 8 に関する全般的なトレー ニングが行われています。このように、より 大きなコミュニティに貢献できたことをうれ しく思います。 Raab 氏:私も John と同じように、Java に 対する私たちのコミットメントについて述べ たいと思います。私たちは、ニューヨーク やロンドン、香港など、世界各地の JUG と 協力しています。素晴らしいことに、コミュ ABOUT US 変化をもたらす 「 (ラムダ式が)も オープンであり、このオープン性が、イノ ベーションに拍車をかけています。そこに は、実際の問題を解決している有能な人々 の知恵が結集しています。しかし、多種多 様なニーズを満たすには、JSR プロセスを 介して、コミュニティがイノベーションを慎 重に吟味する必要があります。何百万もの 開発者がこれらの標準によって左右されま すから。また、プラットフォームはまとまり のある全体として機能しなければなりませ ん。 JSR プロセスの透明性を高めるために、 JSR 348 で行われた取組みは非常に有益な ものでした。専門家グループに対して、公 開メーリング・リストの使用と公開課題追跡 ツールの管理が義務付けられました。JSR 348 には、すべての JCP メンバーと一般メ ンバーがプロセスを参照し、意見を述べ、 プロセスに参加する機会を持たなければな らないと規定されています。これらの成果 によって JSR プロセスの不透明性が大幅に 改善され、可能な限り幅広いコミュニティ が関与するようになるでしょう。 Java Magazine:JCP への参加方法の改善 については、どのようにお考えですか。 Weir 氏:現在、Executive Committee は 参加を改善する方法についての議論を重ね ています。製薬会社から金融サービスや消 費財メーカーまで、さまざまな企業がかな りの数の Java 開発者を抱えています。個 人が JCP に加入してプロセスに参加するに は、その雇用主による Java Specification Participation Agreement(JSPA)への署 名が必要です。JSPA は法的な契約である ため、何らかの制約が存在する企業もある と考えられ、結果的に、一部の Java 開発 者には JCP に関わる仕組みが存在しませ Java 8 Is Here Steve Meloan:元 C/UNIX ソフトウェア開 発者。Wired、Rolling Stone、Playboy、 SF Weekly、San Francisco Examiner など の各誌に Web やインターネットに関する 記事を執筆している。近著はサイエンス・ アドベンチャー小説の『The Shroud』。ま た、The Huffington Post に定期的に寄稿 している。 blog LEARN MORE • GS Collections • ラムダ式 18
© Copyright 2024 ExpyDoc