チュートリアル: .NET CLI を使用して .NET ツールを作成する

この記事の対象: ✔️ .NET Core 2.1 SDK 以降のバージョン

このチュートリアルでは、.NET ツールを作成およびパッケージ化する方法について説明します。 .NET CLI では、他のユーザーがインストールおよび実行できる、コンソール アプリケーションをツールとして作成できます。 .NET ツールは、.NET CLI でインストールする NuGet パッケージです。 ツールの詳細については、.NET ツールの概要に関する記事を参照してください。

作成するツールは、メッセージを入力として受け取り、ロボットの画像を作成するテキスト行と共にメッセージを表示するコンソール アプリケーションです。

これは、3 つのチュートリアル シリーズの第 1 回です。 このチュートリアルでは、ツールを作成してパッケージ化します。 次の 2 つのチュートリアルでは、グローバル ツールとしてツールを使用する方法と、ローカル ツールとしてツールを使用する方法を説明します。 ツールを作成する手順は、グローバル ツールとローカル ツールのどちらとして使用する場合でも同じです。

前提条件

  • .NET SDK 6.0.100 以降のバージョン。

    このチュートリアルでは .NET SDK 6.0 を使用しますが、.NET Core SDK 2.1 より、グローバル ツールが利用できます。 ローカル ツールは .NET Core SDK 3.0 以降で使用できます。

  • ユーザーが選んだテキスト エディターまたはコード エディター。

プロジェクトを作成する

  1. コマンド プロンプトを開き、repository という名前のフォルダーを作成します。

  2. repository フォルダーに移動し、次のコマンドを入力します。

    dotnet new console -n microsoft.botsay -f net6.0
    

    このコマンドを実行すると、repository フォルダーの下に microsoft.botsay という名前の新しいフォルダーが作成されます。

    注意

    このチュートリアルでは、.NET 6.0 を対象にするツールを作成します。 別のフレームワークを対象にするには、-f|--framework オプションを変更します。 複数のフレームワークを対象にするには、次の例に示すように、プロジェクト ファイルの TargetFrameworks 要素に TargetFramework 要素を変更します。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFrameworks>net8.0;net6.0</TargetFrameworks>
      </PropertyGroup>
    </Project>
    
  3. microsoft.botsay フォルダーに移動します。

    cd microsoft.botsay
    

コードの追加

  1. コード エディターで Program.cs ファイルを開きます。

  2. Program.cs のコードを次のコードに置き換えます。

    using System.Reflection;
    
    namespace microsoft.botsay;
    
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
    

    using System.Reflection;ディレクティブは、次の手順で追加するコードで必要です。

  3. Main メソッドを次のコードに置き換えて、アプリケーションのコマンドライン引数を処理します。

    static void Main(string[] args)
    {
        if (args.Length == 0)
        {
            var versionString = Assembly.GetEntryAssembly()?
                                    .GetCustomAttribute<AssemblyInformationalVersionAttribute>()?
                                    .InformationalVersion
                                    .ToString();
    
            Console.WriteLine($"botsay v{versionString}");
            Console.WriteLine("-------------");
            Console.WriteLine("\nUsage:");
            Console.WriteLine("  botsay <message>");
            return;
        }
    
        ShowBot(string.Join(' ', args));
    }
    

    引数が渡されなかった場合、短いヘルプ メッセージが表示されます。 それ以外の場合、次の手順で作成する ShowBot メソッドを呼び出すと、すべての引数が 1 つの文字列に連結され、出力されます。

  4. 文字列パラメーターを受け取る ShowBot という新しいメソッドを追加します。 このメソッドを実行すると、テキストの行を使用してメッセージとロボットの画像を出力されます。

    static void ShowBot(string message)
    {
        string bot = $"\n        {message}";
        bot += @"
        __________________
                          \
                           \
                              ....
                              ....'
                               ....
                            ..........
                        .............'..'..
                     ................'..'.....
                   .......'..........'..'..'....
                  ........'..........'..'..'.....
                 .'....'..'..........'..'.......'.
                 .'..................'...   ......
                 .  ......'.........         .....
                 .    _            __        ......
                ..    #            ##        ......
               ....       .                 .......
               ......  .......          ............
                ................  ......................
                ........................'................
               ......................'..'......    .......
            .........................'..'.....       .......
         ........    ..'.............'..'....      ..........
       ..'..'...      ...............'.......      ..........
      ...'......     ...... ..........  ......         .......
     ...........   .......              ........        ......
    .......        '...'.'.              '.'.'.'         ....
    .......       .....'..               ..'.....
       ..       ..........               ..'........
              ............               ..............
             .............               '..............
            ...........'..              .'.'............
           ...............              .'.'.............
          .............'..               ..'..'...........
          ...............                 .'..............
           .........                        ..............
            .....
    ";
        Console.WriteLine(bot);
    }
    
  5. 変更内容を保存します。

アプリケーションをテストする

プロジェクトを実行して出力を確認します。 次のようにコマンド ラインを変えて、異なる結果を表示してみてください。

dotnet run
dotnet run -- "Hello from the bot"
dotnet run -- Hello from the bot

区切り記号 -- の後の引数は、すべてアプリケーションに渡されます。

ツールをパッケージ化する

アプリケーションをパッケージ化してツールとして配布する前に、プロジェクト ファイルを変更する必要があります。

  1. microsoft.botsay.csproj ファイルを開き、3 つの新しい XML ノードを <PropertyGroup> ノードの最後に追加します。

    <PackAsTool>true</PackAsTool>
    <ToolCommandName>botsay</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
    

    <ToolCommandName> は、インストール後にツールを呼び出すコマンドを指定する省略可能な要素です。 この要素を指定しない場合、ツールのコマンド名は、.csproj 拡張子のないアセンブリ ファイル名になります。

    <PackageOutputPath> は、NuGet パッケージが生成される場所を決定する省略可能な要素です。 NuGet パッケージは、.NET CLI でツールのインストールに使用されるものです。

    プロジェクト ファイルは次の例のようになります。

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
    
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
    
        <PackAsTool>true</PackAsTool>
        <ToolCommandName>botsay</ToolCommandName>
        <PackageOutputPath>./nupkg</PackageOutputPath>
    
      </PropertyGroup>
    
    </Project>
    
  2. dotnet pack コマンドを実行して、NuGet パッケージを作成します。

    dotnet pack
    

    microsoft.botsay.1.0.0.nupkg ファイルは、microsoft.botsay.csproj ファイルの <PackageOutputPath> 値で識別されるフォルダー (この例では、 ./nupkg フォルダー) に作成されます。

    ツールをリリースする場合は、https://www.nuget.org にアップロードすることができます。 NuGet 上でツールを使用できるようになると、開発者は dotnet tool install コマンドを使用してツールをインストールできます。 このチュートリアルでは、ローカルの nupkg フォルダーからパッケージを直接インストールするため、NuGet にパッケージをアップロードする必要はありません。

トラブルシューティング

チュートリアルの実行中にエラー メッセージが表示された場合は、「.NET ツールの使用に関する問題のトラブルシューティング」を参照してください。

次の手順

このチュートリアルでは、コンソール アプリケーションを作成し、ツールとしてパッケージ化しました。 このツールをグローバル ツールとして使用する方法については、次のチュートリアルに進んでください。

必要に応じて、グローバル ツール チュートリアルをスキップし、ローカル ツール チュートリアルに直接移動できます。