asp.netからasp.net coreに移行した話
TRANSCRIPT
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で作ったほうが良いかが書かれている