EY-Officeでは現在、旧システムのメンテナンス的な開発も行っています。
- あるメディア企業に納入されている広告システムの広告管理ソフト。 この広告システムを開発した企業は現在は新しい広告システムが主力になっており社内の開発者は新システムの開発を行っていますが、 お客様はこのシステムを使っているので独立してメンテナンしています。
- ある企業の社内教育システム、フロントエンドはjQueryからReactに置き換えましたが、バックエンドはバージョンの古いRuby on Railsです。
両方のシステムは初期開発からかなり時間が経っていて、2.は初期開発者とは全く連絡がとれません。しかし両システム共に現在も大きな問題はなく新機能の開発が行われています。
長期間使えるシステムを作るには
なぜこれらのシステムはメンテナンス出来ているのでしょうか、両システムは最初からメンテナンス可能なシステムではありませんでした。いつまでもメンテナンス出来るシステムはどうやったら作れるのでしょうか?
End to Endテストを書く
これが一番重要だと思います。新機能の追加や既存の機能の変更などのメンテナンス的な開発が出来なくなる最大の原因は、既存の機能が動かなくなることへの恐怖だと思います。既存の機能が動かなくなる事はサービスや業務に大きな障害をもたらしれま、開発者としてはどうしても消極的になってしまいます。
これを改善してくれるのが End to Endテストです。End to Endテストは人間がアプリやサービスを使うのと同等の操作を自動的に行い、画面に表示される結果や内部データを確認する自動テストです。 ただし、End to Endテストの作成は、ユニットテストに比べかなりコストが高くなります。またEnd to Endテストを行うためのツールも決定版のようなものが少なく導入が難しいのも事実ですが、 長期間メンテ出来るシステムが出来る事を考えるとコストに見合うものだと思います。
また End to Endテストを書く際に重要な点は、全ての操作に対してのテスト、完璧なテストは目指さない事です。まずはそのシステムにとって重要な機能の正常系に付いてのみ書くことをお勧めします。また画面等が変わらない条件別の処理のテストはEnd to Endテストではなく開発コストの低いユニットテストを組み合わせます。
実行環境構築やデプロイ等を自動化する
現在ほとんどのサーバーはクラウドで運用されていると思います。本番システムのサーバーは頻繁に変更する事はないかもしれませんが、開発用やテスト用にサーバーが必要になるとこは良くありますし、大幅な変更の際には既存のサーバーを無理矢理やりくりするよりは新たにサーバーを追加してしまった方が楽です。
サーバーの追加はクラウドのコンソールから簡単に出来ますが必要なソフトのインストールや設定が自動化されてないとサーバーの追加を思いとどまってしまうと思います。 しかし Chef, Ansibleなどの環境構築の良いツールや Docker などのポータル環境を作れるツールもあり、環境構築の自動化はかなり行いやすくなっていますので是非行うべきです。
特殊な環境や非OSSを使わない
現在は特殊なハードやOSを使う事はあまり無いと思いますが、マイナーなプログラミング言語を使うと時間が経つとサポートが止まったり、使えるプログラマーが見つからないなど苦労するかもしれません。 またオープンソースでは無いミドルウエアやツールを使うと全く手を出せなくなります、オープンソースであれば苦労するかもしれませんが最悪の場合でも自分たちで直せる可能性があります。
EY-Officeでは、このようなメンテナンス的な開発も行っていますので、利用しているシステムがメンテナンス不全なっている方は是非ご相談くさい。