最初のシステムを作った時の思い出

自分のシステム開発の仕方はよくも悪くも社会人になって最初のシステムの作り方の影響を受けている気がするので、思い出しながら書いてみる。

学生時代、ずっとデータの打ち込み作業をやっていました。フリーソフトウェアを公開代行するサービスを行っている会社でアルバイトをしつつ、なんとなくツールぐらいだったら作りつつも、自分自身は自分で作るよりもすでにあるツールを組み合わせてフロー作ったりするのが好き程度で、ほとんどプログラムらしいプログラムは書いたことがありませんでした。

学生時代は数学科だったものの、そこまで優秀ではなかったので、当時流行りだったシステムインテグレーターに就職し、これからはJavaの時代だということで、新人教育ではJavaを学びました。
周りにはプログラムを書いたことのある人が居なかったのもあり、まあ、周りよりかは新人研修の進みもよく、javamailのライブラリを使って勝手にメールを飛ばしたりとか色々とやっていたなぁという印象。

その中で、たしか、20人月ぐらいの見積の3人での新規のシステム開発案件に放り込まれたのが最初。
メール監査システムという名前で、sendmailにフックをかませてメールをDBに保存、それをウェブ上から参照できるようにするシステムでした。
当時はStruts全盛期でこれからシステムはすべてStrutsで作るんだ!というぐらいにStrutsSturtsしていた頃で、例に漏れずそのシステムもStrutsで作りました。
まだ当時はAjaxは出始め?いや、まだAjaxという言葉はなかった気がする。程度だったので、Ajaxは使用せずに、せいぜいJavaScriptで画面をいじる程度の画面構成で、今から考えるとUIまわりはものすごく稚拙だったなぁと。
メンバー3人の中でこれからはStrutsだ!と言ったものの、誰もStrutsを使ったことがある人はおらず、研修の時にStrutsで作ってた自分が一番良く知っているような状態。その中で、デザインパターンとかを学びつつ、ウェブコンポーネントデベロッパを取りつつ、ちょっとずつデザインパターンっぽいことを適用しながら頑張って作った。
3人の内、二人がプログラマーで私はその一人で、もう一人が難しい画面を担当しつつ、私が簡単な画面をという形でやり始めたものの、思ったよりも私の進捗が良かったらしく、Strutsのコアな部分をやり始め、例外ハンドリングやらロギングやらをやったのが懐かしい。
システムの不具合が発生するという経験がなかったので、なんか起きたらどうしようという不安の中、とりあえずスタックトレース全部出しておくかとか、URLから何から全部出しておいて、ユーザーが何やったのか出来る限りわかるようにしようと考えて、あの時は過剰かとも思ったけれども、今から考えれば十分だったし、むしろまだ足りないぐらいのログだったなぁと。

そのような形で、難し目の機能という名前の細かい機能以外、フレームワーク周りも含めて大体自分が把握していたというのがあったので、そのまま保守で一人だけ残されることになり、まあ、ほんとうに不具合があった時にはログ出力には大変お世話になった。

幸いなことにそのシステムは納品した先の基準においては表彰されるほどの不具合の少なさを誇っており、実際に保守期間中ずっと暇だったわけなんだけれども、一次受けの会社の下で一次受けの会社の人が居ないまま常駐するというアレな状況のお陰で、まあ、なんだかんだで死にそうになることはあった感じ。ただ、その時の経験でなんとなくバックアップ周りやらハードウェアやらネットワークやらの概要はつかめたし、一次受けの会社の人たちの代わりに線表を引いてお客桟に提出するアレな経験をやったことで、まあ、なんとなくひと通りのシステム開発とはということを経験出来た気がする。

それと平行して、暇な時間にJ2EEパターンを読み返したり、いろいろなウェブサイトで調べ物をしたりで最初に作ったシステムのアーキテクチャは正しかったのかみたいなのを検討できて、その経験にはいまだに色々助けられる。
有名なアーキテクトが設計したシステムですとか言われても、これ保守やったことがない人が設計したんだなぁみたいなのを感じることはあるので、アーキテクトを外注する場合には出来る限り保守の経験があるかどうかはきちんと確認しておきたい。

そういえば、学生の頃にトリプルクラウンというのを某ベンダーたちがやっていて、それはJava/Oracle/Linuxで、プログラムとDBとOSを全部学びましょう。そのためにそれぞれの資格の一番簡単なのを取りましょうだったのだけれども、Linuxよくわからなかったというのと、Windowsが大好きっ子だったので、JavaOracleWindowsでがんばって、Javaの上位資格(WebCompornentDeveloper)と、OracleMasterGoldの試験だけ(研修代金支払えなかったのでGoldは取れてないし、Platinumは受けても居ない)とMCSEを取ってどやぁ。という顔をしていたのが懐かしい。
その頃用語とかきちんと覚えていたので最近近所の会社で専門職が居なかったためネットワークの不調を自分が調査しなければいけないということがあったのだけれども、初めてだった割に、まあ、なんとか調べて不具合を特定できたし、現状の問題点もまとめれたし、改善案も出せたので良かったのではないかと思う。

まあ、なんだ、色々やった。
いまだになんか色々知っている人みたいな扱いを受けることがあるけれども、ここらへんの経験があったからだと思う。
本当に、最初のシステムは、作りなおす機会があるなら是非にでも作り直したいし、ThreadLocalの存在も知らなかったし、Loggingライブラリもきちんと使えていたとはいえないし、インフラ周りの設定も今から考えるとあれもこれもやっておきたいというものがたくさん出てくるのだけれども、本当に愛おしい。

保守の後、2次開発が始まり、2次開発では新しく二人アサインされたけれども、アサインされたリーダーが心の病で倒れ、だいたい自分がやらなければいけないことになってしまったとか、もう一人は新人だったとか、テストデータを作るのをポカして、半分以上のテストをやり直しになったとか、要件定義できちんとまとめていた内容がお客さんの勘違いで要件の内容が違っていることが判明したものの、要件定義書できちんと書いていたためお客さんの予算で作り直しになって要件定義書の書き方は超重要ということも学んだりしたけれども、私は元気です。