VB + WebFormsから

C# + API/MVCに移行している話

宇都宮 諒(@ryo511)

城東.NET #20

2018-05-16

自己紹介

  • 宇都宮 諒(うつのみや りょう)​
  • 株式会社 一休 宿泊事業本部
    • 2017年4月入社
  • 職種は「フロントエンドエンジニア」
    • 言語は​JavaScript 7割 .NET 3割くらい
  • ​Twitter: @ryo511

一休.com

  • 宿泊予約サービス
  • 現行システムが作られたのは約10年前
  • 当時のプロジェクトのコードネームは「Waikiki」
  • AWS Elastic Beanstalk上で稼働中
  • .NET Framework 4.6(4.7へ移行中)
  • 言語:VB.NET
  • フレームワーク:ASP.NET WebForms
  • VBコードの行数は100万行以上
    • ユーザ画面・管理画面・バッチの合計

課題

  • データアクセス層に型のないDataSetを使っていて、静的型付けの恩恵が受けられていない
  • UserControlがPageと密結合していて、保守性が低い
  • aspxのコードビハインドはユニットテストが書けない
  • Web APIがHTTPの仕様を活用していない
    • たとえば、パラメータエラーがステータスコード200で返ってくる
  • ​VBは文法が冗長
    • ラムダ式で End Function とか書きたくない…

1. データアクセス層の改善

  • データアクセス層を単一プロジェクト化
  • DBアクセスにはDapperを導入
  • Dapperを使うプロジェクトはC#を使用
  • データアクセス層も型がある!
  • ユニットテスト環境の整備
  • ↑は2015年〜2016年あたりに実施

2. Web APIの改善

  • ASP.NET Web APIを導入
  • ふつうのREST API
  • フロントエンド側でエンドポイントを切り替えるだけなので、導入のハードルは低め

3. MVCの導入

  • ASP.NET MVCを導入(したばかり)
  • 検索・DB問い合わせの並行処理によるパフォーマンス改善が主な目的

(今のところの)所感

  • DapperはJOIN等を駆使した複雑なクエリを扱うのに向いている
  • ASP.NET Web APIは書きやすい
    • ふつうのWebアプリケーションフレームワークのお作法で書ける
  • ASP.NET MVCはこれから
    • Razorが使えるだけでも導入した価値あり
    • パフォーマンス改善も期待できる
  • C#は書きやすい
    • 行末セミコロンと括弧の省略だけは、VBの方が好きだけど…
Made with Slides.com