DevOps Days

主にインフラの話がメインです

開発プロジェクト振り返り

リリース

9月25日(日)一年近く続いたプロジェクトのリリースを行った 総実行ステップ数236,000、400ファイル57,000ステップの改修案件だった

f:id:eriotto:20160930174759j:plain

プロジェクト概要

それなりに大きな金額のプロジェクトで、内容はざっくり言うと古くなった基幹システムのリプレース案件、技術的負債の影響もあり、全体の改修を行うとなると億行っちゃう問題が発生するため

今回はコアとなる基盤の構築と比較的ミッションクリティカルでない画面の再構築を行う一期開発である

後続の経理等のクリティカルな画面を構築するにあたり技術的な課題を洗い出してあらかた潰してしまうのも 重要なミッションだった

開発内容

自分が担当したのはアプリケーション基盤の構築と実行環境の構築で、ビジネスロジックに相当する部分はほぼ記述していない

古い部分は分離して、画面上まるで同じ画面のように見えるにする必要があったため、色々トリッキーな事をするビューが必要となったが、まぁこれは全体の移行が終われば綺麗になる筈だ

f:id:eriotto:20160930174426j:plain

先述した技術的負債により、ClassicASP,ASP.NET(VB.NET),ASP.NET MVC(C#)が混在する悪魔のような構成で、さらに以前のリプレースでは凶悪なデスマーチに見舞われた為、ASP.NET MVC化した部分のアプリケーション基盤はお世辞にも品質が良いとは言えない状態だった

以上のような事情により新基盤に要求されるのが以下のような要件となった

  • 現行アプリ基盤(ASP.NET MVC2)ソースコードを極力改修せずにMVC5化する
  • 現行アプリ基盤に「建て増し」する形で新アプリ基盤を構築
  • 相互に行儀よく棲み分けた上でどちらも問題なく動作する

f:id:eriotto:20160930174437j:plain

そして壮大な外科手術的努力の結果、完全な家庭内離婚が成立した、共有するのはセッションくらいである 以下、新アプリ基盤が獲得したもの一覧

  • DI(依存性の注入)の導入によるコード記述によるオブジェクトのインスタンス化の激減
  • DIの導入によるインスタンスのライフサイクルの厳密な管理(PerRequestLifetimeManager)
  • アクションフィルタの採用による関心の横断の実現
  • シンプルなコントローラークラス
  • 整理されたモデルクラス
  • ビジネスロジックに集中したサービスクラス
  • 適切にプーリングされたDB接続
  • 詳細な例外ログ
  • 自由な実行ログ

途中スレッドセーフでないフィルター処理に泣かされた事もあったが、良い勉強になった、特に分散トランザクションコーディネータ関連の知見は今後に生かせそうだ

設計的な反省点はいくつかあるが、どれも致命的ではないし、これも今後に生かしたいと思う

そして運用開始して一週間時点の不具合は4件、どれも他責扱いで瑕疵対象にはならなそうなものばかりだ 何も無さ過ぎて不安になってしまうレベルだが、当然、何も無いのは良い事だ

自分自身、普段はインフラをやっており「開発に参加するたびにデスマーチ」のトラウマがあるのだが、プロジェクトの成否を分けるのはリーダーの最適な人的リソースの配分であると強く感じた

今回、良いリーダーとよいチームだったと思う