システム開発

今回の案件なんだけどさ。あるシステムのアップグレードみたいな案件なんだけどさ。その中にサブシステムが 10 個ぐらいあって、その中の 1 つに関わっているんだよ。そのサブシステムは新たに付け加えられたサブシステムで新規開発になる。そこでさあ俺が何だかソースを書き始める最初の人になったんだけどさ。俺は言ったんだよ「他のサブシステムからのコピーとかフレームワークとかのコピー元は無いんですか」って。そしたら「無い」って言うんだよね。俺は耳を疑ったよ。そんな馬鹿な筈が無いと。そんな馬鹿過ぎる話があるかと。2, 3 回は問い質したと思うよ。でも何だかそそくさと無視気味に去って行ったんだよね。だから俺は「分かったよやりゃあ良いんだろ」って感じで一から作り始めた訳だ。なんでこんな所から作り始めるのかって思いながらも。それでいてフレームワークとかライブラリは必要不可欠なレベルの物じゃ無ければ使わないって制約付きなので、JDBC ドライバとかそういうレベルの物しか使っていない。Apache Commons とかも当然ダメですよ。Spring とか iBatis とかは絶対ダメなレベルだ。但しテストコードの為のライブラリは許可される感じ。
でまあ本当に最初から作りましたよ。Eclipse の環境とかプロジェクトとかも。SVN の無視設定も。もう文字列ライブラリから日付ライブラリから作ったからね。データベース接続のプールも作ったし。ビジネスロジックから DAO クラスも分けて、1 つのメソッドが 1 つのシンプルな動的 SQL 実行コードになる様に DB アクセス周りも書いてさ。それは勿論テストの為ですよ。再利用性もあるけど動的 SQL の実行を完全に分離してテスト出来るメリットは大きいでしょやっぱり。エクセルファイルを入力にしたテスト環境も構築したしさ。DbUnit をそのまま使うと色々と不便だったので本当に色々と書いたさ。接続プールとテスト環境とシンプルな DAO クラスを併存させる為に色々と書いたさ。接続プールリークが発生しない様にコネクションクラスをラップしたクラスを作って finalize を書いたりしたさ。色々と苦労した訳さ。非接続プールのコネクションインスタンスでも動く様に書いたしさ。
それがさあ何か知らないけど今更になって他のサブシステムのソースを取り込み出したんだよね。何それ頭悪過ぎだろって思ったよ。もう馬鹿過ぎて何も言えない感じだよ。既存システムのソースを流用するのって常識だと思うんだけどさ。だって同じ社内なんだよ。既存のソースならテストを省けるってそりゃ当たり前の事だよ。だから言っただろう…。
いやまあ俺も分かっててやってたんだけどね。自分の技術磨きの為にこの場を利用するしか無いって思ってやってた。言質は取ったから。もう好きにやるしかないって思った。今まで経験して来た職場のアーキテクト達が構築した開発環境やフレームワークみたいなのを、自分の手と知識で再現し、越える所は越えようって感じで楽しみながらやってたのは事実だ。時間との兼ね合いを見てココまではやるかって思いながら。そして適度に指示を無視しながらやっていた。それは全く進捗が無いと拙いから微妙にスケジュール作業もやりながらって事。Spring や iBatis を使わない枯れたやり方で、Spring を使った開発環境っぽい事をやろうとすると、この辺りが限界なんだなって事が分かった気がする。
でもねえやっぱり自分が折角書いたコードが無駄になるのは不愉快だよねえ…。
自分で開発環境を構築してて分かったけど、テスト用にプロジェクトを分けているのはビルドの為だけでは無くて、非テストコードがうっかりテスト用ライブラリのクラスを参照しちゃうのを防止する為なんだなって思った。そうだったのかあ…って思ったよ。ビルドする前にテスト用ライブラリを外してコンパイルエラーがあるか見れば良いんだけど、チームでの開発となると誰かがうっかり使ってしまい兼ねないからねえ。
それと今回の案件に限らずなんだけどさ。ソースをリポジトリにコミットするのって俺は物凄く細かくやる人間なんだけどさ。1 つのポリシーで一貫した塊を細かく作って、細々とコミットして行く。そして頻繁に取り込む。俺はそれが当然だと思ってるんだけど。どういう訳か一気にコミットしたり、凄い間が空いても取り込まない人って居るでしょ。どこの職場にも居るんかなあって思ったりするんだけど。それってどうなんだろって思うんだよね。俺は効率が悪いなあって思うんだけど。中途半端なソースをコミットすると格好悪いとか、そういうバカみたいな理由からなのかな。開発慣れしてないのかなあ。俺とは違う頭の構造( 得意不得意が違うって意味 )なんだろうか。リポジトリにコミットする事で履歴が残って、後になってある時点のソースに復旧出来たりして凄い便利だし、ローカルにしか無いとハードディスクがぶっ飛んだ時に泣けるし、良い事ずくめだと思うんだよね。細々とコミットして細々と取り込むのは、特に共有するクラスとかで威力を発揮するでしょ。ある時点で自分以外に誰も使っていない共有クラスってのは変更する可能性がある訳ですよ自分が。でまあ最新を取り込んで本当に他の誰もが使っていないって事が分かれば変更するでしょ。そういう出来事って普通にゴロゴロと出て来るんですよチーム開発をやってると。昔に「コミットをするのは綺麗に完成された形まで仕上げてからにしろ」みたいな事を言われた時は辛かったよ。そして「この人はきっとシステム開発に関して素人に違いない。プログラム経験が殆ど無い自称 SE やプロマネに違いない」って思ったね。って言うのは全て俺の個人的な意見でしか無いんだろうかねえ…。頻繁にコミットして頻繁に取り込む…大切な事だと思うんだけど。

何と無くテストファースト

というのを Wikipedia で読んでいた。最初は取り敢えず動く物を作って後から綺麗にして行くって書かれていた。それは俺が長年の経験で実感している事と合致する。そうなんですよ。その方が効率が良いんですよマジで。俺も素人に毛が生えたレベルの頃は最初から綺麗に書こうとしてたよ。でもそれをやると悩んでる間に時間がどんどん過ぎて行って、自分が目指すものの壮大さにうんざりしたりして、全く進まないんだよ。というのは俺だけだったりするんだろうか。それなりに賛同を得られそうな気はするけど。