次の方法で共有


チュートリアル: 項目テンプレートを作成する

.NET を使用すると、プロジェクト、ファイル、およびリソースを生成するテンプレートを作成してデプロイできます。 このチュートリアルは、 dotnet new コマンドで使用するテンプレートを作成、インストール、アンインストールする方法を説明するシリーズの第 1 部です。

完成したテンプレートは 、.NET Samples GitHub リポジトリで確認できます。

ヒント

項目 テンプレートは、Visual Studio の [ 追加>新しい項目 ] ダイアログには表示されません。

シリーズのこの部分では、次の方法について説明します。

  • 項目テンプレートのクラスを作成します。
  • テンプレート構成フォルダーとファイルを作成します。
  • ファイル パスからテンプレートをインストールします。
  • 項目テンプレートをテストします。
  • 項目テンプレートをアンインストールします。

[前提条件]

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

  • このリファレンス記事では、テンプレートに関する基本と、それらがどのようにまとめられるかについて説明します。 この情報の一部をここで繰り返します。

  • ターミナルを開き、テンプレートを保存してテストするフォルダーに移動します。

必要なフォルダーを作成する

このシリーズでは、テンプレート ソースが含まれている "作業フォルダー" と、テンプレートのテストに使用される "テスト フォルダー" を使用します。 作業フォルダーとテスト フォルダーは、同じ親フォルダーの下にある必要があります。

最初に、親フォルダーを作成します。名前は関係ありません。 次に、 workingtest という名前のサブフォルダーを 2 つ作成します。 作業フォルダー内に、コンテンツという名前のサブフォルダーを作成します。

フォルダー構造は次のようになります。

parent_folder
├───test
└───working
    └───content

項目テンプレートを作成する

項目テンプレートは、1 つ以上のファイルを含む特定の種類のテンプレートです。 これらの種類のテンプレートは、既にプロジェクトがあり、構成ファイルやコード ファイルなどの別のファイルを生成する場合に便利です。 この例では、文字列型に拡張メソッドを追加するクラスを作成します。

ターミナルで 、working\content フォルダーに移動し、 extensions という名前の新しいサブフォルダーを作成します。

working
└───content
    └───extensions

拡張機能フォルダーに移動し、StringExtensions.csという名前の新しいファイルを作成します。 テキスト エディターでファイルを開きます。 このクラスは、文字列の内容を反転 Reverse という名前の拡張メソッドを提供します。 次のコードを貼り付けて、ファイルを保存します。

namespace System;

public static class StringExtensions
{
    public static string Reverse(this string value)
    {
        char[] tempArray = value.ToCharArray();
        Array.Reverse(tempArray);
        return new string(tempArray);
    }
}

テンプレートの内容が完成したら、テンプレート構成を作成します。

テンプレート構成を作成する

チュートリアルのこの部分では、テンプレート フォルダーは working\content\extensions にあります。

テンプレートは、テンプレート フォルダーのルートに存在する特別なフォルダーと構成ファイルを持っているため、.NET によって認識されます。

まず、.template.configという名前 新しいサブフォルダーを作成し、それを入力します。 次に、 template.jsonという名前の新しいファイルを作成します。 フォルダー構造は次のようになります。

working
└───content
    └───extensions
        └───.template.config
                template.json

お気に入りのテキスト エディターで template.json を開き、次の JSON コードを貼り付けて保存します。

{
    "$schema": "http://json.schemastore.org/template",
    "author": "Me",
    "classifications": [ "Common", "Code" ],
    "identity": "ExampleTemplate.StringExtensions",
    "name": "Example templates: string extensions",
    "shortName": "stringext",
    "tags": {
      "language": "C#",
      "type": "item"
    },
    "symbols": {
      "ClassName":{
        "type": "parameter",
        "description": "The name of the code file and class.",
        "datatype": "text",
        "replaces": "StringExtensions",
        "fileRename": "StringExtensions",
        "defaultValue": "StringExtensions"
      }
    }
  }

この構成ファイルには、テンプレートのすべての設定が含まれています。 nameshortNameなどの基本設定を確認できますが、tags/typeに設定されているitem値もあります。 これにより、テンプレートが "項目" テンプレートとして分類されます。 作成するテンプレートの種類に制限はありません。 itemprojectの値は、ユーザーが検索するテンプレートの種類を簡単にフィルター処理できるように、.NET が推奨する一般的な名前です。

classifications項目は、を実行してテンプレートの一覧を取得するときに表示されるdotnet new列を表します。 ユーザーは、分類タグに基づいて検索することもできます。 template.jsonファイルの tags プロパティと classifications タグの一覧を混同しないでください。 これらは、残念ながら同じ名前の 2 つの異なる概念です。 template.json ファイルの完全なスキーマは JSON スキーマ ストアにあります。詳細については、「template.jsonのリファレンス」を参照してください。 template.json ファイルの詳細については、dotnet テンプレート wiki を参照してください。

この JSON オブジェクトの symbols 部分は、テンプレートで使用できるパラメーターを定義するために使用されます。 この場合、 ClassName 1 つのパラメーターが定義されています。 定義されたパラメーターには、次の設定が含まれています。

  • type - これは必須の設定であり、 parameterに設定する必要があります。
  • description - パラメーターの説明。テンプレート ヘルプに出力されます。
  • datatype - パラメーターを使用する場合のパラメーター値のデータ型。
  • replaces - すべてのテンプレート ファイルでパラメーターの値で置き換えるテキスト値を指定します。
  • fileRename - replacesと同様に、すべてのテンプレート ファイルの名前でパラメーターの値に置き換えられるテキスト値を指定します。
  • defaultValue - パラメーターがユーザーによって指定されていない場合の、このパラメーターの既定値。

テンプレートを使用すると、ユーザーは ClassName パラメーターの値を指定できます。この値は、 StringExtensionsのすべての出現箇所を置き換えます。 値が指定されていない場合は、 defaultValue が使用されます。 このテンプレートでは、StringExtensions が 2 つ発生します: ファイル StringExtensions.cs およびクラス StringExtensions。 パラメーターの defaultValueStringExtensionsされているため、テンプレートの使用時にパラメーターが指定されていない場合、ファイル名とクラス名は変更されません。 dotnet new stringext -ClassName MyExtsなどの値を指定すると、ファイルの名前がMyExts.csになり、クラスの名前が MyExts に変更されます。

テンプレートで使用できるパラメーターを確認するには、テンプレート名と共に -? パラメーターを使用します。

dotnet new stringext -?

次の出力が生成されます。

Example templates: string extensions (C#)
Author: Me

Usage:
  dotnet new stringext [options] [template options]

Options:
  -n, --name <name>       The name for the output being created. If no name is specified, the name of the output directory is used.
  -o, --output <output>   Location to place the generated output.
  --dry-run               Displays a summary of what would happen if the given command line were run if it would result in a template creation.
  --force                 Forces content to be generated even if it would change existing files.
  --no-update-check       Disables checking for the template package updates when instantiating a template.
  --project <project>     The project that should be used for context evaluation.
  -lang, --language <C#>  Specifies the template language to instantiate.
  --type <item>           Specifies the template type to instantiate.

Template options:
  -C, --ClassName <ClassName>  The name of the code file and class.
                               Type: text
                               Default: StringExtensions

有効な .template.config/template.json ファイルが作成されたので、テンプレートをインストールする準備ができました。 ターミナルで 拡張機能 フォルダーに移動し、次のコマンドを実行して、現在のフォルダーにあるテンプレートをインストールします。

  • Windows の場合: dotnet new install .\
  • Linux または macOS の場合: dotnet new install ./

このコマンドは、インストールされているテンプレートの一覧を出力します。これには、ユーザーを含める必要があります。

The following template packages will be installed:
   <root path>\working\content\extensions

Success: <root path>\working\content\extensions installed the following templates:
Templates                                         Short Name               Language          Tags
--------------------------------------------      -------------------      ------------      ----------------------
Example templates: string extensions              stringext                [C#]              Common/Code

項目テンプレートをテストする

項目テンプレートがインストールされたので、テストします。

  1. テスト フォルダーに移動します。

  2. dotnet new consoleを使用して新しいコンソール アプリケーションを作成すると、dotnet run コマンドを使用して簡単にテストできる作業プロジェクトが生成されます。

    dotnet new console
    

    次のような出力が表示されます。

    The template "Console Application" was created successfully.
    
    Processing post-creation actions...
    Running 'dotnet restore' on C:\test\test.csproj...
      Restore completed in 54.82 ms for C:\test\test.csproj.
    
    Restore succeeded.
    
  3. 次のコマンドを使用してプロジェクトを実行します。

    dotnet run
    

    次の出力が表示されます。

    Hello, World!
    
  4. dotnet new stringextを実行して、テンプレートからStringExtensions.cs ファイルを生成します。

    dotnet new stringext
    

    次の出力が表示されます。

    The template "Example templates: string extensions" was created successfully.
    
  5. Program.csのコードを変更して、テンプレートによって提供される拡張メソッドで"Hello, World!"文字列を反転します。

    Console.WriteLine("Hello, World!".Reverse());
    

    プログラムをもう一度実行し、結果が逆になっていることを確認します。

    dotnet run
    

    次の出力が表示されます。

    !dlroW ,olleH
    

おめでとうございます! .NET を使用して項目テンプレートを作成してデプロイしました。 このチュートリアル シリーズの次の部分に備えて、作成したテンプレートをアンインストールします。 テスト フォルダー内のすべてのファイルとフォルダーも必ず削除してください。 これにより、このチュートリアル シリーズの次の部分に向けてクリーンな状態に戻ります。

テンプレートをアンインストールする

ターミナルで 拡張機能 フォルダーに移動し、次のコマンドを実行して、現在のフォルダーにあるテンプレートをアンインストールします。

  • Windows の場合: dotnet new uninstall .\
  • Linux または macOS の場合: dotnet new uninstall ./

このコマンドは、アンインストールされたテンプレートの一覧を出力します。これには、ユーザーが含まれている必要があります。

Success: <root path>\working\content\extensions was uninstalled.

dotnet new uninstallを使用して、インストールされているテンプレート パッケージの一覧をいつでも確認できます。これには、各テンプレート パッケージについてアンインストールするコマンドが含まれます。

次のステップ

このチュートリアルでは、項目テンプレートを作成しました。 プロジェクト テンプレートを作成する方法については、このチュートリアル シリーズに進んでください。