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

24
ASP.NETからASP.NET Core移行した話 株式会社gloops 高張大雅

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

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

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

株式会社gloops

高張大雅

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

自己紹介

• 名前

–高張大雅 (たかはりたいが)

• 所属

–株式会社gloops技術基盤部

• http://gloops.com/

個人活動

– Twitter @taiga_takahari

– Github https://github.com/ttakahari

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

アジェンダ

• ASP.NET Coreとは

• 移行したシステムの概要

• 実際に移行してみて

• まとめ

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

注意事項

• 記載内容は移行時の情報です

– 2016年8月中旬頃の情報

–各ライブラリ / フレームワークでアップデート済みの可能性あり

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

ASP.NET COREとは

Page 6: ASP.NETから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は廃止

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

ASP.NET4.6とASP.NET Core 1.0

http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx

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

移行の経緯

• 移行しようと思った理由

– ASP.NET CoreもRTMになったし何かアプリを作りたい!

• 但し貧弱な企画脳…

• 既存の(未リリースの)社内アプリを移行してしまおう!

–新規の実績は今後色々と出てきそうだけど移行の実績は出てこなさそう

• トライして挫折した方々いるようですし…

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

移行したシステムの概要

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

移行したシステムについて

• 構成

–サーバーサイド

• データを登録・更新・参照するための管理画面

• 登録されたデータを取得するためのWeb API

• 常駐バッチ

– クライアントサイド

• サーバーサイドのWeb APIを実行

• プライベートNuGetでライブラリとして配布

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

システム構成図

管理画面 / Web API

常駐バッチ

DB / KVSコンテンツアプリコンテンツアプリ

各ゲームコンテンツアプリ

配布したライブラリを経由してWeb APIにアクセス

コンテンツ運用メンバー

コンテンツに必要な情報を登録

今回移行したのはこの部分

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

アーキテクチャ (共通)

• 開発言語

– C# 6

• 稼働環境

– Windows Server 2012 R2 (サーバーOS)

– IIS 8.5 (Webサーバー)

• データストア

– SQL Server (DB)

– Redis (KVSキャッシュ)

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

アーキテクチャ (移行前)

• フレームワーク

– .NET Framework 4.6.1

– ASP.NET MVC 5.2.3 / Web API 2.2

• ライブラリ

– Dapper (DBアクセス)

– StackExchange.Redis (Redisアクセス)

– NLog (ロギング)

– Jil (JSONシリアライザ)

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

アーキテクチャ (移行後)

• フレームワーク

– .NET Core 1.0

– ASP.NET Core MVC 1.0

• ライブラリ

– Dapper (DBアクセス)

– StackExchange.Redis (Redisアクセス)

– NLog (ロギング)

– Json.NET (JSONシリアライザ)

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

実際に移行してみて

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

移行のしやすさ

• 移行にかかった期間

–アプリを動かすまでなら1週間くらい

–完全移行は1ヶ月かからないくらい

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

移行のしやすさ

• アーキテクチャが重要

– フレームワークの移行性を重視した構成にしないと結構ツラいかも• Webアプリケーション(ASP.NET)の部分を切り離す

–今回は移行性を重視していなかったけどテスタビリティのために各レイヤーを疎結合にしたら結果として移行性が上がった

–社内ライブラリは移行性が重視されていた• http://www.buildinsider.net/enterprise/sansanreport/0

502

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

ツライこともある

• 当たり前のように使ってたものがなくなってる

– ConfigurationManager

• 構成ファイルの情報が取得しにくくなった

– DataTable

• なきゃないで色々と困ることもある

• が、.NET Core 1.1で復活を遂げた

– HttpContext

• HttpContext.Currentがない

• IHttpContextAccessorをDIで解決して使うしかない

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

ツライこともある

• ツールが貧弱

–所詮preview版

– project.jsonを操作しようとするとVisual Studioが良くてフリーズ、最悪お亡くなりになる

• パッチがあたって改善されたけど実感はない

• 仕方なくVisual Studio Codeで編集

• 今後project.jsonは廃止されていく(?)

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

パフォーマンスは?

• また別の機会に

–計測済みだけどもうちょっと検証したいので

• ASP.NET CoreはTechEmpowerには掲載済み

– https://www.techempower.com/benchmarks/

• 他フレームワークと比較してみると正直微妙

• ASP.NETはないので比較不可能…

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

まとめ

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

ASP.NET Coreへの移行

• やってできないことはない

–移行に向いたアーキテクチャが組めていれば問題ない

–色んなライブラリやフレームワークと密結合してるとしんどい

• .NET Core 1.1になって

– .NET Frameworkに大分寄ってきてるので今後更に移行しやすくなる可能性はある

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

移行すべきかどうか

• 参考として

– 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で作ったほうが良いかが書かれている

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