AWS Microservice Extractor for .NET の解析時に自動でノードタイプを推奨表示してくれるようになりました

2022.08.06

いわさです。

昨年の AWS re:Invent 2021 にて .NET アプリケーションのモダナイゼーションを支援するツール AWS Microservice Extractor for .NET がリリースされました。
このツールを使うと、.NET アプリケーションを分析・可視化を行いサービスの分離やリファクタリングを行う際の作業を支援してくれます。

先日このツールがアップデートされ、分析で推奨事項を提供するようになったとのことです。
実際に使って何が出来るようになったのかを確認してみました。

オンボード

AWS Microservice Extracotr for .NET を使うためには、ソリューションファイルを含む解析するための .NET プロジェクト一式が必要です。
今回は先日以下の記事で作成した、ASP.NET Core MVC + EF Core なプロジェクトを使ってみたいと思います。

なお、対象リポジトリはソリューションファイル(.sln)を含んでいないのでプロジェクトファイル(.csproj)から Visual Studio を起動し自動生成されるソリューションファイルを使います。

AWS Microservice Extracotr for .NET を起動し、アプリケーションのオンボード操作を行います。
オンボード時に直前で用意したソリューションファイルを指定します。

指定したらオンボードを開始します。

これくらいの規模だと数秒で解析が終わりました。
どうやら内部処理で MS Build を使ったリビルドなどが行われているので、ビルドステップやマシンスペックに依存してオンボード処理は長くなりそうです。

視覚化

Visualizationメニューからビジュアルを確認してみましょう。

以前までは丸いオブジェクトが並んでいる形でしたが、最新では丸の中に何種類かのアイコンが並んでいます。
下部の凡例エリアを確認すると、Node Typeというものが新たに登場しています。
このアイコンの自動表示が、今回のアップデートで追加された機能です。

今まではノードの依存性まではわかるようになっていましたが、名前空間やクラス名から精査が必要でした。
今回のアップデートで自動的に抽出候補を識別して強調表示してくれるようになりました。

今回実行したサンプルプロジェクトの場合だと、POCO / User Interface / Data Access が表示されています。
POCO(Plain Old CLR Object) は Domain nodes を示しています。
User Interface は MVC での Controller などの UI に関連するクラスを示しています。
Data Access はデータベースやファイルシステムなどからデータを取得するクラスが示していて、今回だと Entity Framework に関連する DbContext が対象として抽出されています。

開発者はこれらの抽出された情報をそのまま使っても良いですし、あくまでも自動化された推奨事項なので無視して従来のとおり手動でグルーピングすることももちろん出来ます。
あくまでも推奨事項という点を覚えておいてください。

後続作業は同じで、グループ分けしてコード分離に進みます。
上記はかなり適当ですが、Fugaに関連する処理を個別のサービスとして切り出すためにグループ化しています。

このようにベースソリューションからサービスが切り離されます。
大量のクラスを含むソリューションの場合でもある程度自動でラベリングしてくれるだけでも、サービス分離設計が楽になる気がします。

さいごに

本日は、AWS Microservice Extractor for .NET が自動で既存ノードの種別を判断して推奨してくれるようになったので、どういった見え方になるのかなどをサンプルプロジェクトを使って確認してみました。

今回は Controller から Entity Framework の操作をしていたり、サンプルとしては少し物足りない感じもしますが、自動で分類をしてくれるようになったのでそれを参考にサービス分離の方針を考えることも出来るようになったよ、という点を覚えておきましょう。