「One .NET Vision」をコンセプトに、開発フレームワークが急速に進化
今回の「GrapeCity ECHO 2021」の開幕を告げる最初の講演となったのは、マイクロソフト コーポレーションの井上章氏の「.NETの今と未来〜. NET 6最新アップデート」と題するセッションである。
現在の.NETでは、WindowsのデスクトップアプリケーションからWebアプリケーション、クラウド上のサービス、モバイルアプリケーション、ゲームアプリケーション、さらにはIoTやAI領域のサービスに至るまで、さまざまなタイプのソフトウェアの開発が可能だ。
具体的には、もともと.NET Frameworkでは、Windows FormsやWPF、ASP.NETなどのアプリケーションが開発でき、その後クロスプラットフォーム対応を謳う開発フレームワークとして登場してきた.NET Coreでは、ASP.NETに加えて、LinuxやmacOSといった環境もサポートする.NET Core 3.0以降には、Windows FormsやWPFなどもそこに移植されている。さらには、Xamarinと呼ばれるツールセットも加わり、iOSやAndroid向けのネイティブアプリケーションを開発していける環境が整うに至っている。
「ただ、これら.NET Framework、.NET Core、Xamarinでは、共通してC#によるアプリケーション開発が行えるものの、残念ながらベースクラスライブラリ群がそれぞれに異なっており、そこで実装されているAPIにも相違がありました。例えば.NET Framework上においてC#で記述したコードを、そのまま.NET CoreやXamarinで使うことができなかったわけです」と井上氏は語る。
これに対しマイクロソフトが打ち出してきたのが「One .NET Vision」というコンセプトで、これら3つのフレームワークを統合して、単一のSDKおよびベースクラスライブラリによる提供が目指された。そして、このコンセプトは.NET 5において具現化され、2021年11月8日には、その最新版となる「.NET 6」が正式にリリースされている。
「.NET 6の特徴としては、パフォーマンスが大幅に向上していることに加えて、C# 10やF# 6などの最新の言語、あるいはARM64アーキテクチャで実装されているApple Silicon(ARM64)のサポートなどがあげられます。さらに、サポート期間3年のLTS(Long Time Support)でのリリースとなっており、本番環境で安心してお使いいただける点も重要なポイントです」と井上氏は紹介する。
その一方で、古いアーキテクチャに基づく技術といえる、ASP.NET Web FormsやWCF(Windows Communication Foundation)やWF(Windows Workflow Foundation)などは、.NET 6においてはサポートされていない。
なおマイクロソフトでは、この.NET 6のリリースと同時期にVisual Studioの最新版となる「Visual Studio 2022」も登場している。そこでは、従来の32ビットだった実行ファイル、devenv.exeが64ビット化され、ツール自体のパフォーマンスも大きく向上している。さらに「ホットリロード」(Hot Reload)の機能が強化されていることも注目される。これは、アプリケーションを実行中に行ったコード変更が、直ちに実行中のアプリケーションに反映されるというもので、コード開発やデバッグの効率化に寄与する。
話を.NET 6に戻すと、各フレームワークについても、いろいろなかたちで機能強化がなされている。例えば、「ASP.NET Core Blazor」。それ自体は、.NET Core 3.1で登場した新しいフレームワークだが、その利用によりWebのフロントエンドUIの開発をC#で行えるようになる。具体的には、Blazorでは最近のモダンなWebブラウザが標準搭載するWebAssemblyの技術を採用しており、C#のコードをWebブラウザのWebAssemblyで実行させるための仕組みを提供しているわけだ。
「.NET 6では、ASP.NET Web Formsがサポート外となっていますが、コンセプト的にも近いBlazorを利用することで、これまでと同様のスタイルでWebアプリケーションのフロント開発を行うことが可能です」と井上氏は言う。
またBlazorには、Blazor WebAssemblyとは別に、Blazor Serverという実行形態が用意されている。これについて、Blazor WebAssemblyではC#のプログラムがDLLとしてブラウザ側にロードされるため、サイズによってはペイロードなどが問題になるケースも考えられる。
ブラウザ側で実行される分、パフォーマンスの面で不利になることもあるわけだ。これに対しBlazor Serverでは、プログラムが基本的にはサーバーサイドで実行され、その実行結果が、Web SocketをベースとしたSignalRと呼ばれる同期通信のフレームワークを介してブラウザ側に送信される形態となる。当然、パフォーマンス的には有利だといえる。
「ただし、SignalRの通信では永続的なHTTPのコネクションが必要で、Blazor WebAssemblyのようにオフライン実行はできません。こういった特徴を踏まえつつ、いずれの実行形態を選択するかを判断することになります」と井上氏は説明する。
そのほか.NET 6では、新たに「.NET Multi-platform App UI」(.NET MAUI)というフレームワークが利用可能となる。もっともこのMAUI自体は、.NET 6と同時にリリースはされておらず、正式には2022年春の登場予定となっている。.NET MAUIを使うことで、iOS、Android、macOS、Windowsのアプリケーションを、単一のプロジェクト、単一のコードベースで開発していくことが可能。「.NET MAUIは、.NET Core 3.1で実装されていたXamarin.Formsの進化型として.NET 6の中に統合されており、その利用によりマルチデバイスをターゲットとしたネイティブなアプリケーションをC#で作成することができます」と井上氏は語る。
一方、クラウド側のサービス開発という観点について、.NET 6では新たにMinimal APIと呼ばれる実装方法により、よりシンプルにWeb APIを記述できるようになった。具体的には、名前空間を書いてクラス定義を行うという従来のような方法ではなく、1つのファイルの中にさまざまなWebメソッド、APIを効率的に書いていくことができるようになっている。
以上のように、.NET 6は開発者にさまざまな新たな価値を提供するものとなっているわけだが、その一方で.NET Frameworkについては、現在の最新版である4.8が、最後のメジャーバージョンとなる旨、マイクロソフトからアナウンスされている。したがって、マイナーバージョンアップや比較的軽微なアップデートは継続されるものの、大幅な機能追加が今後行われることはない。
「とはいえ、既存の.NET Frameworkアプリケーションを、すぐに.NET Coreや.NET 5、.NET 6に移行すべきかというと、決してそういうわけではありません。.NET Frameworkのサポートライフサイクルのポリシーにはこれまで通り変更はなく、ターゲット環境であるWindows OS側のサポートが続く限り、.NET Frameworkのサポートも継続されるかたちとなります」と井上氏は強調する。
もちろん、新規開発においては、やはり.NET 6の採用が望ましいものの、すでに安定稼働している.NET Frameworkで開発した既存資産に関しては、できる限り4.7、4.8などの新しい環境に移行しておくことで、比較的長期のサポートが期待できるわけだ。ちなみに、仮に.NET Frameworkの資産を.NET 6にアップグレードしたいという場合には、「.NET Upgrade Assistant」と呼ばれる移行支援ツールなども用意されている。
ともあれ、完全に統一化された開発フレームワークとして進化を続けていくことになる.NETの動向には、今後も要注目である。
開発技術、マインドの両面でレガシーからの脱却を目指す
続く2つめのセッションには、株式会社両備システムズの秦考洋氏が登壇。「レガシー技術スタックのチームがモダンなWebアプリ開発をした話」と銘打たれた講演を行った。両備システムズは岡山市に本社を置くSIer。地方自治体をはじめとする公共分野、医療分野および民間企業向けのSIサービスを主な事業としている。
また、同社は地方自治体向け健康管理システム「健康かるて」というパッケージ製品を提供していることで知られる。「健康かるては、オンプレミスまたは閉域網の環境で動作するWebシステムで、全国の自治体の約40%に当たる約680団体でご利用いただいています」と秦氏は紹介する。
このシステムでは、開発フレームワークとしてASP.NET Web Forms(.NET Framework 4.x系)を採用。プログラミング言語には、Visual Basicを利用している。また、フロントエンド系のJavaScriptライブラリには、jQueryを採用。Internet Explorerのサポートを念頭に1.x系を継続利用している。
「さらにCSSについては、600以上ある画面のUIに関する統一性を担保するために、独自のフレームワークのようなものを作成して運用していますが、メンテナンスに非常にコストがかかる状態となっています」と秦氏は言う。
そのほか、グレープシティのグリッドコントロールである「SPREADF for ASP.NET 7.0J」、および帳票ソリューション「Active Reports for .NET 7.0」なども活用しているという。
以上のような道具立てて開発・保守されている健康かるて自体、ターゲットブラウザがInternet Explorerに限定されており、しかも後方互換モードという古いモードで動作しているなど、システムとしてはレガシーなものだったわけだが、それを担当していた両備システムズの開発チームでは、先年、クラウドから提供するBtoGtoCのコンシューマ向けWebアプリケーションを開発する運びとなった。
「それに際しては、いまや『スマホファースト』といわれる時代でもあり、モバイルアプリのようなUX(User eXperience)の実現が望ましく、また将来的なアプリ化も見据えるかたちで、フロントエンドとバックエンドを分けたいとの考えからSPA(Single Page Application)のフレームワークの採用を検討しました」と秦氏は語る。
具体的な候補としては、AngularやReact、Vue.jsといったところが上がったという。普及の状況や学習のしやすさなど、さまざまな観点から検討を重ね、最終的にVue.jsを採用することにした。このときバージョンについては、リリース直後であることのリスクを回避するため、最新の3.xを敢えて避け、2.xを選択した。
また、CSSフレームワークについては、当時人気の高かったBlumaを採用。これについて秦氏は「人気の高さという点では、Bootstrapという選択も当然あったわけですが、その頃はjQuery依存であり、せっかくならばJavaScriptに依存しないフレームワークを選択しようということで、コンポーネントの豊富さ、あるいは多様なUIを簡便に実装できるという点なども評価してBlumaを導入することに決めました」と秦氏は振り返る。
続いてバックエンドだが、開発フレームワークと言語については、チームの既存のスキルセットが.NETが中心だったということもあり、また一方では今後Windows以外のプラットフォームにもチャレンジしていく可能性も睨みながら.NET CoreとC#の採用を決めた。またORマッパー(ORM)に関しては、Entity Framework Coreを選定。これについて今回の開発では既存のデータベースを利用することになっており、スキャフォールディングで対応することにした。
以上のような各フレームワークを採用して進められた、両備システムズにおける新システムの開発だったが、特にバックエンドについては、C#の活用で他のモダン言語と同様の仕様に基づく開発スタイルが取れたことを高く評価。「.NET Coreには、これまで利用していたフレームワークとの互換性もあり、スキルの移行なども容易でした。
何よりも、Windowsプラットフォーム以外の選択肢も広がり、実際、開発環境自体もLinux上へと置き換えを進めています。さらに、Azure FunctionsやAWS Lambdaなどのサーバーレス環境やコンテナについてのサポートもあり、クラウド環境での強みを持っている点にも大きな安心感があります」と秦氏は強調する。
なお、今回のプロジェクトを通じてチームでは、単に技術面でのモダナイズにとどまらず、メンバー個々のマインド醸成に関する取り組みも実践してきている。例えば、技術情報を収集発信する文化を根付かせるため、チーム内でのLT(Lightning Talks)なども定期的に催した。「情報発信にかかわる心理的ハードルを下げるために、話題は技術情報に限らず受け入れるといった工夫なども行っています」と秦氏は紹介する。あわせて、トライ&エラーを受け入れる文化の醸成にも努めており、これについては新しい取り組みに対するハードルを下げながら、用意周到な準備なくトライしていけるような雰囲気作りを進めたという。
「当初は、マネージャである私が開発ツール等の選定も行っていましたが、現在ではチームメンバーからの提案なども多く寄せられるようになってきており、一連の取り組みの成果も確実に現れてきています」と秦氏は大いに手応えを感じているところだ。
3つのフェーズで進められる開発支援ツールの.NET 6対応
イベントの最後のセッションでは、グレープシティの氏家晋氏が「グレープシティ製品の.NET 6対応について」と題する講演を行った。
今回登場した.NET 6では、マルチプラットフォーム開発用のMAUIや新しいWindowsデスクトップ開発用のWinUI、そしてHTMLとC#でWebアプリケーションを開発するためのBlazorなどを目玉に、新しい開発フレームワークが提供されている。
「グレープシティの対応方針としては、まずはWindows Forms用製品とWPF用製品にフォーカスして、.NET 6への対応を進めていく予定です。やはりWindows Forms、WPFを活用したアプリケーションが、現時点で広く普及していて、ユーザーが非常に多いというのがその理由です」とセッションの冒頭、氏家氏は切り出す。
グレープシティ製品における.NET 6への対応に関する現在の状況と、今後のマイルストーンは以下の通りだ。まず2021年11月には第1弾として「DioDocs(ディオドック)」の.NET 6対応が済んでいる。DioDocs自体は、ExcelやPDFファイルを作成・編集するためのAPIライブラリだが、Windows FormsやWPFなどのUIテクノロジーに依存しない製品であるため、いち早く対応が完了。具体的には、同製品のV4J SP2(4.2.5)において.NET 6がサポートされている。
.NET Frameworkから.NET 6へ移行する重要なメリットとしては、やはりパフォーマンスの向上があげられる。「例えば、100×100の範囲のセルに文字を設定したExcelファイルをDioDocs for Excelで作成した場合の処理時間について、.NET 6へ移行後には約40%高速に動作するという結果が得られています」と氏家氏は紹介する。
続く第2弾としては、「ComponentOne(コンポーネントワン)」が.NET 6に対応している。ComponentOneは、Windows FormsやWPF、ASP.NETなどの.NET開発プラットフォームに対応した多彩なUIコントロールを提供する製品だが、12月22日にリリースされた2021J V3において.NET 6がサポートされている。そして、こちらに関してもパフォーマンスの大幅な向上が実現されているという。「1万行×20列の描画処理を、Windows Forms版のデータグリッドコンポーネント『FlexGrid』で実行した際の処理時間が、.NET 6への移行により、データの生成と設定で11%、描画で28%、列幅自動調整で31%、それぞれ高速化するという結果となっており、WPF版のFlexGridにおいても同様のパフォーマンス向上が見られます」と氏家氏は言う。
続く第3弾の.NET 6への対応は、2022年の3月以降、順次進められていくことになる。具体的な製品としては、帳票開発コンポーネントである「ActiveReports(アクティブレポート)」、表計算データグリッドコンポーネント「SPREAD(スプレッド)」、入力支援コントロールセット「InputMan(インプットマン)」、多段明細データグリッド「MultiRow(マルチロウ)」の対応が随時なされるとのことで、特にこれら製品を愛用する開発者にとっては、より早期のリリースが待たれるところだ。
以上、「GrapeCity ECHO 2021」で実施された3つの講演の模様をレポートしてきたが、最終セッション終了後には、受講者からの質問に講演者が答えるという質疑応答の時間も設けられた。そこでのやり取りについても少し触れていきたい。
まず、井上氏に対して「LTSで提供される.NETについてのサポートは3年間ということだが、例えば基幹システムなどの場合、移行してもまた3年後には新版へと移行しなければならないとなると、そもそもの移行がためらわれる」という趣旨の意見が寄せられた。
これに対し井上氏は「ご承知のように.NETも現在ではOSSとなっています。そうした意味ではOSSの供給サイクルをご理解いただくことが重要かと思います。具体的には、プロジェクトにおいて、例えばアジャイルやCI/CDによる自動化などを採用いただき、OSSの供給サイクルを意識した運用にして、最新版への対応を円滑に行っていただくというアプローチをとっていただければよいかと思います。そのことが、セキュリティや機能性などの面においても大きな安心につながるはずです」と応えた。
また、秦氏に対しては「SPAの開発は、ASP.NET Web Formsの開発と比較して生産性の点でどうだったか」という質問が上がった。これに対し秦氏は「生産性は、チームが得意とする分野がどの領域なのかということに依存します。バックエンドがAPI化されるSPAでは、フロント側のJavaScriptでの開発部分が多くなり、そこが得意なら当然SPAの採用が望ましいといえるわけです。一方で、SPAのメリットはフロントとバックエンドを分離できること、つまりJavaScriptが得意なチームとバックエンドのC#が得意なチームに分かれて開発できるわけで、そうした部分での生産性の高さというものはあるかと思います」と回答した。
クロスプラットフォーム開発フレームワークとして、限りなく進化を遂げる.NET。今回の「GrapeCity ECHO 2021」は、今後.NET開発者がどのように舵を切ればよいのかを考えるうえでの極めて有効な指針を与えてくれるものとなった。