September 2017

Volume 32 Number 9

.NET Core - 方法や場所を選ばない .NET アプリの作成

Andrew Hall | September 2017

Microsoft .NET はもはや Windows 専用ではなくなりました。.NET Core では、任意の言語 (C#、Visual Basic、F#) を使用して、任意の OS (Windows、macOS、Linux) で動作するアプリケーションを作成できます。当然ながら、自身が選んだプラットフォームをターゲットにするアプリケーションを作成できるとしたら、.NET 開発で折り紙付きの優れた開発者ツールも同じように使えることを期待します。さいわい、サポート対象のプラットフォームが増えるにつれて、優れた .NET アプリケーションの作成に使用できるツールも用意されています。 

今回は、個人の作業スタイルと OS に基づいて利用可能な開発者ツールを紹介します。まず、SDK に含まれるコマンドライン ツールを取り上げます。このツールは任意のエディター (お勧めは Visual Studio Code) と組み合わせることができます。次に、Visual Studio 2017 の優れた新機能を説明してから、Visual Studio ファミリの最新メンバーである Visual Studio for Mac を紹介します。最後に、これらのツールを使用して、ソフトウェアのコンテナーを活用し、作成したアプリを Microsoft Azure クラウドでシームレスにテストする方法を示します。

基本概念

ここでは一貫性を保つために「.NET Core」という用語を使用しますが、この名前には、.NET Core と .NET Standard という 2 つの重要なテクノロジーが含まれています。.NET Core とは、アプリケーションを実行するクロスプラットフォーム ランタイムです。.NET Standard とは、コンパイラ指定の API のセットです。この API がクラス ライブラリのターゲットとして使用されるため、この標準をサポートする任意のランタイムで、1 つのライブラリを実行できます。たとえば、.NET Core 2.0、.NET Framework 4.6.1、および Mono 4.8 は、.NET Standard 2.0 以前のクラス ライブラリをサポートします。この概念を詳しく理解するには、今月号のコラム「.NET Core と .NET Standard の分かりやすい解説」をご覧ください。

.NET Core と .NET Standard 2.0 がサポートする言語も重要です。大まかに言えば、どちらのテクノロジーもバージョン 2.0 では、C#、Visual Basic、および F# をサポートします。ただし、このリリースの Visual Basic の目的は、.NET Standard 2.0 クラス ライブラリへの対応でした。つまり、Visual Basic ではクラス ライブラリとコンソール アプリケーション向けのテンプレートしか提供していませんが、C# と F# には ASP.NET Core 2.0 アプリケーション向けのテンプレートが用意されています。

強化された共通プロジェクト ファイル

.NET Core プロジェクトで作業して最初に気付くことの 1 つは、共有するのが非常に単純化された共通プロジェクト形式であることです。つまり、あるツール (コマンドライン ツールなど) で作成されたプロジェクトは、.NET Core をサポートするすべてのプラットフォーム (Visual Studio や Visual Studio for Mac など) で動作します。この新しいプロジェクト ファイル形式により、GUID の必要性が取り除かれ、インクルードするファイルを明示的にリストする必要がなくなります。その結果、バージョン管理に更新をコミットする際にマージの競合が大幅に少なくなります。以下のコードは、新しい C# .NET Core コンソール アプリケーションのプロジェクト ファイルのコンテンツ全体を示しています。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
</Project>

また、この共通形式により、同じチームのメンバーは、メンバー自身が選んだデバイスとプラットフォームを使用して作業できます。各チーム メンバーが作業するプラットフォームが Mac、Windows、Linux と異なっていても、全員がシームレスに同じプロジェクトに参加できます。最新のプロジェクト形式の詳細については、aka.ms/newprojectfile を参照してください。

コマンドライン ツール

すべての開発者ツールの基礎はソフトウェア開発キット (SDK) です。.NET Core でもそれは変わりません。.NET Core SDK に不可欠な部分の 1 つがコマンド ライン インターフェイス (CLI) です。開発者はこのツールを使用して、コマンド ラインからアプリケーションを作成、ビルド、および実行できます。この CLI があれば、負荷の高いツールをインストールする必要なく、好みのエディターを使用してアプリを作成できます。はじめに、無料の .NET Core SDK (dot.net から入手可能) をインストールします。

SDK のインストールが完了したら、好みのコマンド プロンプトを開いて「dotnet --help」を実行し、使用可能なコマンドすべてのリストを表示します。dotnet の各コマンドが .NET CLI のドライバーです。その文法は「dotnet <動詞> [パラメーター]」です。たとえば、「dotnet new」と入力すると、作成に利用可能なプロジェクトの種類のテンプレートがすべて表示されます。  新しいプロジェクトを作成するには、「new」アクションにパラメーターとして短い名前を指定します。たとえば、「dotnet new razor」と入力すると、新しい .NET Core 2.0 の Razor ページ (この優れた新機能については、aka.ms/razorpages [英語] を参照してください) を備える C# ASP.NET Core Web アプリケーションが作成されます。アプリケーションを実行するには、「dotnet run」と入力します。その結果、アプリケーションがビルドされて起動します。出力文字列に示されている URL (http://localhost:5000 など) をブラウザーで開くと、ビルドしているアプリケーションを操作できます。  つまり、開発とは、アプリケーションをビルドして実行するために好みのエディターを選択するというシンプルな問題になります。

単体テスト

アプリケーションを用意したら、開発ライフ サイクルの比較的初期の段階で、単体テストのサポートを追加します。単体テストは当然 IDE で実行できますが、単体テストを .NET CLI から直接ビルドして実行することもできます。 

「dotnet new」には、xunit と mstest という 2 つの種類が異なる単体テスト プロジェクトがあります。最初に、好みの単体テストのテスト フレームワークを使って単体テスト プロジェクトを作成します。たとえば、「dotnet new xunit」と入力後、テスト プロジェクト フォルダーで「dotnet add reference <テスト対象のプロジェクトのパス>」と入力すると、CLI がそのプロジェクト ファイルへの参照を追加します。単体テスト プロジェクトを用意したら、CLI で「donet test」コマンドを実行し、テスト プロジェクトを実行します。xunit プロジェクトでも mstest プロジェクトでも、選択するプロジェクトの種類を問わず、Visual Studio、Visual Studio for Mac、および CLI によってサポートされます。

Visual Studio Code

好みのエディターを自由に使用できますが、.NET Core CLI と連携する軽量な編集操作を希望する場合は Visual Studio Code がお勧めです。  Visual Studio Code は、ソース管理とデバッグ サポートが組み込まれた軽量のクロスプラットフォーム エディターです。Visual Studio Code と .NET CLI を併用すると、任意のプラットフォームを選んで .NET アプリケーションをビルドできます。前述のように、まず、.NET Core SDK をインストールする必要があります。コンピューターへのインストールが完了したら、code.visualstudio.com からVisual Studio Code をインストール後、Visual Studio Code の左側にある [拡張機能] タブを選択して、Microsoft の C# 拡張機能「C# for Visual Studio Code (powered by OmniSharp)」をインストールします (F# を使用している場合、Ionide-fsharp 拡張機能もインストールします。C# 拡張機能は、.NET Core のビルドとデバッグ サポートに必要です)。 これで、Visual Studio Code を使って .NET Core プロジェクトを開発する準備が整います。 

C# 拡張機能により、Visual Studio Code が代わりに CLI を呼び出して、デバッグ目的でアプリケーションをビルドして実行できるようになります。プロジェクトを作成したら、Visual Studio Code を開き、[ファイル] メニューの [フォルダーを開く] を選択します。C# ファイル (.cs) を開くと、エディター上部のバーに確認メッセージが表示され、ビルドとデバッグに必要なアセットを生成することを提案します (図 1 参照)。[Yes (はい)] を選択すると、2 つのファイルが生成されます。1 つは Visual Studio Code からビルドを実行できる tasks.json、もう 1 つはデバッグを可能にする launch.json です。これで、Visual Studio Code から編集、コンパイル、デバッグを直接行えるようになります。

ビルドとデバッグに必要なファイルの生成を提案する Visual Studio Code

図 1 ビルドとデバッグに必要なファイルの生成を提案する Visual Studio Code

Visual Studio

Visual Studio は、引き続き世界トップクラスの開発者エクスペリエンスのサポートします。このことは .NET Core のツール サポートについても同様です。.NET Core 2.0 のサポートは、Visual Studio 2017 (バージョン 15.3) で導入されています。Visual Studio で .NET Core 2.0 アプリケーションの作成を始めるには、.NET Core 2.0 SDK をダウンロードしてインストールする必要があります。SDK をコンピューターにインストール後、Visual Studio を再起動すると新しいプロジェクトのターゲットとして .NET Core 2.0 を確認できるようになります。

Microsoft は、Visual Studio 2017 で、今までで最も生産性の高い開発エクスペリエンスを提供することを目標にしています。たとえば、コード ナビゲーションが改善されています。リファクタリングや迅速な修正のための新たなコマンドが多数追加されています。コード スタイルが強化されています。Live Unit Testing も追加されています。

ナビゲーションとリファクタリング: コードを操作する場合、コード ベースまわりのナビゲーションの優れたサポートが重要だと考えられます。Visual Studio 2017 でのコード ナビゲーションにおける最も興味深い改善点は以下のとおりです。

  • 実装に移動 ({b>Ctrl<b}+{b>F12<b}): 基本データ型またはメンバーから、さまざまな実装にナビゲートします。
  • すべてに移動 ({b>Ctrl<b} + {b>T<b} または {b>Ctrl<b} + コンマ [,]): 任意のファイル、種類、メンバー、またはシンボルの宣言に直接ナビゲートします。この機能の上部に並んでいるアイコンを使用して結果のリストをフィルタリングしたり、クエリの構文 (ファイルに対する「f searchTerm」、種類に対する「t searchTerm」など) を使用することもできます。
  • すべての参照の検索 ({b>Shift<b}+{b>F12<b}): 構文の色付け表示を使用して、[すべての参照の検索] の結果を、プロジェクト、定義、およびパスの組み合わせによって、独自にグループ化することができます。また、検索結果を「ロック」できるため、元の検索結果を残したまま、他の参照の検索を続けることができます。
  • インデントのガイド: 灰色の縦の点線がコード内のランドマークとしての役割を果たし、ビューのフレーム内のコンテキストを提供します。この機能は、人気の Productivity Power Tools で利用したことがあるかもしれません。

また、コード ベースを単純にナビゲートするだけでは不十分です。コード内で変更またはクリーン アップする部分がある場合、リファクタリングを支援するツールも必要だと考えられます。そのため、同じ名前のファイルへの型の移動、ファイルと型名の同期、パラメーターの null チェックの追加、パラメーターの追加、不足している switch/Select Case の追加、メソッドの同期化、メソッドからプロパティへの変換 (逆も同様)、マージ競合の解決などのサポートが追加されています。これらはほんの一部です。 

コード スタイル: Visual Studio 2017 では、EditorConfig を使用して、チームのコーディング規則を構成して適用し、リポジトリ全体の一貫性を高めることができます。EditorConfig は、オープンなファイル形式で、Microsoft はコミュニティの協力を得て、この形式内で .NET のコード スタイルをサポートします。チームは、コーディング規則の設定を構成して、エディター内でその設定の適用方法を選択できます (推奨、警告、エラーなど)。この規則は、EditorConfig ファイルを含むディレクトリ内のすべてのファイルに適用されます。プロジェクトごとに規則が異なる場合は、プロジェクトをそれぞれ個別のディレクトリに含め、プロジェクトごとの規則を別の EditorConfig ファイルで定義できます。EditorConfig ファイルは単なるテキスト ファイルです。そのため、ソース管理に簡単にチェックインでき、ソースと一緒に保存し移動できます。Visual Studio での EditorConfig のサポートについては、aka.ms/editorconfig を参照してください。

Live Unit Testing: MSTest または xUnit/NUnit テスト プロジェクトを用意したら、.NET Core プロジェクトに対して Live Unit Testing (LUT) を有効にすることができます。LUT は、Visual Studio 2017 Enterprise Edition で導入された新機能です。LUT を有効にすると、単体テストのカバレッジやテストの合格や不合格のフィードバックが、コード エディターで入力した直後から表示されます (図 2 参照)。これにより、コードの変更を検証するために、エディターを閉じて単体テストを実行する必要がなくなります。入力直後から、コード変更の影響を受けるすべてのテスト結果がフィードバックとしてエディターに即座に表示されます。

.NET Core プロジェクトで実行している Live Unit Testing

図 2 .NET Core プロジェクトで実行している Live Unit Testing

この新機能は、品質を重視するチームやテスト駆動開発 (TDD) を好むユーザーに好まれています。LUT を有効にするには、Visual Studio のメニュー バーの [テスト] エントリで、[Live Unit Testing]、[開始] の順に選択します。

Visual Studio for Mac

Visual Studio for Mac は、macOS での IDE エクスペリエンスを希望する開発者を対象とする、Visual Studio ファミリの最新メンバーです。Visual Studio for Mac は Xamarin Studio を進化させたものです。Xamarin Studio では、C# プロジェクトと F# プロジェクトのサポートが導入されています。まず、.NET Core 2.0 SDK (dot.net からダウンロード可能) をインストールして、[プロジェクトの作成] をクリックしてから、.NET Core カテゴリにある [アプリ] エントリを選択して、目的のプロジェクト テンプレートを選択します。 

これにより、必要な機能がすべてそろった IDE を使用して、Mac で .NET Core アプリを開発できるようになります (図 3 参照)。Microsoft は、Visual Studio と Visual Studio for Mac との間でエクスペリエンスに一貫性を持たせることに重点的に取り組んでいます。IntelliSense、コード ナビゲーション、リファクタリング、単体テスト、ソース管理の統合など、Visual Studio で利用できる機能のほぼすべて使用できるようになります。Web 開発については、Visual Studio の HTML、CSS、および JSON の各エディターが Visual Studio for Mac に追加されています。Razor ファイル (.cshtml) と JavaScript/TypeScript は現在サポートされていませんが、Microsoft は将来の更新プログラムで Visual Studio for Mac にこのサポートを追加するよう取り組んでいます。

Visual Studio for Mac

図 3 Visual Studio for Mac

最新のクラウドを念頭に置いたツール

テクノロジーの世界が進化するにつれて、最初からクラウドでの運用を目的に設計されるアプリケーションの数が増えているのは明らかです。つまり、ツールでは最新のクラウドを念頭に置いた設計パターンやプラクティスに対応するだけでなく、ローカル開発コンピューターからクラウドにアプリケーションをすばやく移行できる必要があります。  この目標を念頭に、Visual Studio と Visual Studio for Mac には、どちらも Microsoft Azure への直接公開と、Docker コンテナーとしてのアプリケーションのパッケージ化のサポートが組み込まれています。

Azure への直接公開: アプリケーションをクラウドで実行するために移行する準備が整ったら、ほとんどの場合、できるだけ最小限の労力でアプリケーションをクラウドでテストすることを考えます。Visual Studio と Visual Studio for Mac はどちらも、アプリケーションをコンピューターから Azure App Service に直接公開できます。App Service は完全管理型のクラウド環境で、複雑な構成やインフラストラクチャ管理について悩む必要なくアプリケーションを実行できます。

Visual Studio または Visual Studio for Mac でローカル コンピューターから Azure App Service にアプリケーションを公開するには、プロジェクトを右クリックして [公開] を選択するだけです。ここでは、アプリケーションの一意 URL など、いくつかの情報が要求され、既存の App Service プラン (メンバー アプリケーションのコレクション用に確保するリソース数) を選択するか、プランがない場合は新しく作成できます。情報の入力を完了すると、数分後には、アプリケーションがクラウドで動作するようになります。 

コンテナー開発ツール: 最新クラウド開発に関して明らかなことの 1 つは、コンテナーがソフトウェアの設計とビルドの方法を一変させるということです。コンテナーでは、ランタイムのコピーを含め、アプリケーションとその依存関係をすべて 1 つの単位としてパッケージ化できます。これにより、基になるサーバーが変更されても、アプリケーションが機能しなくなることはありません。つまり、マイクロサービス設計パターンが可能になります。このパターンでは、ロジックの各単位をアプリケーション内にそれぞれ異なるコンテナーとして配置し、定義済みのプロトコルで相互に通信できるようにします。そのため、アプリケーション全体のスケールを変えることなく、アプリケーションで需要の高い部分のスケールを変えることができます。つまり、アプリケーション全体を更新するのではなく、コンテナーを限定して修正することができます。

これを踏まえて、Microsoft が .NET Core で目指したのは、.NET Core をコンテナー化したマイクロサービスを作成するための最初のランタイムにすることです。Visual Studio、Visual Studio for Mac、および Visual Studio Code はすべて、Docker コンテナーとしてのアプリケーション開発をサポートします (本稿執筆時点では、Visual Studio for Mac の Docker ツール サポートには Docker Tools の拡張機能が必要です。Visual Studio Code には、Docker コンテナーの作成をサポートする Docker 拡張機能を Microsoft が提供しています)。

Docker コンテナーをビルドするには、使用する OS 用のDocker ツールをインストールする必要があります (詳細とダウンロードについては、docker.com を参照してください)。必要なものをインストールしたら、Visual Studio または Visual Studio for Mac でプロジェクトを右クリックして [追加] を選択肢、[Docker サポート] を選択するだけです。この操作により、docker-compose プロジェクトがソリューションに、Dockerfile がプロジェクトに追加されます。これらのアセットにより、プロジェクトを Docker コンテナーに組み込めるようになります。その後、IDE からアプリケーションを実行すると、アプリケーションの実行とデバッグは、ホスト コンピューターから直接ではなく、コンテナー内部で行われます。さいわい、上記で説明した Azure App Service への公開エクスペリエンスでは、Linux Docker コンテナーの公開もサポートされます。

まとめ

.NET Core アプリのビルドをまだ試したことのない開発者にとっては、今がその最大のチャンスです。.NET Core と .NET Standard 2.0 (これについては、「.NET Core と .NET Standard の分かりやすい解説」 を参照) は、どのようなツール、OS、言語、作業スタイルを選んでも、.NET アプリケーションの作成を容易にします。 

利用可能な .NET Core ツールの有用さを本稿で感じていただければさいわいです。チームの進捗状況と将来の機能強化については、Microsoft のブログ (aka.ms/dotnetblog) をご覧ください。.NET Core アプリケーションの作成エクスペリエンスを今後改善していくために、本稿で取り上げたツールを使用した感想をお寄せください。ブログにコメントや質問を投稿したり、Visual Studio や Visual Studio for Mac の IDE に備わっている問題の報告機能や提案の送信機能を使用してフィードバックを直接送信することもできます。


Andrew Hall は、Visual Studio の .NET 言語やツールの主任プログラム マネージャーです。大学卒業後、基幹業務アプリケーションの作成に携わった後、コンピューター サイエンスの修士過程に復学しました。修士課程終了後は Visual Studio の診断チームに参加し、デバッグ ツール、プロファイリング ツール、およびコード分析ツールに取り組みました。その後、.NET 言語およびツール チームに異動し、ASP.NET、Web、Azure App Service 用のツールなど、.NET 言語ツールやサポート ツールに取り組んでいます。Twitter は、@AndrewBrianHall (英語) からフォローできます。

Joe Morris は、Visual Studio の .NET Core ツールと Live Unit Testing のプログラム マネージャーです。彼は、コンピューター サイエンスの修士号を取得しています。1990 年代に、米国企業のアプリケーション開発コンサルタントとしてキャリアを開始しました。1997 年に、アイオワ州の Microsoft Consulting Services に参加し、その後レドモンドに移りました。現在までの 2 年間では、主に静的コード分析ツールや開発者生産性ツールに取り組んでいます。Twitterは、@_jomorris (英語) からフォローできます。

この記事のレビューに協力してくれたマイクロソフト技術スタッフの Dustin Campbell、Phillip Carter、Livar Cunha、Mikayla Hutchinson、Mads Kristensen、Jordan Matthiesen、および Kasey Uhlenhuth に心より感謝いたします。

 


この記事について MSDN マガジン フォーラムで議論する