おれのIT日記

2003/12/07 (日)

Webアプリのフレームワークって...


おれの勤めている会社には、かのI○M様のお力を借りて作り上げたWeb基盤システムがある。その名は伏せるが、別に書いても誰も知らんだろう。(失笑)

いわゆるレガシーシステムとの橋渡しとして設計されたものだ。これには二つの意味がある。一つは、実際に、ホスト系システムとのゲートウェイサーバとして機能すること。もう一つは、明らかに旧来のオンラインシステムを意識した設計がなされていること。構成要素の名前や、役割が、Webアプリっぽくないのだ。

おれの所属する部署は、基盤システムを使ってアプリを作る所である。だいたい想像がつくと思うが、
「何だよこんな設計しやがって、馬鹿」
などと毒づきながら、仕事している。

たぶん相手も同じこと言ってると思う。「……ったくこれだからアプリの奴は」ってね。(失笑)

数年前、今の部署に来たところ、開発プロジェクトは完全にお手上げ状態になっていた。なぜなら、基盤システムの設計は遅れ、情報も提供されていなかったから。そして、前任者たちは、半ば頭に来たのであろう、スタブと称して、クラスの作成を始めていた。つまり、同じようなものを、基盤とアプリで並行で作り出したわけだ。

着任したおれは、「こいつらはアホか?」と思った。
「いや、これがないとコンパイルができない」という話であったが、それはおかしいだろう。仕事なんだから、ちゃんと相手と交渉してどうにかしろよな。
おれはさっそく基盤と戦いはじめたが、それは毎度のことながら、虚しい日々であった。そして結局は、最大のアホは身内だったということに気付くのだが……しかしそれにしても、この温和な男であるおれが、なぜにいつもこう、戦いの渦中に投げ出されるのであろうか??? ガラにもなく、机を叩いて怒鳴ったりしたこともあったっけ。あー恥ずかしいよ。

さて、それはともかく、ふとある日、思ったのだ。
これでコンパイルが出来るということは、ちょっとコードをつけ足せば、動くんじゃないか?

おれの足りない知恵を絞って、おれ自身の言う「カスみたいな設計」のクラス構成をひとつひとつ推測し、理解し、時にはjadで逆コンパイルしたりしながら、少しずつ、機能を追加して、何とか単体テスト程度はできるものに仕上がった。

おれの関った仕事は、無事リリースされた。やがておれも、あまり手を出さなくなった。後輩も育ってきた。おれと違って、おれの後輩たちは優秀だから、彼らは彼らなりに、機能をブラッシュアップし、補足したりしていた。あまりに気に入らない設計の時は口を出したが、なるべくそのままにした。

状況が変わったのは今年である。
まず、社内研修で、上記の、おれの言う「カスみたいなシステム」の講師をやるハメになった。人生には時に、運命の報復としか思えない出来事が起きるものだ。
でも研修やれったって、そもそもソースも見せてくれない上、テスト環境も公開されてないのにどーしろってんだ馬鹿……まで言いかけて(全部言ったか)、はっと気付いた。そうそう、この「エミュレータ」で研修やればいいわけだ。ちゃんとeclipse + Tomcat で動くWebアプリに仕立てあげれば、いいわけだ。

これが結構手間取った。途中で彼女に捨てられるという惨事に見舞われ、危うくHDDごとプログラムを消去しかけたが、何とかやり遂げた。
構造的に気に入らなかったところも、多少は直せた。前から気になっていた機能のいくつかも、ようやく実装した。
おれの、今年の夏は、実は、このプログラムにささげたようなものだ。それにしては、こんなものしか出来ないとは。おれの力はこんなものなのか……。

もうひとつ、社内研究で、何かネタを出せと言われて、困ってひとつ出したアイデアがこういうものだった。
「当社独自(というより親会社専用)のフレームワークというべき、この○○○○システムを、オープン系に移植し、互換APIを提供する。そして、同じ方法で、外販も内販も出来るようにする、これにより、当社内の人材配置を、技術的に柔軟にする」
……我ながらまったく面白いことを考えると感心したが、若い衆にはウケないな、とも思っていた。しかしなぜかこれで社内の賞を貰ったりした結果、ちょっと、関係会社の人向けに、デモをやって欲しいということになった。ということで、さらにもうちょっと理論的に深めないといけなくなった。

つまり、実装もそうだけど、まずは理論が欲しいのである。
もっとハッキリ言えば、当社は、なぜ、Strutsではなく、こんな得体の知れないフレームワーク?なのかというところを、理論武装したい。
……というわけで、両方を一手に引き受けて、おれなりに考えているわけだが……

社内向けに話すのはカンタンなのだ。問題は、社外に対して、何の説得力もないこのネタを、どうふくらますかだ。

……というわけで、ここまで考えたのはこうである。

Strutsにはいくつかの機能が不足している。
・データベース・アクセスを含むロジック部分
・権限チェック
・認証
・メール
・帳票
・ワークフロー
細かいところで
・入力チェックやダブル・クリック(二重送信)対策機能
も不足している。

(「Extension for Struts」があるじゃん、ってのは言いっこなしね)

実は、この機能は、本物の○○○○は実装しているのである。
(しかし、おれが中心になって作り上げてきたこの「○○○○互換システム」には、面倒だから実装してないのだ……だめじゃん)

……こんな論理立てじゃだめだ。

そこでさらに考えた。いっそ、レガシーシステムとの接続性で押すのはどうだ。
データベース・アクセスを含むロジック部分では、一般にO/Rマッピングの問題で悩むはずである。
Strutsというフレームワークは、これについての解答を何も持たない。そこはEJBでどうぞ、ということだろう?

そこで、ここを責めて、話の足がかりにしよう。

通常はここで、一苦労もふた苦労もして、バラバラにしたオブジェクトを、一生懸命RDBにマッピングするわけだ。
しかしだ、レガシーシステムの移行という局面に絞って考えてみるとどうだろう。既存のRDBテーブルを利用しなければいけない場面がほとんどのはずだ。
ということは、実は逆の手順が必要なのではないか?

……ということで、○○○○システムが標準で強要するデータ構造、これを大いに押して前面に立てる。COBOLプログラムのCOPY句を、そのまま置き換えたようなメタ情報を登録して使うデータのコンテナがあって、おれはこれが大嫌いなのだが(失笑)、これを、論理の主役にしてはどうだろう。これを使うことで、レガシーシステムの移行が容易になる、というのはどうだ。

あとは、Strutsへの移行が容易になるようなコンバータでも用意すりゃいいじゃん。あるいは、このエミュレータ自体をStrutsに移植するとか。

でもあと一週間しかないんだよな。



休みだってのに、酒飲んで、ベランダから紅く黄色く染まった山を眺めて、こんなことを考えてるおれって、寂しいような、うれしいような、ヘンな人生を歩んでいるなぁ。
おれ、この○○○○システム大嫌いなんだよね。ついでに言うとJavaも嫌いなんだ。.NETの方がまだマシだよ。Microsoftの悪口は人一倍言うけど、それはそれ、悪口を言うことは目的ではない。
そんなおれなのに、なぜか第一人者?らしいんだよね。運用している部門とも特に仲がいいわけでもないし、どちらかというと煙たがられてるんだと思うが、日経何とかにインタビューが数行出たり、社内であんなことやこんなことしたりして、なぜか、○○○○の第一人者なんだってさ。ヤだよ、そんなの。数年後、流行も代わり、システムも代わった時、どうするんだよ。おかしなレッテル貼って欲しくないね。活動がしにくくなるからさ。Perlでヘンなものを作るのが好きな○○さん、の方がいいや。まったく馬鹿じゃねーの、ってため息をつきたくなる日々だ。

どうして人間って、こう、自分の思った通りにならないんだろうね?
おれはなぁ、あの子とふたりでモニター見つめて、より良いクラス設計について語り合う生活が夢だったんだよ。
(……そんな実現性の無い夢だから、今だに独りなのか……)