2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.NET Frameworkから.NETへの移行手順

2
Posted at

はじめに

.NET Frameworkで開発されたシステムは現在も数多く稼働しています。

しかし、Microsoftの開発リソースは.NETへ集中しており、新規開発では.NETが主流となっています。

そのため、

  • 将来的な保守性を向上させたい
  • クラウド活用を進めたい
  • 最新の.NETを利用したい

といった理由から、既存システムの移行を検討するケースも増えています。

本記事では、.NET Frameworkから.NETへ移行する際の大まかな流れと、実際によく発生する対応ポイントについて解説します。

※本記事では.NET Framework 4.xから.NET 8以降への移行を想定しています。

移行手順

移行は段階的に進めることが重要です。

Step1:現状調査

依存関係を確認します。

確認項目

  • NuGetパッケージ
  • サードパーティ製品
  • COM参照
  • WCF
  • WebForms
  • Windows API

など

Step2:ターゲットを決定

LTS版を選択するのが一般的です。

※LTS版(Long Term Support)とは、長期間にわたって安全かつ安定してソフトウェアを利用できるよう、不具合修正やセキュリティ更新のサポートが保証されたバージョンのことです。

Step3:Upgrade Assistantを利用

Microsoft公式ツールがあります。
※Visual Studio 2022以降で利用できます。
環境によっては表示されない場合があります。

  1. [ツール]ー[オプション]を開きます
    画像 (1).png
     

  2. [プロジェクトおよびソリューション]ー[Modemization]を選択し「True」にします
    画像 (2).png

  3. プロジェクトを右クリックし、アップグレードを選択します
    画像 (10).png
     

  4. 「所定の位置のプロジェクトをアップグレード」を選択します
    画像 (11).png
     

  5. アップグレードする.NETのバージョンを選択します
    画像 (12).png
     

  6. アップグレードするコンポーネントを選択します
    画像 (13).png
     

  7. アップグレードが始まります。
    画像 (14).png
     

  8. しばらくすると完了します
    画像 (15).png

Step4:NuGetパッケージ更新

古いパッケージを最新化します。

Step5:コンパイルエラー解消

  • System.Web → ASP.NET Core API

旧コード(.NET Framework)

using System.Web;

public string GetUserAgent()
{
    return HttpContext.Current.Request.UserAgent;
}

新コード(.NET)
.NETでは System.Web が存在しないため、そのままではコンパイルできません。

public class SampleService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public SampleService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public string? GetUserAgent()
    {
        return _httpContextAccessor.HttpContext?
            .Request.Headers["User-Agent"];
    }
}

  • HttpContext.Current → IHttpContextAccessor

旧コード(.NET Framework)
.NET Frameworkではどこからでも HttpContext.Current にアクセスできました。

public string GetLoginUser()
{
    return HttpContext.Current.User.Identity.Name;
}

新コード(.NET)
.NETではDI(Dependency Injection)を利用して取得します。

Program.cs
builder.Services.AddHttpContextAccessor();
public class UserService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public UserService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public string? GetLoginUser()
    {
        return _httpContextAccessor.HttpContext?.User?.Identity?.Name;
    }
}

  • app.config → appsettings.json

旧コード(.NET Framework)

app.config
<appSettings>
  <add key="ApiUrl" value="https://api.example.com" />
</appSettings>
利用側
string apiUrl = ConfigurationManager.AppSettings["ApiUrl"];

新コード(.NET)

appsettings.json
{
  "ApiUrl": "https://api.example.com"
}
利用側
public class SampleService
{
    private readonly IConfiguration _configuration;

    public SampleService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public string GetApiUrl()
    {
        return _configuration["ApiUrl"];
    }
}

Step6:テスト実施

  • 単体テスト
  • 結合テスト
  • 性能テスト
  • 画面確認

十分な検証を行ってから本番環境へ展開します。

おわりに

.NET Frameworkから.NETへの移行は、単純なバージョンアップではなく、アプリケーション基盤そのものの移行です。

しかし近年はUpgrade Assistantなどの支援ツールが充実しており、以前と比べて移行のハードルは大きく下がっています。

一方で、

  • WebForms
  • WCF
  • System.Web
  • 古いサードパーティライブラリ

などは移行時の注意点となるため、事前調査が重要です。

まずはライブラリや依存関係の棚卸しを行い、「本当に移行できるか」を確認することから始めるとよいでしょう。

特に業務システムでは、「コンパイルが通ること」よりも「既存機能が正しく動作すること」が重要です。

ツールによる変換をゴールにするのではなく、最終的な品質確認まで含めて移行計画を立てることが成功のポイントです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?