5
ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014 14 blog COMMUNITY JAVA TECH ABOUT US JAVA IN ACTION J ohn Weir 氏は Goldman Sachs のアプ リケーション・プラットフォーム担当グ ローバル責任者です。Goldman Sachs は 2011 年に Java Community Process (JCP)の Executive Committee に選出さ れており、Weir 氏はその代表を務めていま す。Weir 氏はかつて、クレジット・デリバティ ブに関する FpML Standards Committee と FpML Architecture Committee で JCP Executiveシリーズ Goldman Sachs、 GS Collectionsでラムダ式を活用 Goldman Sachs の John Weir 氏と Donald Raab 氏が、GS Collections の開発、Java SE 8 のラムダ式による影響、さらには JCP での活動に ついて語ります。 STEVE MELOAN 写真:LAURA BARISONZI/GETTY IMAGES Goldman Sachs の ニューヨーク支社で 話す JVM アーキテク チャ・チーム・マネー ジャ、Donald Raab 氏 (左)とアプリケーショ ン・プラットフォーム 担当グローバル責任 者、John Weir 氏。 Java 8 Is Here

Goldman Sachs、 GS Collectionsでラムダ式を活用

Embed Size (px)

Citation preview

Page 1: Goldman Sachs、 GS Collectionsでラムダ式を活用

ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014

14

blog

COMMUNITY

JAVA TECH

ABOUT US

JAVA IN ACTION

John Weir 氏は Goldman Sachs のアプリケーション・プラットフォーム担当グローバル責任者です。Goldman Sachs

は 2011 年に Java Community Process(JCP)の Executive Committee に選出されており、Weir 氏はその代表を務めています。Weir 氏はかつて、クレジット・デリバティブに関するFpML Standards CommitteeとFpML Architecture Committeeで

JCP Executiveシリーズ

Goldman Sachs、GS Collectionsでラムダ式を活用Goldman Sachs の John Weir 氏とDonald Raab 氏が、GS Collectionsの開発、Java SE 8 のラムダ式による影響、さらには JCPでの活動について語ります。STEVE MELOAN写真:LAURA BARISONZI/GETTY IMAGES

Goldman Sachs のニューヨーク支社で話す JVMアーキテクチャ・チーム・マネージャ、Donald Raab 氏(左)とアプリケーション・プラットフォーム担当グローバル責任者、John Weir 氏。

Java 8 Is Here

Page 2: Goldman Sachs、 GS Collectionsでラムダ式を活用

ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014

15

blog

COMMUNITY

JAVA TECH

ABOUT US

JAVA IN ACTION

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年にマネージング・ディレクターに就任しました。

Java Magazine:GS Collections の発端についてお聞かせください。この取組みはいつ開始され、当初の目標はどのようなものだったのでしょうか。Raab 氏:GS Collections は2004 年、CARAMELと呼ばれるGoldman Sachs の社内プロジェクトとして開始されました。CARAMELという名前は、Collection(コレクション)、Array(配列)、Map iteration library(マップ反復ライブラリ)に由来します。当時、私たちは 10 ~ 100GBレベルの非常に大きな Java ヒープを扱っておりこの領域内で大規模なコ

レクションを操作して、数百万から数億もの要素を持つリストやセット、マップを処理していました。コードベースは非常に膨大で、数千からときには数万もの反復パターンが手書きの for ループで実装されていました。 Java SE 8 がリリースされるまで、コレクション分野には高機能な API が存在せず、開発者は何度も何度もパターンを再作成しなければなりませんでした。私たちの目標は、開発者のコード内で "どうやって "から" 何を "を切り離すことで重複コードを減らす関数型 API を提供することでした。また、Fork/Joinライブラリによる並列性を活用することで、開発者が複数のプロセッサ・コアを使用してパフォーマンスを最適化できるようにしたいとも考えていました。GS Collections 向けの API には、Smalltalk での私のプログラミング体験が大きく影響しています。Smalltalk にはselect、reject、collect などの便利なメ

ソッドがあります。長い年月をかけて、flatCollect やgroupBy、partition、zip などのメソッドを追加しました。これらのメソッドは、Haskell、Ruby、Scalaといった言語で得られた経験が影響しています。そのほかに、HashMapや ArrayList、HashSet などの JDK Collectionsクラスを、最適化したもので置き換えています。GS Collectionsは、大規模と小規模の両方のパフォーマンスに合わせてチューニングされています。最新バージョンである Java SE

8 のラムダ式に対応する準備はできていますが、Java 5 から Java 7まででも動作します。Java Magazine:内部反復がGS Collections のキーとなる概念です。内部反復が非常に効果的である理由とは何でしょうか。Raab 氏:内部イテレータは、操作しているコレクションの実装の詳細を隠して、エラーを減らします。この内部イテレータのおかげで、開発者は処理対象の各種データ型を最適化するという義務から解放されます。内部イテレータは、実行すべき処理を受け取ると、データ・コレクション内のすべての要素に対してこの処理を適用します。たとえば、あるコレクションを別のコレクションに変換する場合、ターゲットとソースのサイズが同じだと分かっていれば、アルゴリズム内で事前にサイズを設定できるため、開発者が実装の詳細を扱う必要はなく

ホワイトボードに書いた問題に取り組むWeir 氏とそれを見つめるRaab 氏。

実現性の確認

「 JSRプロセスを介し

て、コミュニティがイ

ノベーションを慎重に

吟味する必要がありま

す」

Goldman Sachs、アプリケーション・プラットフォーム担当グローバル責任者、John Weir 氏

Page 3: Goldman Sachs、 GS Collectionsでラムダ式を活用

ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014

16

blog

COMMUNITY

JAVA TECH

ABOUT US

JAVA IN ACTION

なります。このアプローチによってコードが簡素化され、再利用しやすくなります。Javaでは、ほとんどの開発者が先行反復

と呼ばれる方法を実装しており、この場合、計算は即座に実行されます。しかし、わずかに遅れて処理が実行される遅延方式で計算を実行する方が便利な場合もあります。開発者にとってこのような処理の実装は容易ではありませんが、内部反復を使用すると、処理の詳細はコレクション・クラスによって内部で対処されます。また、内部反復はコード保守にも大きな効果を発揮します。大規模なコードベースがずっと読みやすくなるため、長いアプリケーションの寿命を考えると、生産性への影響はとてつもなく大きいと思われます。Java Magazine:Java SE 8 のラムダ式と

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パターンは次のようになります。

その一方で、Java SE 8 を使用したGS Collections の Select パターンは次のようになります。

Java 8 にはもう1つ非常に魅力的な仮想拡張メソッドというものがあります。これも、GS Collections にとって有用です。この機能はインタフェースへの動作の追加を可能にしますが、デフォルトのメソッドと動作を組み込むことで、GS Collections のテスト

階層内の重複コードの量を減らせます。また、フレームワーク全体を通じて、さまざまなテスト関連事項を組み合わせてマッチングすることができるようになります。Java SE 8 の機能であり、ラムダ式と密な関係にあるメソッド参照も、GS Collectionsに効果があります。メソッド参照を使用することで、より簡潔で読みやすい形式で関数型 API を利用できるようになります。次のメソッド参照コード例は、GS Collections Kata Java 8 Solutions から抜粋したものです。

メソッド参照によって、保守とレビューが無駄がなくすっきりと簡単になります。これらのイノベーションを活用するため、言語

List<Integer> results = new ArrayList<>(); for (Integer each : list) { if (each > 50) { results.add(each); } }

list.select(each -> each > 50);

/** * 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); }

一息入れながらプロジェクトを仕上げるWeir 氏とRaab氏。

Page 4: Goldman Sachs、 GS Collectionsでラムダ式を活用

ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014

17

blog

COMMUNITY

JAVA TECH

ABOUT US

JAVA IN ACTION

と 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 に取って代わるメソッドの問題を発見しました。時間をミリ秒単位

で抽出するこの新しいメソッドの実行にはおよそ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:標準の推進とイノベーションの推進のバランスは、どのように取れば

良いとお考えですか。Weir 氏:誰もがイノベーションを求めており、イノベーションは常にそこにあります。イノベーションは、開発者が問題を解決するための必須要素なのです。CARAMEL からGS Collections への発展については先ほどDonald が話しましたが、このソフトウェアは、簡単で透明性が高く、より魅力的なAPI を求めて開発者が努力した結果の産物です。Java エコシステムの体制は非常に

ラムダ式がコードに与える影響を確認するRaab 氏とWeir 氏。

Page 5: Goldman Sachs、 GS Collectionsでラムダ式を活用

ORACLE.COM/JAVAMAGAZINE ///////////////////////////// MARCH/APRIL 2014

18

blog

COMMUNITY

JAVA TECH

ABOUT US

JAVA IN ACTION

オープンであり、このオープン性が、イノベーションに拍車をかけています。そこには、実際の問題を解決している有能な人々の知恵が結集しています。しかし、多種多様なニーズを満たすには、JSRプロセスを介して、コミュニティがイノベーションを慎重に吟味する必要があります。何百万もの開発者がこれらの標準によって左右されますから。また、プラットフォームはまとまりのある全体として機能しなければなりません。JSRプロセスの透明性を高めるために、JSR 348で行われた取組みは非常に有益なものでした。専門家グループに対して、公開メーリング・リストの使用と公開課題追跡ツールの管理が義務付けられました。JSR 348 には、すべての JCPメンバーと一般メンバーがプロセスを参照し、意見を述べ、プロセスに参加する機会を持たなければならないと規定されています。これらの成果によって JSRプロセスの不透明性が大幅に改善され、可能な限り幅広いコミュニティが関与するようになるでしょう。Java Magazine:JCP への参加方法の改善については、どのようにお考えですか。Weir 氏:現在、Executive Committee は参加を改善する方法についての議論を重ねています。製薬会社から金融サービスや消費財メーカーまで、さまざまな企業がかなりの数の Java 開発者を抱えています。個人が JCP に加入してプロセスに参加するには、その雇用主による Java Specification Participation Agreement(JSPA)への署名が必要です。JSPA は法的な契約であるため、何らかの制約が存在する企業もあると考えられ、結果的に、一部の Java 開発者には JCP に関わる仕組みが存在しませ

ん。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と協力しています。素晴らしいことに、コミュ

ニティは大規模で多様性に富んでいます。また、先日はOpenJDK への参加契約にも署名しました。直接的な貢献をしたいと考えています。このプロセスを通じてオープンソース・コミュニティに恩返しできればと思います。Javaプラットフォームは、Goldman Sachs のインフラストラクチャにとって非常に重要な要素です。コミュニティや弊社の利益のため、今後もJava が進化、発展し続けるよう全力を尽くすつもりです。</article>

LEARN MORE• GS Collections

• ラムダ式

Java 8 Is Here

MORE ON TOPIC:

Steve Meloan:元 C/UNIXソフトウェア開発者。Wired、Rolling Stone、Playboy、SF Weekly、San Francisco Examiner などの各誌にWebやインターネットに関する記事を執筆している。近著はサイエンス・アドベンチャー小説の『The Shroud』。また、The Huffington Post に定期的に寄稿している。

変化をもたらす「 (ラムダ式が)も

たらすメリットは

大きく、たくさん

のコードを削除

できると思いま

す。

おそらく20 ~

30%ぐらい削減

されるでしょう」

Goldman Sachs、JVMアーキテクチャ・チーム・マネージャ、Donald Raab 氏