ObjectSquare [2000 年 11 月号]

[OOエンジニアの輪!]


OOエンジニアの輪!

〜 第6回 平鍋健児さんの巻 〜


今回のゲストは、株式会社永和システムマネジメントの平鍋健児さんです。
平鍋さんは XP(eXtreme Programming) の ホームページと XP-jp(extremeprogramming-jp@esm.co.jp)というメーリングリストを運営されています。前回の長瀬さんに続き、 XP の話題で盛り上がりました。

尊敬する人 キースジャレット
好きな言葉 separation of concerns(関心事の分離 - ダイクストラ)

株式会社永和システムマネジメントのご紹介

--- 最初に、永和システムさんについてご紹介願えますか?

福井にある150名くらいの独立系ソフトハウスです。主な業務は金融、医療、オープン系の3つですね。私は「情報テクノロジ」というオープン系のセクションで、20名くらいでオブジェクト指向してます。

--- Jude の開発もされてますよね。

ええ。Judeはいろんな方に興味を持って頂き、嬉しく思っています。でもJavaで書いたのは失敗でしたね。 なんていうか、デスクトップで使うにはねっとり感があるっていうか。やっぱりネイティブコードの方が速いですからね。Jude のオープンソース化計画もあるんですよ。まだ未定ですが。最近やってる体力がなくなってきちゃって、オープン化したらみんなやってくれるかなって。自分なりにもチームとしても、Judeという題材で随分勉強になった部分も多いですし。

--- 現在描けるのは何ですか?

ユースケース図とクラス図が書けます。今はアクティビティ図とコラボレーション図のあたりをやってますね。あと、Java のリバースができます。将来的には Javaコード自身がモデルデータのリポジトリってしたいですね。


ソフトウェアは工学を越える!?

--- 今回は長瀬さんからご紹介いただいたのですが、お二人のご関係は?

えーと、長瀬さん主宰のUML-jpのMLに入っていて、それで知っていました。JPLoP でパターンハッチングの講演をして頂いた時や、今年の ObjectDay の時にもお会いしています。そうそう、確か最初に長瀬さんを意識したのは、私が XP を翻訳したかった時。何社か出版社に問い合わせたら既に長瀬さんという方がやられているよって聞いたんですよ。

--- XP のホームページとメーリングリスト、あの動きは速かったですね。

そうですね。amazon.comで注文して本が届いて見た瞬間、俺が訳すべきだ!って思ったんですね。で、出版社に問い合せてみたら長瀬さんが既にやられているって聞いて、くやしい、ホームページは長瀬さんより先に作っちゃえって(笑)。 その日の内に作っちゃいました。

--- XP の何がそんなに平鍋さんを駆り立てたんですか?

ずっと、ソフトウェアって工学じゃないなって感じていたんですね。つまり、エンジニアリングの世界で解決できないことをすごくたくさん含んでいるって。私 G.M.Weinberg の「ワインバーグのシステム思考法」や「ライトついてますか?」という本が好きで、その中では人間に焦点があたっているんですよ。つまり、工学的側面ではなくて「すべての問題は人に起因している」というようなことが書いてあるんですね。

XP って「お菓子を用意しておけ」とか「週40時間」とか「ペアプログラミング」とか、コミュニケーションに焦点を当てているじゃないですか。お客さんをがっかりさせない方策のひとつとして「お客さんの一人をフルタイムでプロジェクトの中に入れてしまえ」ですとか。

--- そうですね。人間に着目した方法論ってなかったですね。

工学じゃないもうひとつのソフトウェアの側面、人間に着目しているところが面白かったですね。

--- XP がウケたのは1つはそこですよね。

ええ、そういうところが面白いって思いました。工学がもう少し人間ってことを取りこんで、枠を広げないといけないって思ってます。

それと、 XP ってメソドロジーではなくて、シンプルな12個のプラクティスなんですよね。12個で、シンプルってところも気に入りました。

--- 週40時間って本当だと思われます?

やったことないですね。信じられないっていうか。でも、12個のプラクティスって互いに関連してるじゃないですか。だから、全部をきちんとやると結果として週40時間になるのかもしれませんね。

--- ペアプロはどうですか?

したことないんですよ。 XPXP って言いながら、実はやったことがないっていうのがばれますね(笑)。

モデリングよりもプログラミングが好き

--- 平鍋さんってモデリングよりもプログラミングがお好きですよね。

そうですね。私はモデルを書いて美しいと思ったことが1度もないです(笑)。プログラムを書いているのが一番設計してるって気がしますね。

--- モデリングはどれくらいされます?

事前にはクラスと公開メソッドくらいを決めます。そして、頭の中でトレースして。自分一人でやっているときはそこからもう走りますね。後はやりながら考えます。

--- チームでやられるときはどうですか?

数人でやるときは、ちゃんとしたクラス図がないとつじつまが合わなくなっちゃいますよね。だから、ゴールデンパスだけは動的なモデルも書いて確かめます。

--- プログラミング言語はどのようなものをされてきました?

一番最初は Basic ですね。行番号のあるやつです。多分中学生の頃だったんですが、 MZ80 で @ が動くようなものを作ったのが最初です。そこからしばらくブランクがありまして、その次は大学4年生の時の TurboPascal ですね。今でいう IDE ですか、統合環境がとても気に入っていました。しかもオンメモリコンパイルで速かったですし。MS Pascal はコンパイルの度にディスクアクセスして遅かったですからね。5インチドライブにがっちゃんがっちゃんて。

--- お仕事では?

最初はやっぱり Pascal ですね。 CAD の海外ものの移植です。その Pascal のコードが Basic からコンバートされたもので、グローバル変数の数が200個くらいあったんですよ。

--- Basic にはローカル変数ってないですからね。

ええ。で、関数に引数がほとんどなくて、グローバル変数に値をセットしてプロシージャをコールするんです。なにかおかしいと感じてモジュール化とかに目覚めました。そこからオブジェクトに繋がりましたね。

--- オブジェクトの前に構造化プログラミングから入られたんですか?

そうですね。でも機能的にいかにブレークダウンするかって方ではなくて、モジュール化の方ですね。いかにデータを隠蔽するか、できる限り他と影響しないつぶをたくさん作るかってところです。

--- 同じですね。私もそうでした。

どの変数が何に使われていたかとかが、後から自分で見ても解からなくなってしまうんですよね。

--- 他の言語はどうですか?

CAD を作っていた時に、プリンターのドライバーなどで x86 のアセンブラをやってましたね。その後はほとんどが C言語です。 C++ は仕事の脇でやってました。C のプログラムを見て、 C++ だとこうやるんだろうなとか考えてました。そして、Java ですね。でも、一番たくさん書いたプログラムは Unix のシェルプログラムかもしれません。私 Unix が非常に好きで、構成管理みたいなことをチームでやるときにツールとか作ったりするのが好きなんですよ。

最近では C# が面白いかなって思っています。そうそう、 C# の設計者のヘルスバーグって方は TurboPascal の設計者なんですよ。そして TurboPascal を ObjectPascal に持っていって Delphi に進化させた人なんです。


オブジェクト指向の好きなところ、いやなところ

--- オブジェクト指向の好きなところとか、いいなと思うところを教えてください。

現段階では、一番私の自然な考え方にあってますね。

--- もう少し詳しくお願いします。

ちょっとうまく言えないですけど。構造化だとモジュールって概念はありますけどインスタンス化できないですよね。1つのモジュールってスタティックなデータと、それを取り囲む関数群。

--- 1個になっちゃいますね。

オブジェクト指向はやっぱり、クラスをインスタンス化可能なモジュールって考えると、どんな文脈でもインスタンス化することによって作れますよね。そういうところがいいなーって思います。

あとは継承と言うかポリモフィックな扱いができるところですね。オブジェクト指向ってインスタンス化可能なモジュールとポリモフィズムですよね。

--- ポリモフィズムっていうとインターフェースの継承ですよね。継承についてはどう思われますか?特に実装の継承については。

実装の継承はあまりしないですね。避ける傾向にあります。再利用するときに、コードを再利用するのではなくて、できればインターフェースを同じにすることで上位を再利用するっていうか、下がなんであっても使えるようにしますね。

--- 他に好きなところってありますか?

みんなソフトウェアをよくするにはって考えてると思うんです。そして、今はオブジェクト指向がその中の一番のメインストリームですよね。文献とかみても、ちゃんと過去の文献、過去の文献があって、うまく知識が継承されていってその先に来ているので、一番幹として太い技術だと思いますね。

--- オブジェクト指向って呼んでいるものの中には、オブジェクト指向とぜんぜん関係ないものってたくさんありますよね。XP だってそうだし、アーキテクチャパターンなんてぜんぜん関係ないっていうか。いろいろなものを含んでオブジェクトって呼んでますよね。

呼んでますね。

--- それだけベースが強いものなんでしょうね。

そうですね。今ソフトウェアの新しい方法論っていったら、おそらく、オブジェクト指向とまったく関係ないってことはありえないですよね。

--- みんなオブジェクト指向の枠に入っちゃってますね。

ええ。

--- 逆にオブジェクト指向のいやなところ、好きじゃないところってありますか?

オブジェクトで考えるってことを強制しすぎますかね。モデリングとかやると、いいモデルだとかいうじゃないですか。でも、それって自然なのかよくわからないんですよ。かなりオブジェクト指向っていう考え方を教え込まれて、このようにしなさい、みたいな感じがして。

ちょっとガイドラインとしては強すぎる気がします。もうちょっと自由であってもいいと思いますね。


音楽とパターン

--- オブジェクト指向以外で好きなものってありますか?

音楽、ジャズギターが好きですね。

--- いいですね。好きなアーティストは?

好きなアーティストですか。最近で好きなのは...誰がいいかな、リーリトナーとか好きですね。

--- わざと、ちょっと軟弱系でいきましたね(笑)。

ぱっとみ路線でいきましたね(笑)。バキバキ系っていうか、メカニカル、弾きまくり系は好きじゃないですね。空間をうまく利用したフレージングが好きです。

--- ギターは弾かれるんですか?

真似事はやるんですけれども、 improvisation (即興)がうまくできないですね。コードなりテーマなりが裏にあって、 improvisation するんです。そのパターンをぜひ書きたいと思っているんですけども、だれかギターの得意な方がいないかなと思って。

--- 音楽にはパターンありますよね。ある意味パターンの塊っていうか。

ありますね。特にパターンが持つ generative なところ、生成的なところってあるんですよね。generativity については、前のインタビューで藤野さんも言及されていますが、音楽で言うと、このパターンとこのパターンを組み合わせてその場にあったフレーズをつむぎ出すみたいなところがあるんです。解答そのものではなくて、解答を生成する語彙の集合のような。今でもジャズギターのフレーズ・カタログはちゃんとあるんですよ。だいたいは過去の人が弾いたフレーズを採譜してきて、だれだれのフレーズ集って感じになってるんです。それをパターンの形式でできないかなーって思ってます。

--- 音楽を聴かれるときもソフトウェアのことを考えたりされてるんですか?

(笑)考えてないです。最近パターンが出てきたので、聴きながら、あ、これってパターンだなって思ったんですよ。音楽とパターンって似ているところがありますよね。もう1つ似ているのは、音楽はある適度聴くことはできるけれども、聴くことと弾くことってかなり違う。つらくないですか?パターン書くの。

--- つらいですよ(笑)。

つらいですよね。私も1個か2個書いて、こんなに疲れるものかって思いました。

--- 自分のこと棚に上げて失礼ですけど、パターンって見た時に大したことないなって思うんですけれども、すごい役に立ってますよね。大したことないなっていうのは、たぶん自分もどこかで考えたことがあるっていうやつなんですけど、そういうのが一番いいパターンなんですよね。

見たときにデジャブを感じさせるパターンがいいですよね。

--- 俺も考えたっていうか

俺に断りもなく勝手に名前付けるなっていうか(笑)。そういうのが、たぶん一番いいパターンですね。そんなデジャブ感がパターンには重要だと思ってます。「なるほど!」、という感覚も必要だけども、「見たことある」っていうのが大事ですね。すごいっていう感動的な意味も欲しいけれども、共感的な意味も欲しいです。

--- 好きなパターンは何ですか?

オブザーバー系ですね。

--- マルチキャストでしょ(笑)。

(笑)その通りです。私は型付き言語が好きなので、オブザーバーとは言わずにマルチキャストって言いたいですね。

--- でも、あれはパターンとしては GoF の間では認められてないんですよね。

そうですね。でもあれは立派なパターンですよね。ダイクストラが「 separation of concerns(関心事の分離) 」って言ってて、クラスも concerns を分ける1つの単位になります。最近ではアスペクトとかいろんな単位があるんですが、オブザーバー系ってタイミングについて関心事を分離できるすごいパターンだと思います。

--- 平鍋さんのデザインパターンのチュートリアルとか、必ず最後はマルチキャストで締めるんですよね(笑)。これはかなりこだわってるなって思ってるんですよ。

(笑)ええ。これは GoF に載ってないからみんな知らないだろう見たいな、スノッブ感も満足させてくれる(笑)。好きですね。


次の時代は何が来る?

--- オブジェクト指向の次は何が来ると思われます?

そうですね。パターンが1つの転機だと思います。

--- 転機、ですか?

ええ。オブジェクト指向は構造化の延長で捉えられるところが大きいですよね。でもパターンはもっとこうぼんやりしてて、何でもありというか。パターンは工学が枠をはずす1つのムーブメントだと思います。

--- 今オブジェクトは学問ではなくて、実務家がやってるところも面白いですね。

そうですね。論理の積み重ねではなく、成功した事例であるプラクティスの積み重ねですよね。パターンが受け入れられたのはよかったんじゃないかなって思ってます。


--- 最後に、何か宣伝されたいことはありますか?

James O. Coplienの「 Multi-Paradigm Design for C++ 」の翻訳してます。目標はオブジェクト指向シンポジウムくらいだったんですけれど(笑)、冬くらいになると思います。(訳題「 C++ のためのマルチパラダイム・デザイン(仮題)」、出版社:ピアソンエデュケーション、2000 年末出版予定)

--- どのような本なんですか?

えーっとですね。オブジェクト指向は必ずしもベストな解ではなく、 C++ の中にはオブジェクト指向に沿わないけれどもより要求を素直に表現できる言語機能があるんですよ。それらをうまく使って、オブジェクト指向ではないけれどもよりよい設計をしましょう、という内容です。



アンケートにご協力お願いいたします
記事の内容を5点満点で評価してください。
1点 2点 3点 4点 5点

© 2000 OGIS-RI Co., Ltd.
Prev Index Next
Prev. Index Next