JetBrains Rider 2026.1 Help

ソーステンプレート

従来、テンプレートまたはスニペットは、ソースコードの外部で保存および管理されていました。 通常、テンプレートは汎用定型コードをすばやく作成するのに役立つため、これは理にかなっています。 これらの目的のために、JetBrains Rider には多くの事前定義された ライブテンプレートサラウンドテンプレートファイルテンプレートが用意されています。 これらのタイプの 独自のテンプレートを作成することもできます。

ただし、現在のプロジェクトまたはソリューションにのみ関連する繰り返し可能なコードを生成したい場合があります。 JetBrains Rider では、 ソーステンプレートを使ってこのようなタスクを効率化できます。

仕組み

従来のテンプレートとは対照的に、ソーステンプレートは、 拡張メソッドとしてプロジェクトのコードのどこにでも作成できます。 プロジェクトの特定のタイプまたは標準タイプに対して定義できます。 object の拡張メソッドとして作成することにより、すべてのタイプでソーステンプレートを使用できるようにすることもできます。

テンプレートが定義されるとすぐに、対応する型のオブジェクトとその継承のために コード補完リストで利用可能になります。 リストからテンプレートを選択すると、JetBrains Rider がテンプレートメソッドの本体から自分のコードへコードを挿入します。

以下は、ソーステンプレートの最もシンプルなアプリケーション例です。 テンプレート forEach は、すべてのジェネリックコレクションで利用できます。これはパラメーター this IEnumerable<T> x で定義されています。 メソッド本文で指定されたように、コレクションを反復処理するコードを挿入します。 テンプレートはプロジェクト内の任意の静的クラスで定義できます。 JetBrains Rider は、 [SourceTemplate] 属性によってテンプレートとして識別されます:

using JetBrains.Annotations; public static class MySourceTemplates { [SourceTemplate] public static void iterateCollection<T>(this IEnumerable<T> x) { foreach (var i in x) { // Do something useful here //$ $END$ } } }

このテンプレートをデプロイするには、任意のコレクションオブジェクトで 自動補完を使用できます:

補完リストのソーステンプレート

テンプレート項目を選択すると、オブジェクトはテンプレートテキストに置き換えられます。

public void Test(IEnumerable<string> enumerable) { foreach (var i in enumerable) { // Do something useful here } }

テンプレート定義の //$ $END$ コメントは、テンプレートが適用された後のキャレット位置を定義する定義 済みのテンプレートパラメーターにすぎないことに注意してください。 テンプレートの 他のパラメーターを使用して、テンプレートをより柔軟にすることができます。

ソーステンプレートを使用する理由

上記のように、ソーステンプレートは、現在のプロジェクトまたはソリューションで再利用するコードブロックに最も役立ちます。 従来のテンプレートに比べて、ソーステンプレートの利点を示すいくつかの点があります。

  • ソーステンプレートを使用する際に、どこかに切り替える必要はありません。すべてエディター内で完結します。

  • テンプレートは厳密に型指定されているため、関連するオブジェクトに対してのみ呼び出すことができます。

  • テンプレート定義がコンパイルされている限り、テンプレートコードにエラーがないことを確認できます。

  • ソーステンプレートの作成や編集時は、お気に入りの JetBrains Rider 機能、例えば コードインスペクションナビゲーション機能コード補完などが利用できます。

ソーステンプレートを作成する

ソーステンプレートの定義については、新しいクラスを作成するか、拡張メソッドを保持する既存の静的クラスを使用できます。

テンプレートメソッドとその本体

ソーステンプレートはパブリック拡張メソッドであり、 [SourceTemplate] 属性を持っている必要があります。 この属性は、 [NotNull][CanBeNull] 、その他の コードアノテーション属性とともに、 JetBrains.Annotations 名前空間で定義されます。 ソーステンプレートメソッドを定義するには、 プロジェクトでコードアノテーションを有効にする必要があります。

テンプレート本体では、好きなことをするコードを書くことができます。 通常は、呼び出し元オブジェクトで何かを行いますが、必ずしもそうする必要はありません。

また、テンプレートメソッドでコンパイルされないコードを使用する必要があります。 例: ローカル変数の名前を生成するために呼び出し側オブジェクト名を使用することができます。 この場合、このコードを '$' 記号で始まる行またはブロックコメントの中に配置します。

[SourceTemplate] public static void Bar(this Entity entity) { /*$ var $entity$Id = entity.GetId(); DoSomething($entity$Id); */ }

ターゲット式

ソーステンプレートが複雑な式を展開すると、デフォルトでは最新の部分のみがキャプチャーされます。 式全体をキャプチャーする必要がある場合は、 Target プロパティと SourceTemplateTargetExpression.Outer 値を使用してこれを明示的に指定する必要があります。 以下の例では、 Sqrt テンプレートが x+y 式全体に展開され、 var sqrt = Math.Sqrt(x+y) になります。

JetBrains Rider: ソーステンプレート。 SourceTemplateTargetExpression パラメーター

パラメーターとマクロ

ソーステンプレートでは、 パラメーターマクロを使用できます。 パラメーターに使用するマクロに応じて、パラメーターを指定および使用するいくつかの方法から選択できます。

  • テンプレートメソッドに新しいパラメーターを追加することで、テンプレートパラメーターを作成できます。 デフォルトでは、編集可能なパラメーターとして動作し、テンプレート適用時に ホットスポットセッション中にフォーカスされます。 このパラメーター用のマクロを定義したい場合は、下記例のように [Macro] 属性を追加する必要があります。

    • 属性の Expression プロパティは、使用するマクロを定義します。 使用可能なテンプレートマクロの 1 つを指定できます。

    • Editable プロパティは、テンプレート適用時にパラメーターが編集可能かどうかを任意で指定します。 デフォルトでは、ユーザー定義パラメーターはすべて編集可能です。 -1 値を指定するとパラメーターは編集できなくなります。

      同じパラメーターがテンプレートで複数回使われている場合、テンプレート適用時には1つの出現だけが編集可能となり、他の出現は同期して変更されます。 必要に応じて、『Editable』プロパティでゼロベースインデックスを指定することで、どの出現を編集可能にするかを定義できます。

    [SourceTemplate] public static void newGuid(this object obj, [Macro(Expression = "guid()", Editable = -1)] string newguid) { Console.WriteLine(newguid); }
  • テンプレートメソッドのローカル変数をテンプレートパラメーターに変換できます。 これを行うには、 [Macro] 属性をテンプレートメソッド定義に追加し、 Target プロパティで変数名を指定する必要があります。 例えば:

    [SourceTemplate] [Macro(Target = "item", Expression = "suggestVariableName()")] public static void forEach<T>(this IEnumerable<T> collection) { foreach (var item in collection) { //$ $END$ } }
  • 他の JetBrains Rider テンプレートと同じように、 事前定義されたパラメーターやすべてのユーザー定義パラメーターを、パラメーター識別子を $ 記号 $param_name$ で折り返して使えます。

    文字列リテラル内にユーザ定義のテンプレートパラメーターを使用することができます(例:

    Console.WriteLine("A random GUID: $newguid$");

    テンプレートパラメーターを文字列リテラル外で使うには、 $ 記号で始まる特別なテンプレートコメント //$ $param_name$ に入れる必要があります。 または /*$ $param_name$ */。 例えば:

    [SourceTemplate] [Macro(Target = "newguid", Expression = "guid()", Editable = -1)] public static void newGuid(this object obj) { //$ var guid = "$newguid$"; Console.WriteLine("A random GUID: $newguid$"); }

    呼び出し元オブジェクト、およびメソッドパラメーターとローカル変数として作成されたテンプレートパラメーターは、特別なテンプレートコメント内の $ 記号の有無にかかわらず使用できます。

ソーステンプレートを適用する

ソーステンプレートを適用するには、まずテンプレートがスコープ内にあることを確認してください。 つまり、同じ名前空間にいるか、テンプレートの名前空間が明示的にインポートされています。

ソーステンプレートからコードフラグメントを作成する

  1. テンプレートをデプロイする場所にキャレットを置きます。

  2. テンプレートをデプロイするオブジェクトを入力し、ドットを入力して、テンプレートの名前またはその キャメルハンプ省略形の入力を開始します。

  3. 補完リストでテンプレートを選択してクリックするか、 Enter を押します。

  4. 呼び出し元オブジェクト、ドット、入力したテンプレート名の一部は、テンプレート本体に置き換えられます。

  5. テンプレートに 編集可能なパラメーターがある場合(つまり、ユーザー入力が必要な場合)、JetBrains Rider はエディターで ホットスポットセッションを展開し、最初のパラメーターに入力位置を設定します。 次に下記のことを実行できます。

    • JetBrains Rider が現在のパラメーターにいくつかの値を提案している場合は、 アップショートカット ダウンショートカット の方向キーを使って候補リストを移動するか、希望する値を入力してください。

    • Tab または Enter を押して値を確定し、次のパラメーターの入力位置に移動します。 これが最後のパラメーターである場合、ホットスポットセッションは完了し、キャレットはセッション用に定義された終了位置に移動します。

    • Shift+Tab を押すと、入力フォーカスが前のパラメーターの入力位置に移動します。

    • Esc を押してホットスポットセッションを終了します。 この場合、すべてのセッションパラメーターはデフォルト値で初期化されます。

2026 年 6 月 12 日