パネル・ディスカッション「エンタープライズ・ソフトウェア開発の動向」

QCon Tokyo最後のセッション。以下のような豪華な参加者陣でした。
  • Floyd Marinescu (InfoQのエラい人)
  • Dylan Schiemann(Dojoのエラい人)
  • Randy Shoup(eBayのエラい人)
  • Gregor Hohpe(Googleの中の人、EIPの共著者)
  • Henrik Kniberg(Agileなコンサルタント)
一緒に行ったメンバーとの会話で、なんとなく自分が担当になった雰囲気がしたので、わかる範囲で書き起こしつつ、自分の感想も(発言とは区別がつく形で)書いていきます。メモが中途半端なので、話をつなげるために微妙に補足してたりします。会話口調は、そのときの雰囲気から適当に作ってます。敬称はすべて省略してます。発言者とか間違えてるかもしれないので、その辺ふまえつつ適当に見てやってください。

[まずは、エンタープライズソフトウェア開発の動向について全員が2分ずつ発言。]

Henrik:
プロセスにかかわる立場からの話をしたいと思う。
北欧ではAgileの導入がかなり進んできているけど、Agile導入に際してはScrumをエントリポイントとして採用しているところが多い。こうして、特に従来よく見られていたような、技術チームと業務チームのコミュニケーション上の問題を解決することに成功してきている。
ただし、Agileでこうした問題が解決されるにつれて、その他の問題、例えばコードの品質などの技術的な問題もあらわれてくる。このような問題を解決するために、今後はXPで採用されているようなプラクティスが重要になってくるだろう。
# Scrumは他のAgileアプローチに比べてプロジェクト管理に強いが、技術上のプラクティスはあまり多くないことを受けての話だと思う。

また、企業では、ソフトウェアの開発が終わったあとも色んなプロセスが続いていく。リーンの手法が重要になってきており、ソフトウェア開発だけでなくバリューチェーン全体を改善することが重要になってきている。
これまで企業は、変革を口にするだけでなかなか実行に移そうとしなかった面もあったが、今回の経済危機の影響を受け、話だけではなく実際に実行にうつしつつある。
無駄なプロセスを続ける余裕があった企業も余裕がなくなってきており、組織的な変革がはじまろうとしている。

Gregor:
あんまりネタを考えてこなかった。
立ってのパネルディスカッションってはじめてっす。
立ち飲みみたいっす。
残念なことに、飲み物がアルコールじゃないです。
ってことは、これは立ち話ってうんですかね。
ビールがあると最高だったんですけどね。
とかジョークをいいながら、話のネタを考えていました。

大きなトレンドの話としては、知っていることが何度もまわってくる、ということがある。知っていることが何度もトレンドとしてやってくるのだが、そこには新しい考えが注入されていく。
SOAやクラウドはほんとに新しいのか、との疑問がよくあるのだが、新しいとも言えるし古いとも言える。古いコンセプトに新しい考えが注入されているのだ。こうしたトレンドのサイクルは、ファッションと似ている。色んなものはやがて戻ってくる。これは当然で、実証済みの概念というのは古くても役に立つ。

さて、これは開発者にとってはどんな意味があるのだろうか?開発者はどうすればいいのか?
まずは概念を理解することをすすめたい。サイクルする技術は、詳細はかわってしまうかもしれないが、多くの概念が転用できる。開発者は、転用できるアイディアにフォーカスすべき。重要な概念を概観できることが大事。

Henrik:

[難しくて曖昧な話はわかったから、といった調子で :-)]
結局、具体的にはどういう動向が重要になってくると思う?

Gregor:
人間は未来を予想できない、予想できなくても僕のやり方なら大丈夫なはずなんだけどね! :-)
あえて新しいトレンドを推定するなら、ランタイムの重要性の高まりかな。
今までランタイムは見えないもので、みんなはモデルや言語なんかの表面的な部分に注力してきたけど、クラウドの登場などでランタイムが重要になってきている。
ソフトウェアを書くのは全体の一部、という話がHenrikからあったけど、組織プロセスの観点だけでなく、ソフトウェア実行の観点でも同じことが言える。ソフトウェアを書き終わったからといって、全体のほんの一部しか終わったことにならない。

Randy:
トレンドとしては、3つあると思う。

まず1つは、大きな企業のプラクティスが小さな企業に浸透してきているということ。分散化、パーティショニングのような課題を、小さい企業も意識しはじめている。

2つめは、アプリケーションの開発方法。
たいていの企業では色んな言語やプラットフォームでシステムを作ろうとしており、ヘトロジニアスな環境が多くなってきている。多様な選択肢があるが、最適なものを見極めることが重要だ。

3つ目は、デプロイメント、つまりアプリケーションの展開に関するもの。
クラウドが一番明らかな例で、これまではコンシューマ向けにしか使われておらず、クラウドのプレーヤーも少ないが、これからは銀行や大企業、政府機関などが内部にクラウドを持つようなことも起きてくるのではないか。また、クラウドが浸透していくと、中小企業にまでその利用が広がっていくだろう。

Dylan:
2つの大きな相反する動き、統合と細分化に注目したいと思う。
例えばJavaを見ていくと、90年代から統合化がどんどん進んでいった。
# この辺よくわからなかったっす
# 統合化されて肥大化し、使いづらくなると、小さなプレイヤーにチャンスが来るとかそんな話をしていたと思う

OSSでは細分化が進んでおり、ものすごくたくさんのプロジェクトやソフトウェアが生まれている。一方でOSS同士のアライアンスも増えてきており、統合化も同時に展開されているという興味深いことが起きている。これは非常にエキサイティングだ。

Floyd:
FowlerとRod Johnsonのかわりにきました。彼らはもういなくなっちゃったからね。
Martinは、プロジェクトに常に1つの言語を使うのではなく、目的にマッチした言語を組み合わせて使う、というようなことを言っていた。Rodは、リーンなツールが必要になってきているという話をしていた…と思う。なんかこんな感じだったよね?北京ではこんな話をしていたと思うんだけど、あってる?

Dylan:
ともあれ、すべての根底にある流れは、Webがアプリケーションのプラットフォームになってきている、ということだ。クラウドコンピューティングもRIAのようなものも、すべてこの流れから出てきたものだ。

ところで、Javaのコミュニティってつまらなくなってない?あきてきた人?
[手をあげて賛成者を探す。結構手があがる]

これは、Javaを使うタスクが安定化してきたということだ。2000年頃は、色んなWebのフレームワークが出てきていた。これはつまり、Javaを使ってWebアプリを作るのが新しかったということだ。

技術がかわるとまたいろいろとエキサイティングなものが出てくるだろう。クラウドもその端緒になると思う。Javaで標準かが次々進んだように、クラウドのプログラミングモデルを統一化する動きがはじまるかもしれない。みんなベンダーにロックインされたくないだろう?

クラウドコンピューティングってのはすごく重要な流れだ。これによって、中小企業が効果的に色々な仕事ができるようになるだろう。Linuxやコンフィグファイルを気にしなくてもよくなるんだ。低コストで色々できるようになる。

Gregor:
ここいらで、今まで出た話を統合してみたい。
フラグメンテーションや統合の話、クラウド、開発者のエンパワーメント、これらはつながっていると思う。
# 開発者のエンパワーメントは、Rod Johnsonがセッションの前半であげたキーワード
開発者の力が増すという流れと、クラウドは同じ方向を向いていると思う。開発者がまたガレージで開発を始められるということだ。ここのところあがってきていたWebに対するインフラの要求レベルに、やっとおいついてきた。

こういう、土俵が平らになるような時期が訪れることがあるが、こういう時にはイノベーションが次々とおこる。

Floyd:
ここで、Rodが持っていた、少し違う意見を紹介したいと思う。Rodは、GrailsはJavaコミュニティにおける重要な進展だといっていて、Javaはまだまだエキサイティングだと言っている。
SpringSourceもクラウド対応機能みたいなものをもうすぐリリースするそうだ。

Gregor:
ちゃんと機能するものを作るのが生活の糧であるなら、Javaにとって安定はいいことかもしれない。安定することによって、新しいことをする余裕が出てくる。細かなバグをおいかけたりしなくてもよくなる。こういう意味で、Javaの安定にはいい面も悪い面もあるだろう。

Dylan:
今や、Javaは世界のFortlanやCOBOLのようになってきているよね。

[ここで質問タイム、外国の方が英語で質問]

質問者:
Javaコミュニティというと、Webアプリ開発者ばかりが対象として語られることが多いけど、JavaコミュニティはWebだけじゃない。WebではないJavaコミュニティの人がこういう場にきていないのは残念なことだ。

Randy:
eBayはフロントエンド以外はWebとは関係ない処理をたくさんやっているよ。

Gregor:
自分もそう思う。実際のシステムではWebは一部のみ。Webの定義にもよるけど、HTMLを扱っているのがWebだとすると、システムの大半はHTMLとは関係ない。
バックエンドでは、SOAや コンポーネント化、RESTのような技術を扱っているのだろうけど、これらもWebと似たような課題を持っているのではないか?Web的な考え方がシステム全体に広がってきているのではないか?

Randy:

たしかに分散システムという意味では同じような特性を持っていると思う。とはいえ、銀行や政府のシステムとeBayのようなシステムでは要件はかなり異なってくる。

Floyd:
Webは新しいプラットフォームなのでしょうがない面もある。デスクトップJavaはずいぶん前に死に絶えてしまったし。

質問者:

確かにそうかもしれない。JavaがWebを捨ててしまえば生き残れないだろうから、仕方ないとは思う。

Dylan:
ヘテロな環境が増えてきたので、最適なものを選ぶことができるようになってきた。
# これ、なんだったか思い出せない...

[次の質問。]

質問者:

Scalaが好き!Scalaは分散処理などの面で面白いと思うけど、どう思う?
# すごいはしょってます...

Randy:
実際に使ったことはないが、Scalaは良いと思う。正しいツールを正しい仕事のために使う、という話で考えると、すばらしいツール。Erlangにも興味深いアプリケーションができてきているし、特定のタイプの作業に特化した言語を適切な場所に使うのが重要になってくる。

Gregor:
一貫性・分散性を考慮すると、もっといい言語がほしいという気持ちはある。Javaはこの辺りを考えると、あまり適していない部分がある。
# このあたり、C#がLINQや関数的な要素を入れていろいろやっている話をしていたが、どうつながっているのかよくわからない。

僕はツールに興味があって、コンパイラとかエディタとかIDEとか、そういうものが生産性を高めてくれることを重要だと思っている。言語を切り替えるとツールも切り替えることになってしまうので、新しい言語は5倍くらいの表現力がないと、ツールの変更で損なわれるものを埋められないんじゃないかと思う。

Dylan:
僕はviだから大丈夫!

Gregor:
私はNotepadだ!

Language Workbenchはこういうのをうめてくれるのかもしれないが、うまく動くようになるまでにはもう少しかかりそうだ。

Randy:
.NET開発者とかJava開発者とかいわなくなったのが、最近の状況を表している。1つのシステムを構築するにも、色んな言語やツールを使わなければならなくなっているということだ。Scalaについて言えば、Scalaの専門家とまではいかなくても、色々知ってるジェネラリストが必要。どの分野にどの言語を使えばいいか、判断できる人が必要だろう。そこで、より深く専門的な知識が必要になれば、言語の専門家が必要にもなってくるだろう。

Gregor:
賛成でもあるし反対でもある。どういうアイデアを転用できるかを知るのが大事。デザインコンセプトを知るということ。
ところが実際に、言語を使いこなす方法をツール・パターン・ベストプラクティスを含めて理解するまでには時間がかかる。Javaで我々は10年かかった。
あまりに多くの言語があふれると、開発者は大変になる。現代では、最大の制約は人間の学習能力になっている。現段階で存在する大量の言語は、既に一人の人間が理解できる範囲をこえている。色々な言語やツールに触れていると、深く使いこなすことができなくなるかもしれない。これはもしかしたら問題にならないかもしれないが、考える必要はあると思う。

Dylan:
ツールがやってくれるんじゃね?

Others:
ツールを選ぶためのツールがいるのか!
そうなったらコンサルタントいらないね!
ハハハハ!

[次の質問。]

質問者:
言語・アーキテクチャやプロセスに色んな変化がおきているが、テストについてはあまり変化がないように思える。テストの変化についてはどう考えている?また、どうなっていくべき?

Dylan:
テスト用のクラウドサービスやブラウザモックもある。社内でできないようなテストを行うサービスもできてきている。AjaxのテストにはSeleniumやWindmilもある。テストツールはいつも少し遅れて出てくるが、だいぶ追いついてきた。

Gregor:
テストには2つの大きな目的がある。正しいかどうかを確認するためのテストと、開発の一環としてのテストだ。開発の一環としてのテストには、TDDやBDDなどの革新がある。
これは、ツールの問題ではなく、使い方、使いこなし方の問題だ。JUnitが出てから8年たつが、このような新しい使い方が出てきている。

もう1つ、ランタイムへのシフトがあげられる。ランタイムで設定される様々なプロパティや環境情報をテストする必要がある。

職業としてのテストの輪郭はぼやけてきている。これは、アーキテクトなどのほかの職業にも言える。テスタの役割も変化してきていて、自動化できないところをやることが重要になっている。テストはかなり自動化されてきているので。実験的なテストなど、自動化できないテストをうまくできることが強みになってくるだろう。

[次の質問。]

質問者:
典型的な業務(会計とかなんとかとか)の用語がほとんど出てこなかったが、このような業務に関わる人はあまりいないのだろうか?最初の話にも少しあったが、業務側と技術側がわかれているような気がするがこれはいいことか?エンジニアであれば、どちらもできるべきじゃないのか?
こういう問題はあると思うか?あるとしたら、どういう風に解決しているか?

Henrik:
これは、問題だと思う。しかし、リーンやScrumを使うことでビジネス側とつながってきているので、どんどん解決に向かっている。

Gregor:
Fowlerはもう語り尽くしたから言わなかったんだと思うよ :-)
問題はあると思う。これに対する解決策としては、自分はテスティングをあげるようにしている。仕様上の問題点などは、テストとして起こして、みんながそれを見ることができるようにしている。今の仕事上、業務というとHTTPヘッダとかそういうテクニカルな話になってしまうんだけど。

Randy:
eBayの経験からすると、一番うまくいったプロジェクトは、ビジネスチームと技術チームがタッグを組んだもの。これらの間の乖離がひどいものは成功していない。

Dylan:
私もCEOをしているのだが、ビジネス的なバックグラウンドを持つのはいいこと。なぜそういう要件が必要になるのかがわかるようになるし、自分たちのしていることがどのような収益を生むのか、なども理解できるようになる。事業側の立場にたって考えることは必要。

Gregor:
極論すると、ビジネスユーザーがVBマクロを書いたときに、一番うまくいっていた。マクロのスクリプティングは強力だ。
しかし、(例えばVBが新しいバージョンになった時などに)これらをどうやって拡張するのか、再利用するのか、といった問題は解決されていない。

[このあたりで時間切れ。ありがとうございましたー。]

目次:
QCon Tokyo 2009に行ってきた

コメント

u1hoshino さんのコメント…
乙です!
burabura さんの投稿…
あざっす、そちらも進めているようで!
ouobpo さんの投稿…
GJです! こちらもがんばります・・・
burabura さんの投稿…
期待してます :-D
burabura さんの投稿…
そういや、arclampの引用が自分のからだった。なぜこんなのを使ったのだろうか…。
burabura さんの投稿…
うは、鈴木さん、arclampで書いてくれてる。こんなしょぼいの紹介してくれてありがとうございますm(__)m