仕事の話

今更って思う人も多いだろうけど。ソースコード全文検索みたいなのって大事だなあって思ったよ。今の職場でさ。M & A とかでシステム統合をしたりするとさ、業務効率を改善する為に他のシステムの DB を参照したりする要件は出て来る訳ですよ。じゃないと M & A のメリットが出難いし。そうするとサブシステム同士を連携させる為にインターフェイスを作って行うのが普通だとは思うんだけど。そうすれば各々のサブシステムの管理者・保守者・運用者が自分の担当範囲を把握し易くて対応し易いから。だけどデメリットも色々とある。インターフェイスを作ったりする分だけ開発スピードが落ちてしまったりする。そんなだから M & A とかが早くて兎に角スピードが求められると、他のシステムとかの DB を直接に参照したりする訳ですよ。筋が悪いなあって思うけど。それにインターフェイスが多くなるとオーバーヘッドが増えて来てパフォーマンスも悪くなる。リアルタイム性が無くなって来る。そういった訳でサブシステム単位で管理・保守・運用する体制から統合的に行うスタイルに変えるのは時代の流れなのかなあ…って少し思ったりしているけど、騙されてるかなあ…って思ったりもする。統合的に作っちゃうと人間の限界を簡単に越えちゃうんだよな…。でも変だなあ…。Windowsマイクロカーネルというサブシステムを分離した作りにした事によって、開発スピードを上げたんじゃなかったっけか。Linux はモノリシックなカーネルだからパフォーマンスは高いけど開発に時間が掛かり気味なんじゃなかったっけか…。うーん変だ…。統合的な作りにする事によって本当に開発スピードは上がるのだろうか…。最初の頃は直接参照するから開発スピードが早いぜーって思うかも知れないけど、段々とスパゲッティになって来るんじゃないだろうか…。そして修正する度に障害が発生して、その責任を問う度に「全件テストしましょう」って話になって、段々と開発工数が上がって行くんじゃないだろうか…。うーむ…。
そこでソースの全文検索システムだけどさ。これも簡単に上手く行く物では無いからなあ。ソースってのは普通に Java とかのソースもあるけどさ。DDL とか PL/SQL とかもある訳だよ。それを全文検索するって割と漏れが発生し易いというかね。Java って言っても本当に *.java ファイルだけじゃなくて *.jsp, *.properties, *.xml, *.js とか関連するファイルが色々と出て来る訳ですよ。帳票みたいなのもあるし。エクセルマクロも良くあるよな。本当にそれら全てをちゃんと検索する事が出来るのかってのが気になるよな。それとか例えば DB の定義を変更したり、ある DB のカラムが取り得る値を増やしたりするって言った変更をする時に、そのカラム名全文検索をしたとしてだよ、単純な status みたいなカラム名だと物凄く色々なのがヒットしちゃうって問題があったりする。何せ M & A で統合して来たシステムだから部署毎に規約がバラバラ。なのでこの問題を解決するのは容易じゃない。それとか partner_name みたいなカラムがあったとすると、それを Struts みたいなフレームワークは partnerName みたいなフィールドに勝手にマッピングする。更に getPartnerName みたいなゲッターやセッターも作る。それらも検索しなきゃならないのか…って問題がある。外注や派遣が多い職場でその検索を皆が正しく実行出来るのかって問題もある。それに本当にそのパターンだけで良いのかって問題もある。例えば新人の馬鹿みたいなプログラマだったら "partner" + "_" + "Name" みたいにプログラムでカラム名を結合するかも知れない…。こんな事をされたら Grep してもヒットしない。或る程度の熟練したプログラマなら Grep 出来なくなるからってそういう事はしない筈…って俺は思ってるんだけど…。それとか稀にやってる現場があるんだけど、データベースのテーブルのデータとしてカラム名とか関数名とかを突っ込んでる所があるんだよ。例えば select function_name from execute_functions みたいに function_name を取得して、その function_name を使って Java のリフレクションを使って関数を呼び出すとかね…。そんな事をしたら Grep で追えなくなるだろ…って言いたくなるんだけどさ…。…といった Grep で追えない様な危険なソースを書く奴が居ないって言い切れないのもある。
だから俺はあの会社の動きは面白いとは思っているよ。統合的な開発にシフトして行くのであれば、それは何というか、開発に関する根本的な思想の戦いをしているっぽいというかさ。マイクロソフトLinux みたいな…。他の会社がサブシステムを綺麗に分離した開発をしているのか、俺は知らないけどね。でも基本的には分離するでしょう…俺はそう思ってるんだけどさ。いやあ面白いですよ。あのまま統合して行って本当に早い開発速度を保ち続ける事が出来るのか。限界が来た時に糞みたいに開発速度が落ちてしまうのか。
最初から統合的な開発を目指すのであれば、規約をきっちりして、ソースの全文検索に対応する感じに作って…ってやる事も出来なくは無いだろうけど、M & A をバンバンに行う様な早い開発の会社だからな。そういう会社だからこそ直接参照がしたい。だけどそういう会社だからこそソースはスパゲッティ的…。難しい事をしてるって気がするよ。