前回「
.NETがLinux上でも動作する。.NET Core移行とOpen棟梁の.NET Core対応情報」という内容で投稿を行いましたが、今回は.NET Core2.0移行の「移行性」に関する報告を行います。
<サマリ>
最初にサマリをしてしまうと、
対象 | 評価 |
---|
Windows Forms | 対象外 |
WPF | 対象外 |
Console | 非常に高い |
ASP.NET Web Forms | 対象外 |
ASP.NET MVC | 中程度 |
ASP.NET WebAPI | 高い |
SPA | 対象外 |
となりました。
対象となるアプリケーションは、
Console, ASP.NET MVC, ASP.NET WebAPIで、対象外のモノは .NET Coreに含まれないUIサブシステム(UIフレームワーク)のモノです。
<ポイント解説>
個別の解説は以下のようになります。
対象 | 解説 |
---|
Console | app.configのappsettings.json化と、その初期化コードを足す程度で移行作業が完了した。 |
ASP.NET MVC | 上記に加え、「脱System.WebによるAPI変更」、「新しいDIによる構成方法の変更」、「要求処理パイプラインの変更」、「認証周りのAPIの変更」など、技術的な難易度は少々高いが、コード変更(ポーティング)の手数はそれほど多くならない。 |
ASP.NET WebAPI | 技術的には、CORSの構成方法が異なっている以外、前述のMVCと大差はないが、WebAPIはMVCと比べてUIレイヤ ≒ APIのI/F変更の多いフレームワーク レイヤが薄いので、移行の難易度はMVCほど高くない。また、WebApiCompatShimを使用すると.NET Frameworkと同じスタイルでインターフェイスを記述できるので移行性は更に高まる。 |
UIサブシステム(UIフレームワーク)が複雑であるほど、APIのI/F変更の多いフレームワーク レイヤが厚くなるので、移行性は低くなるものと思われます。
<移行における注意点>
実際のプロダクトを移行する場合は、.NET Framework同梱物、OSSパッケージ、サードパーティー製のコンポーネントの
.NET Standard, .NET Core バージョンが提供されているかどうか?に注意を払って下さい。大きなところで、型付DataSetや、System.DirectoryServices、Microsoft.Office名前空間、DotNetZip、帳票製品やDBMSのデータプロバイダがあり、無ければ代替品を探す必要があると思います。
例えば、Oracle ODP.NET, Managed Driverについては、まだ提供されていないようでした。気なるようでしたらNuGetのWebサイトから*.nupkgのマニュアル・ダウンロードを行い、拡張子を*.nupkgから*.zipに変更することで同梱物を確認することができます(詳しくは、libフォルダ内にnetcoreやnetstandardが入っているかどうかで判断可能)。なお、2018年3月6日に公開されたβ版が、
Oracleのサイトからダウンロードできるようになっているようなので、近々、正式版のOracle ODP.NET, Managed Driverが提供されるかもしれません。
<今後の展望>
先日、.NET Core 3.0のリリース予定がアナウンスされ(2018年後半に.NET Core 3の最初のプレビューを公開し、2019年に最終版をリリース)、その中で、「Windowsデスクトップパック」なるものが提供され、Windows FormsやWPFも.NET Core対応される旨がアナウンスされました。
.NET Core 3 and Support for Windows Desktop Applications | .NET Blog
https://blogs.msdn.microsoft.com/dotnet/2018/05/07/net-core-3-and-support-for-windows-desktop-applications/ これを真に受けると、.NET Framework側はメンテナンス・フェーズに突入し、.NET Core側がメインストリームになっていくように思います。実際のところ、昨今の.NET Frameworkのリリースでは、ASP.NET MVC5やASP.NET Identity2には、大きな変更は入っておらず、.NET CoreのASP.NET MVC6やASP.NET Identity3に対して新しい機能の追加などが行われています。
日本のエンタープライズでは、VB6資産などもまだまだ残っていることもあり、.NET Framework資産もまだまだ利用され続けていくことになると思いますが、Cloud / Mobile、IoT / AIなどの新しい分野や新規開発では、.NET Coreがメインストリームになっていくんじゃないでしょうか?と思います。