ASP.NETからASP.NET Coreに
移行した話
株式会社gloops
高張大雅
自己紹介
• 名前
– 高張 大雅 (たかはり たいが)
• 所属
– 株式会社gloops 技術基盤部
• http://gloops.com/
個人活動
– Twitter @taiga_takahari
– Github https://github.com/ttakahari
アジェンダ
• ASP.NET Coreとは
• 移行したシステムの概要
• 実際に移行してみて
• まとめ
注意事項
• 記載内容は移行時の情報です
– 2016年8月中旬頃の情報
– 各ライブラリ / フレームワークでアップデート済み
の可能性あり
ASP.NET COREとは
ASP.NETとASP.NET Core
• ASP.NET
– .NET Frameworkで動く
• Windows上でしか動かない
– Web Forms、MVC、Web API、Web Pages、Signal R
• ASP.NET Core
– .NET Framework / .NET Coreどちらでも動く
• .NET Coreならクロスプラットフォームで動く
– Web API、Web PagesはMVCに統合
– Signal Rは開発中、Web Formsは廃止
ASP.NET4.6とASP.NET Core 1.0
http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx
移行の経緯
• 移行しようと思った理由
– ASP.NET CoreもRTMになったし何かアプリを作りた
い!
• 但し貧弱な企画脳…
• 既存の(未リリースの)社内アプリを移行してしまおう!
– 新規の実績は今後色々と出てきそうだけど移行
の実績は出てこなさそう
• トライして挫折した方々いるようですし…
移行したシステムの概要
移行したシステムについて
• 構成
– サーバーサイド
• データを登録・更新・参照するための管理画面
• 登録されたデータを取得するためのWeb API
• 常駐バッチ
– クライアントサイド
• サーバーサイドのWeb APIを実行
• プライベートNuGetでライブラリとして配布
システム構成図
管理画面 / Web API
常駐バッチ
DB / KVS
コンテンツアプリ
コンテンツアプリ
各ゲーム
コンテンツアプリ
配布したライブラリを経由して
Web APIにアクセス
コンテンツ運用
メンバー
コンテンツに
必要な情報を登録
今回移行したのはこの部分
アーキテクチャ (共通)
• 開発言語
– C# 6
• 稼働環境
– Windows Server 2012 R2 (サーバーOS)
– IIS 8.5 (Webサーバー)
• データストア
– SQL Server (DB)
– Redis (KVSキャッシュ)
アーキテクチャ (移行前)
• フレームワーク
– .NET Framework 4.6.1
– ASP.NET MVC 5.2.3 / Web API 2.2
• ライブラリ
– Dapper (DBアクセス)
– StackExchange.Redis (Redisアクセス)
– NLog (ロギング)
– Jil (JSONシリアライザ)
アーキテクチャ (移行後)
• フレームワーク
– .NET Core 1.0
– ASP.NET Core MVC 1.0
• ライブラリ
– Dapper (DBアクセス)
– StackExchange.Redis (Redisアクセス)
– NLog (ロギング)
– Json.NET (JSONシリアライザ)
実際に移行してみて
移行のしやすさ
• 移行にかかった期間
– アプリを動かすまでなら1週間くらい
– 完全移行は1ヶ月かからないくらい
移行のしやすさ
• アーキテクチャが重要
– フレームワークの移行性を重視した構成にしない
と結構ツラいかも
• Webアプリケーション(ASP.NET)の部分を切り離す
– 今回は移行性を重視していなかったけどテスタビ
リティのために各レイヤーを疎結合にしたら結果
として移行性が上がった
– 社内ライブラリは移行性が重視されていた
• http://www.buildinsider.net/enterprise/sansanreport/0
502
ツライこともある
• 当たり前のように使ってたものがなくなってる
– ConfigurationManager
• 構成ファイルの情報が取得しにくくなった
– DataTable
• なきゃないで色々と困ることもある
• が、.NET Core 1.1で復活を遂げた
– HttpContext
• HttpContext.Currentがない
• IHttpContextAccessorをDIで解決して使うしかない
ツライこともある
• ツールが貧弱
– 所詮preview版
– project.jsonを操作しようとするとVisual Studioが
良くてフリーズ、最悪お亡くなりになる
• パッチがあたって改善されたけど実感はない
• 仕方なくVisual Studio Codeで編集
• 今後project.jsonは廃止されていく(?)
パフォーマンスは?
• また別の機会に
– 計測済みだけどもうちょっと検証したいので
• ASP.NET CoreはTechEmpowerには掲載済み
– https://www.techempower.com/benchmarks/
• 他フレームワークと比較してみると正直微妙
• ASP.NETはないので比較不可能…
まとめ
ASP.NET Coreへの移行
• やってできないことはない
– 移行に向いたアーキテクチャが組めていれば問
題ない
– 色んなライブラリやフレームワークと密結合してる
としんどい
• .NET Core 1.1になって
– .NET Frameworkに大分寄ってきてるので今後更
に移行しやすくなる可能性はある
移行すべきかどうか
• 参考として
– ASP.NET開発者の人曰く
• 『Should I Use ASP.NET Core or MVC 5?』
• http://www.jeffreyfritz.com/2016/08/should-i-use-asp-
net-core-or-mvc-5/
– どういった時にASP.NET Coreで作ったほうが良い
かが書かれている
ASP.NETからASP.NET Coreに移行した話

ASP.NETからASP.NET Coreに移行した話