より効率的な開発が可能になった「Visual Studio」「.NET Core」
「アプリケーション開発者がクラウドネイティブを考えなければいけない時代となった。そこで今回は、マイクロソフトが提供する、クラウドネイティブを考えていく上で欠かせない技術をデモを交えて紹介していく」
こう語り、井上氏のセッションは始まった。
マイクロソフトが提供する開発ツール「Visual Studio」はWindowsのみがターゲットではない。LinuxやmacOSでも動く「Visual Studio Code」、Mac版のVisual Studio「Visual Studio for Mac」も用意されている。
Visual Studioは2019年、メジャーバージョンアップが予定されている。このセッションが行われた2月14日の朝、「Visual Studio 2019」のPreview 3がリリースされた。「機能すべてに触れることはできないが」と前置きした上で、井上氏は注目の新機能である「IntelliCode(インテリコード)」と「Live Share(ライブシェア)」を紹介した。
現在Visual Studioで提供されている、コーディング時の入力支援機能「IntelliSense(インテリセンス)」は、アルファベット順で入力候補が表示される。そのため、下位のメソッドなどが見えづらいといった課題があった。それをAIを使い、改善したのがIntelliCodeだ。IntelliCodeでは使用される可能性の高いメソッドに★マークをつけ、上位に表示する。
「コードのコンテキストの流れから、AIが予測して並び替えてくれる。開発者にとってかゆいところに手が届くようになった」
一方のLive Shareは、自分が開いているプロジェクトを環境そのままに、ほかの人と共有できる機能である。
「Live Shareボタンを押すとURLが発行されるので、それを通知したい人にメールやSlackで送るだけ。共同で編集作業ができるようになる。ペアプログラミング、モブプログラミングができるツールとして、ぜひ活用してほしい」
変わりつつあるのはVisual Studioだけではない。.NETも「.NET Core」の登場で、MacやLinux上でも使えるようになった。その.NET Coreも2019年、メジャーアップデートが予定されており、現在「.NET Core 3.0 Preview」がリリースされている。
特筆すべき点について、井上氏は「Windowsプラットフォームに限定されるが、今まで.NET Frameworkで作っていたWPFやWindows Formsのようなデスクトップアプリケーションが.NET Coreでも作れるようになった」と言及。つまり.NET Coreの最新のAPIやライブラリを使って、さまざまな機能が実装できるようになったというわけだ。
.NET Core 3.0のCLIツールを開くと、すでにWPFおよびWindows Formsのテンプレートが用意されている。デモでは.NET Framework 4.5.2で作ったWPFアプリケーションをコピーし、.NET Core側にペーストするだけで移植してみせた。「実際には使用しているAPIやサードパーティー製のライブラリに依存するケースもあるので、単純にコピーするだけでうまく移植できないこともある。だが、これまでと比べると簡単に移植できることは間違いない」と井上氏。また、.Net Coreを使用するメリットについて井上氏は、「ターゲットとする先に.NET Coreのランタイムやライブラリが入っていなくても、配布できる形態を作ることができる」と語る。
「Blazor」なら、JavaScriptやAngular、Reactの知識が不要に
次に井上氏が取り上げたのが、ASP.NETのWebアプリケーション側の技術「Blazor」である。Visual StudioでASP.NET MVCなどのアプリケーションを実装する場合、C#に加えて、JavaScript、AngularやReactといった知識も必要になる。そこでフレームワークであるBlazorを使うと、JavaScriptを書くこともなく、フロンエンド側のWebUIを.NET(WebPagesとRazor構文)で開発できるようになる。もちろん、AngularやReactの知識も不要。WebAssemblyという一種のアセンブリ言語を動かして、今までJavaScriptで動かしていた部分をネイティブコードのパフォーマンスレベルで動かすことができるため、プラグインが必要なくなるのだ。
もうひとつ、Blazorにはサーバーサイドで動かすモデルがある。それが「Razor Components」である。これはASP.NET Core 3.0に統合されており、サーバーサイドの.NET Coreプロセスで実行する。クライアントUIとの相互通信はSignalR(WebSocket)を使用する。
BlazorとRazor Componentsの違いは次の図の通り。Blazorは完全にブラウザ上のUIスレッドでWebAssemblyとして動く。一方、Razor ComponentsはSignalRを介して、サーバーサイドの.NETのプロセスで動く。
「Razor Componentsを選ぶと、オンラインの環境が必須となる。Blazorだと、作り方によってはオフラインでも動くモノが作れる。また、サーバーサイドのメリットとしては、Visual Studioでデバッグができる。クライアントサイドだと、ブラウザの開発ツールなどを使ってデバッグしていくことになる。どちらを選択するかは作りたいアプリケーションにもよる」
現時点で、Razor ComponentsはVisual Studio 2019をインストールするだけで使えるが、Blazorは使えない。使用する場合は拡張機能のインストールが必要となる。