以前開発したもののトラブル対応をしていて思うこと

4年前に突貫で開発したシステム、これは負債か商品か

以前開発したものをメンテナンスしていて思う。

4年前ぐらいに開発したソフトウェアがあるけどちょくちょくメンテナンスやトラブル対応を行なっていて、
今だとすぐ直せるレベルのものでもイントラネット専用で動かすことが前提になっていてなん箇所か導入されてしまっていて、修正するのが許されなくて負債になりつつあるシステムがございます。

Windows + PHP5.1でWebも動かすわ、バッチ処理は行っているわ、ツールとして動かしているわで、大きなデータが来てしまうとエラーが出たりして、なんで動かないのかわからないどうしてこんなメモリを食っているのかと突っ込まれる始末。分かる人にはわかると思うけどwin+phpで大量のデータ処理を行うって正気の沙汰ではなかった。

当時の自分のWeb開発環境

当時はちょうどPHP5.1か5.2の境目辺りで、PHPのフレームワークがちょうど盛り上がってきた頃。サーバと言えば物理サーバを用意して動作させてというのが当たり前だった。とりあえずフロント部分でかっこ良く見せようと思ったらjQueryで行き当たりばったりで作成していくのが普通で、フロントもバックエンドもなんとなくプログラマが作ってなんとなく動いてリリース。

windows一色できた会社なのでLinuxなにそれおいしいの? が当たり前で社内でLinuxを使うのにも苦労した覚えがあるし、ましてやGitなんて導入できるような知識と状況ではなかったから、バージョン管理はその時にリリースしたものをzipで固めてバージョン名をファイル名にして指定されたファイルサーバへ置くという管理方法。今じゃ考えられない。

4年前に開発したシステム

要求としてはこんな感じだった
・Windowsで動くブラウザ上でシステムが動作し複数人で利用できるかっちょいいシステムにしてよ
・インターネットに接続せずにイントラネット内のみで動作できるようにして
・ユーザに表示させる部分はモダンな感じでMicrosoftデフォルトなフォームにしないで
・データの取込、表示の仕組みも作ってちょうだい
・インストーラ各種セットアップの仕組みも作ってちょうだい

前提としては自分は当時Linuxでの社内Webサービス開発と、Webサイトのサーバ管理等々は行っていたもののWindowsサーバでのWeb開発経験はなかったし、主に使っている言語はPHPだったのでASP.netなんて触ったことはないとんでもない無茶ぶりだった。

当時はまだ仮想環境そのもののを開発環境にして配布してしまうという考えが出てきたばかりだったので、どうやってインストールしただけでWebサービス一式が動作させるか悩んだ覚えがある。

結局担当した部分が、
・うん万行もあるデータの取り込み部分(PHP)
・Webサーバの仕組み一式 (Apache + PHP[CodeIgniter2] + MySQL)
・ミドルウェアのチューニング
・DB設計
・取り込みデータのWeb画面への出力
・既存システムのデータ集計アルゴリズムのPHPへの移植

案の定入ってくるデータも半角カナ機種依存文字やりたい放題なので、まずはこの文字を変換してDBに入れて表示させて・・・
今振り返ってみるとひどいね。あの時CodeIgniterに出会ってなければ完成しなかったと思う。

当時と今を振り返ってみて

今だと仮想サーバの技術も体系化してきてDockerやVagrantがあって同じ開発環境、Webの表示用にテンプレート、フロントエンドの体系的な開発ようにBackbone.jsやAngular.js、PHPも5.3からようやく名前空間や処理速度の最適化、フレームワークの多様化が進んで、今じゃ物理サーバを導入するほうがナンセンスになりつつある。

Web界隈だとサーバがLinuxベースなのでもはや開発OSはMacかUbuntu。Windowsでソース書いて開発してLinuxにデプロイして動かないと言うのは聞かなくなったような気がする。

だけどもまだまだセキュリティがーーー!! インターネットがーー!! といってイントラネットでの導入をしたいという需要があるし、運用にお金がかかろうとも複雑怪奇なセキュリティにしてデータにアクセス出来ないようにして満足しているこの界隈、なんとも難しい業界ですな。

結局何が言いたいのかね

昔作ったものを触っていて今では当たり前で使っていて便利になったなーと感傷的になってしまった。
たった2-3年で作り方もツールもガラッと変わってしまった。Amazonは他のクラウドベンダーが手の届かないところを爆走している。変わらないのが.netだったり(最近は開発環境がオープンソースになったりしたが)、取り残された人たちの頭だったり。今の技術を知ってうまく使いこなせれば何倍も開発は早くなるし、ユーザにとっていいものを提供できるはずなので、昔作ったものを振り返って反省をしつつ今の開発に活かしていきたいと思った今日このごろ。