Typemock: その過去・現在・未来
Eli Lopian氏率いるTypemock社の過去・現在・未来について、インタビュー形式にて記します。

作者 Ted Neward , 翻訳者 白石 俊平 投稿日 2007年10月1日 午後9時34分
12年前、Sun Microsystemsはちょっとしたファンファーレと共に、よりダイナミックな"生きた"Webページを作成するのに使える、新しいプログラミング言語と環境を発表しました。現在ではもちろんJavaプログラミング言語はユビキタスなツールです。Webページをよりダイナミックな環境にするというだけではなく、それらのページを生成し排出し(サーブレットとJSP)、ビジネスロジックのトランザクショナルなプラットフォームを提供し (Enterprise Java Beans:EJB)、メッセージングシステムにアクセスし、(Java Message Service:JMS)、リレーショナルデータベースにアクセスし(JDBC)、メインフレームにすらアクセスします(Java Connector API)。そしてこのストーリーはまだ終わっていません。Javaをとりまくコミュニティは、オープンソースの成果とプロジェクトを通して日々成長し、かつ、"公式の"JavaプラットフォームもJava Community Processを通じて成長、拡大を続けています。
6年前、Microsoftは盛大なファンファーレと共に、プログラミングが必要な全てのシチュエーションにおいて使える新しいプログラミング言語のセットと環境を発表しました。.NETは二度のリリースのあと行われた一度のメジャーリリースにより、クライアント層とサーバ層に多くの新機能を加えるのみならず、実行環境と最も人気のある三つの言語(C#、C++、Visual Basic)に対して大きな変更を行いました。トランザクションのサポート(System.Transactions)、ジェネリクス(C#、Visual Basic共に)、ディレクトリサービス、マネジメント(WMI)等々です。そしてこのストーリーはまだ終わっていません。Microsoftは次のリリース(Vistaに搭載される.NET Framework 3.0)で複数の新しいテクノロジーの搭載を計画していますし、コミュニティも急速に成長しており、.NET環境はオープンソース、商用問わず、新しいプロジェクトやアイデアとともに拡大していきます。
数年の間、これらの環境それぞれについて多くの議論がありました。その多くはどちらか一方にとって非常に怒りを掻き立てられるようなものであり、そしてそのほとんどは無益なものでした。結局のところ、"こちらの言語はあなたの言語より優れている"とか、"こちらのプラットフォームはあなたのプラットフォームより速く動作する"とか、"お前ら最低だ"などのやりとりは、カクテルパーティやカンファレンスのパネルディスカッションなどで話し合われる分には楽しいのかもしれませんが、それらはソフトウェア開発を意義あるものにするための生産的な議論ではありません。政争、駆け引き、傷付け合いが一通り済んだ後、Javaと.NETが協調する事について意義のある議論をしようとすると、たいてい議論の方向性は"Webサービス"、"エンタープライズサービスバス(ESB)"、"サービス指向アーキテクチャ(SOA)"といった、ほとんどは具体的なものが見えない、非常に上流のバズワードの議論に終始することになります。その後上流の議論が一通り済んで、実装レベルに踏み込んだなら、SOAP、WSDL、WS-プロトコルだとか、メッセージを介してデータを交換するだとか、CLR内でJVMをホスティングするだとか、その逆だとか、そういう会話になるのが典型的です。
一般的なフレーズに言い換えれば、"あなたは、どうやるか、について論じ、進めてきた。なぜそれをすべきか、について論じることも無く。"といったところです。
歴史的に、Java/.NET間の相互運用性についての議論は、.NETとJavaのシステムのどちらも持ち、対話させることが必要な特定の企業においてのみ発生する、"必要なときのみ"の相互運用性という見出しの元でしか行われてこず、アーキテクチャの話題の二の次とされていました。しかし、それらの議論から抜け落ちているものがあります。それは、開発者には「必要だから」という場合でなくともJavaと.NETをともに動作させたい場合があり、その動機についての議論です。
一見して、これは危険な話題です。あるプラットフォームが他方よりも何かしら"優れている"などの示唆に富む意見は、他方のプラットフォームで"○○が不可能だ"なんてうっかりほのめかして完全に怒らせるというよりはましなものの、えこひいきだとか、無知だとの非難を招く恐れがあります(これでは、そもそも"優れている"の意味するところを理解するという、基本的な問題さえ無視されてしまいます)。そうした意見を軽視したり敬遠しようとしたりするくらいなら、むしろ正面から向かい合って見ましょう。そうした非難、批判は、無視すべきものではなく、実際、そうした意見がどこから来るのか、と言ったより大きな議論の一部として、喜んで受け入れるべきなのです。とは言っても、開かれた議論を行うこと、アイデアを検証すること、読者が自身の(批判的な)意見を持つのを許すことは依然として重要です。
Java/.NETの相互運用性について語る記事シリーズ第一弾として、我々が本当にやろうとしていることはそういうことです。
* * *Javaと.NET両方についてよく考えるとき、より検討に値するいくつかのシナリオが思いつきます。
良くも悪くもMicrosoft Officeは、コンピュータの歴史上一番とまでは言いませんが、(より多くのコンピュータにインストールされているという意味で)人気のあるソフトウェアプラットフォームのうちの一つです。Officeは現在では登場してから10年を過ぎ、ユーザが多種多様なデータを入力し、操り、閲覧することのできる、パワフルなプラットフォームの代表格です。そうしたユーザにとって興味深い、膨大な量のデータが、現在J2EEで構築されたエンタープライズサーバ内に存在しています。それらのデータをOfficeプラットフォームに取り込んで簡単に操作し、分析できるとすれば、素晴らしいことです。さらに面白い方法としては、既にSpringやその他の軽量Javaコンテナで書かれているビジネスロジックを、プロセスのコミュニケーションツールを用いて、Officeプラットフォームから利用するというものがあります。
MSDNマガジン2006年10月号(http://msdn.microsoft.com/msdnmag/issues/06/08/default.aspx(英語)にてオンラインで見ることができます) には、Officeによる開発に関するいくつかの記事が掲載されており(こうした記事が掲載される理由としては、多くの人がOfficeのプログラマティックな可能性にほとんど親しみがないという背景があります)、"Officeを開発プラットフォームとして利用するためにあなたが知るべきこと (What You Need To Know About Using Office As A Development Platform)"という記事中の図で、Officeプラットフォームの持つ能力が全て一覧にされています。その完全な一覧をまたここで繰り返し載せるのではなく、Officeの拡張性のうちJavaプラットフォームとうまく協調する点をいくつか整理してみましょう。
Officeはまた、こうしたプログラマティックな要素により書かれ/配布されたコンポーネントやドキュメントに対して、配布を楽にするいくつかのサポートも提供しています。多くのケースにおいて、こういったコンポーネントの機能をアップデートし配布する場合も、共有のダウンロードサーバに何かを置いてリリースするのと同じくらい簡単です。明らかに、こうした利用法はOfficeのライセンスコストが悩みの種になりそうですが、しかし幸運なことに、ほとんどのビジネス環境にはすでにOfficeがインストールされているので、全く、とは言わないまでもコストの大幅な削減にはなります。
Windows Workfrowは、.NET Framework 3.0の一部としてリリースされた新しいフレームワークで、Windows Vistaに搭載されています。ワークフローとは、核となるビジネスプロセスの機能 - 小さなスケールではWebサイトのインタラクションだとか、大きなスケールでは保険金請求の届出を行うための処理のステップだとか - を、開発者以外の人間が作成したり、見たり、追跡したり、編集したりする手段を提供することを目的としています。ワークフローはプロセスの論理的なステップを表す複数のアクティビティからなり、ワークフローの開発者(従来は.NET開発者、もしくはドメインエキスパート)はそのデザインを行うためにフローチャートに似た環境を用います。この環境は普通はVisual Studio内で利用できるのですが、カスタムアプリケーション内で利用することもできるため、企業はこれらの環境を従来の"プログラマのための"ツールセットから切り離して、ワークフローデザイナーを置く事ができます。ワークフローデザインの結果生成された、XMLフォーマットもしくはプログラムコードによる成果物は、ワークフローコンパイラによって通常の.NETクラスにコンパイルされます。そしてそれはワークフローランタイムにより処理され、 ASP.NET、コンソールアプリケーション、もしくはGUIアプリケーションを含む様々な環境の上で動作します。ワークフローはシーケンシャルに、もしくは外部のステートが変化したときに、時には長い時間をかけて動作します。
ワークフローランタイムが、その実行環境やコンテキストに関しては高い柔軟性を持つよう設計されていることを踏まえると、ワークフローとSpring(もしくは他のJ2EEコンテナ)を様々な形で結合して使用するというアイデアがすぐに思いつきます - ワークフローランタイム内でSpringコンテナを実行し、SpringのBeanを呼び出すカスタムのアクティビティを作成してビジネスに作用させたり、もしくはSpringのBean内でワークフローランタイムを実行し、ワークフローの結果をSpringで受け取ったり - となると、答えはリモートコールとなります。特に後者の場合は、エンドユーザは直感的に利用できる環境を使用してビジネスプロセスのデザインを行え、しかも従来からあるエンタープライズサーバの世界でそれを動作させることができます。同様に、ワークフローの愛好家は既に、ASP.NETアプリケーション内でWEBページのナビゲーションを構成するためのワークフローの使用方法(Strutsのアクションマッピングファイルとは全く異なる)について述べています。ワークフローをサーブレットコンテナ内で動作させるには同様のアプローチが必要になるでしょう。そして、サーブレット/JSPページの間のフローを視覚化しますが、現在のところはXMLのシンタックスによる判りにくいものになるでしょう。
最後に、本当に大事なことを言い忘れていましたが、.NETとJavaをともに利用するケースとして最も有望なのは、新しいWindows Presentation FoundationテクノロジーをリッチでパワフルなUIとして、豊富かつパワフルなJavaサービス(Spring、EJB、ほかいろいろな組み合わせ)が提供するデータモデルの上で使用するという方法です。XAMLをベースとした、WPFの宣言的プログラミングモデルは、つい最近まで行われてきたコードベースのUIプログラミングモデルとは全く対照的で、多くの場合、現在のSwingやSWTよりも複雑なユーザインターフェースの作成をするのが簡単です。そして、XAMLはテキストベースのフォーマットがゆえに、現在HTMLで行われているような、XAMLを動的に生成し、ダウンロードしてクライアント層で実行することが簡単に実現可能です。
正統派のシナリオとしては、WPFのフロントエンドがJavaのバックエンドと対話をする際、Windows Communication Foundation(WCF) -Microsoftの新しいコミュニケーションパイプラインで、あらゆる分散プログラミングを一つのフレームワーク - を使用するというものです。加えて、最新のWS-*仕様の多くをサポートするために、WCFは様々な方法でコミュニケーションを行うためのリッチで拡張可能なモデルを提供しています。その中にはREST-fulフォーマット(時にPlain Old XMLやPOXと呼ばれる)や、UDPのようなほかのトランスポートメディアを利用できる可能性も備えています。Sunは、Tangoプロジェクトにおいて、このアプローチをより実用性の高いものにしようとしています。同プロジェクトは、設計のゴールとして、WCFとのシームレスな統合を明確に掲げています。
* * *これでJavaと.NETの相互運用のシナリオを全て挙げきった、とはとても言えたものではありません。実際は、この連載がほどよい期間で収まるようにするため、我々はいくつかある他の可能性にはあえて触れませんでした。
などなど・・・
取ってつけたような、そしてやたらとセンセーショナルに聞こえることでしょう。こういったシナリオはマーケティングのことなど頭から抜けていて時間がかかりすぎる上、あまり意味がありません。なぜJavaが数式のエンジンを持っているときにExcelで頭を悩ますのでしょうか?JAX-WSがあるのに、なぜ WCFで頭を悩ますのでしょう?なぜ、Java3Dがあるのに、WPFで頭を悩ますのでしょう?えこひいきだとか、見え透いたマーキテクチャ (MarketingとArchitectureを組み合わせた造語で、大したことではなくても、宣伝のために先進技術らしく見せかけること)だとか非難されないように、我々は全てにおいて率直で、明快でいるようにします。.NETならこれができる、Javaならこれができる、逆もまた然り。ただしかし、一つの事実にだけは特に誠実でいるようにします:どちらのプラットフォームにも得意分野があります。開発者の皆さんが心を開いた議論を支持してくれるならば、どんな政治的教義に身を寄せていようと気にはしませんが、お互いの長所を尊重することでとても素晴らしい利益を得ることもあるでしょう。もしくは、カール・マルクスの言葉を引用しましょう、"From each platform, according to its abilities, to each project, according to its needs."
原文はこちらです:http://www.infoq.com/articles/java-dotnet-integration-intro
(このArticleは2006年10月5日にリリースされました)
この論文では、仮想化やクラウドサービスの複雑なメリットと実世界における応用を検討します。さらに重要なこととして、Contegixが複雑な問題の解決に仮想化を実装している方法や、仮想化を使うべきではないケースについて詳細を提供します。
Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとして、ライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリです。私たちはNeverBlockプロジェクトのMohammad A. Ali氏とRevactorライブラリのTony Arcier氏に話を聞きました。
システムの保守容易性や拡張性を確保するためのベスト・プラクティスに関する記事は数多くありますが、この記事では避けた方がいい、いくつかの悪習慣(ワースト・プラクティス)を強調します。
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
No comments
返信