より効率的な開発が可能になった「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は使えない。使用する場合は拡張機能のインストールが必要となる。
AKSでコンテナの管理を容易に
井上氏が最後に紹介したのはコンテナサービスだ。Cloud Native Computing Foundation(CNCF)という団体では、「クラウドネイティブとは何か」を定義している。それを簡単にまとめたのが、次の図だ。
クラウドネイティブとは「コンテナ」「オーケストレーター」「サーバーレス(PaaS)」「CI/CD」「自動化(DevOps)」「マイクロサービス」といった技術要素からなる、「回復力」「管理力」「弾力性」「疎結合」「監視・問題検知力」を持ったアプリケーションを、クラウドのサービスとして作っていくことだ。「もちろん、これらすべての要素が含まれる必要はない」と井上氏。この中の要素を一部でも使い、クラウドのリソースをより有効活用して、遅くならない、止まらない、スケーラビリティを持ったアプリケーションを作ることを指す。
こうしたアプリケーションを作る際、重要となるのがコンテナである。ASP.NET Coreでは、LinuxベースのDockerコンテナを容易に作ることができる。しかし複数作ったコンテナをオーケストレーションするには、Kubernetesなどのシステムが必要になる。
だが、Kubernetesの環境整備は意外に手間がかかる。それを解決するのが、「Azure Kubernetes Service(AKS)」だ。「AKSを使えば、コンテナの管理が容易になる」と井上氏は説明する。
マネージドなKubernetesクラスタをチームで共有し、共同作業ができるようになるサービスも提供されている。それが「Azure Dev Spaces」だ。まだプレビュー版だが、これを使えばAKS上でのコンテナの実行とデバッグの実行が並行してできるようになる。
「チームで共有して開発する場合、開発者同士のオーケストレーションを考えなければならないが、このサービスを使えば、ほかの人に影響を及ぼさないように自分のコードを分離した上で、開発・デバッグすることが可能となる」
そのほかにも、マイクロソフトのAIソリューション「Azure Cognitive Services」や機械学習フレームワーク「ML.NET」も紹介。Azure Cognitive Servicesの活用例として、「Vision」(画像や動画の読解、顔認識、感情判別、OCR)を利用した、麺類の種類を判別するAIアプリ「Noodle Lens」のデモも実施した。
クラウドネイティブの時代はそこまで来ている。だが、どのようにアーキテクチャを作り、サービスを組み合わせればよいのか、迷うことも多い。
「そうした疑問に答えられるよう、マイクロソフトではAzureアーキテクチャに関するさまざまなリファレンスを用意している。ぜひ、参考にしてほしい」
また、Azureの基礎を学べる「Microsoft Learn」も用意されている。
「ソフトウェアはクラウド中心に動いている。そんな今こそ、まさにクラウドネイティブデベロッパーに向かっていくタイミングだ。その流れをマイクロソフトはこれからも支援していきたい」井上氏は会場の参加者に呼びかけ、セッションを締めた。
お問い合わせ
日本マイクロソフト株式会社