C#でコードスニペットを作成する - Visual Studioを効率的にカスタマイズする
C#を使用する開発者にとって、繰り返しは現実のものとなります。 プロパティの記述から、コンソールメソッドの設定、例外の捕捉まで、特定の作業を効率化することができます。 そこで、コード・スニペットの出番です。ショートカットだけでプロジェクトにすばやく挿入できる、小さくて強力な、再利用可能なコードの塊です。
この記事では、Visual Studioでカスタムコードスニペットを作成し使用する方法を、C#のエキスパートであるTim Corey氏の指導のもと解説します。 C#でコードスニペットを作成する - Visual Studioをカスタマイズして効率化する"のビデオで、ティムは、自分のプロジェクトに直接適用できる実践的な手順、解説、例を提供しています。 最終的には、生産性を向上させ、より読みやすいコードを記述し、開発作業全体にわたってベストプラクティスを実装できるようになります。
コード スニペットが重要な理由
ティムはまず、自動プロパティ、コンストラクタ、foreachループのようなものを挿入するためにスニペットを頻繁に使用する方法を共有します。 彼は、cwと入力してTabを2回押すと、Console.WriteLine()が挿入され、括弧の間にカーソルが置かれることを実演している。
しかし、彼が指摘するように、すべての便利なメソッドにスニペットが組み込まれているわけではありません。 例えば、Console.ReadLine()には1つ欠けています。 ティムの反応は? 自分で作成
Visual Studio でデモ プロジェクトをセットアップする
文脈を示すために、TimはVisual StudioでASP.NET Core Webアプリケーションをセットアップします。 プロジェクトの種類は重要ではありませんが、C#とHTMLのファイルがあれば、両方の言語の例を示すことができます。
スニペットはC#に限らず、HTML、XAMLなど、Visual Studioがサポートする複数の言語に適用できます。
組み込みスニペットとショートカットの威力
Timは、いくつかの既存のスニペットを示しています:
cw + Tab Tab → Console.WriteLine()
ctor + Tab Tab → コンストラクタ
prop + Tab Tab → 自動実装プロパティ(例:public string Test { get; set; })
- propfull → バッキングフィールドを持つプロパティを作成する
これらのショートカットは、繰り返しをなくし、パフォーマンスを向上させるように設計されています。 stringやintなどの型と名前を指定するだけで、あとは自動生成されます。
これらの組み込みスニペットは、補間、publicのようなアクセス修飾子、システム定義の要素も示すことができ、コードが一貫した構造に従っていることを保証します。
VSコードで独自のスニペットを作成する
Tim氏は、スニペット・ジェネレーター・ツールを使用する代わりに、シンプルでXML構文のハイライトが可能なVisual Studio Codeを選択しました。
彼はreadline.snippetという名前のファイルを作成し、本質的なXML構造を示します:
<CodeSnippets>
<CodeSnippet Format="1.0.0">
<Header>
<Title>Console.ReadLine</Title>
<Shortcut>cr</Shortcut>
<Description>Creates Console.ReadLine()</Description>
<Author>Tim Corey</Author>
</Header>
<Snippet>
<Code Language="csharp"><!-- [CDATA[
Console.ReadLine();
]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets><CodeSnippets>
<CodeSnippet Format="1.0.0">
<Header>
<Title>Console.ReadLine</Title>
<Shortcut>cr</Shortcut>
<Description>Creates Console.ReadLine()</Description>
<Author>Tim Corey</Author>
</Header>
<Snippet>
<Code Language="csharp"><!-- [CDATA[
Console.ReadLine();
]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>これは基本的なスニペットで、生のC#コードをラップするために<! ショートカットcrは、Tabキーを2回押すと、Console.ReadLine()メソッドの挿入をトリガーするようになりました。
Tim氏は、書式設定はユーザーのVisual Studio環境から継承されるため、インデントやスペーシングはユーザーの設定に合わせることができると指摘しています。
スニペットを Visual Studio にインポートする
Tools > Code Snippet Managerを使用して.snippetファイルをインポートする方法を説明します。 彼はMy Code Snippetsの場所を選択し、必要なときにスニペットが表示されるようにします。
インポートしたら、cr + Tab Tabと入力すると、Console.ReadLine()行が挿入され、変数に値を代入したり、例外処理ブロック内で使用する準備ができます。
再利用可能なドキュメントヘッダ
次にティムは、企業プロジェクトや共同作業チームで頻繁に必要とされるドキュメンテーションのスニペットを実演します。 彼は、コメントブロックを生成するショートカットdocmeでスニペットを作成します:
/// Title:
/// Author:
/// Date:
/// Purpose:/// Title:
/// Author:
/// Date:
/// Purpose:これは、変更、作成者、およびファイルのコンテキストを追跡するのに理想的です。 Gitのようなツールはバージョン管理を行いますが、ヘッダーは、特に大規模なチームにおいて、視覚的な参照を素早く提供します。
HTMLスニペット:Bootstrap フォームの例
スニペットはC#コードだけのものではありません。 ティムは、フォーム、入力要素、構造化タグのコレクションを構築するのに最適なHTMLでの使い方を紹介します。
彼は、Bootstrapフォームの例をコピーし、同じXMLスニペット形式でラップし、言語をhtmlに変更します。 インポート後、ショートカットのsampleformを入力すると、既製のHTML構造が挿入されるため、外部URLを繰り返し参照したり、定型文をコピーしたりする手間が省けます。
プレースホルダと変数を使った高度なスニペット
ここからは、より高度で、より強力な内容になります。 Timは、設定値を取得するスニペットを作成します:
_config.GetValue<string>("values:myTest");_config.GetValue<string>("values:myTest");彼は、タイプ(文字列、int、bool)とパス(values:myTest)の両方にプレースホルダーを使用する方法を示しているので、開発者は異なるものだけを記入すればよい。
XMLでは
<Declarations>
<Literal>
<id>ValType</id>
<Default>string</Default>
<ToolTip>Data type of the value</ToolTip>
</Literal>
<Literal>
<id>Path</id>
<Default>values:myTest</Default>
<ToolTip>Config path</ToolTip>
</Literal>
</Declarations><Declarations>
<Literal>
<id>ValType</id>
<Default>string</Default>
<ToolTip>Data type of the value</ToolTip>
</Literal>
<Literal>
<id>Path</id>
<Default>values:myTest</Default>
<ToolTip>Config path</ToolTip>
</Literal>
</Declarations>スニペット本文では
_config.GetValue<$ValType$>("$Path$")_config.GetValue<$ValType$>("$Path$")変数と宣言を使用することで、柔軟で表現力があり、簡潔なコード生成が可能になります。 セキュリティ設定検索、辞書アクセス、JSONファイルからのネストされた値の読み取りなどのタスクに最適です。
なぜスニペットはパフォーマンスを向上させるのか
Timは最後に、スニペットが単にスピードアップのためだけでなく、一貫したプラクティスを促進し、エラーを減らし、チーム全体のコードの読みやすさを向上させることを説明します。 時間をかければ、1つのスニペットあたり数秒の節約でも、数時間の節約につながります。
スニペットが役立つことを強調しています:
一般的なタスクの初期化
try-catch-finallyによる例外処理の標準化
クラス全体のテンプレートの作成
- 最終ブロック、構造化キャッチブロック、メソッドオーバーライド内での作業
最後に思うこと:開発者のエッジ
複雑なシステムを構築する場合でも、シンプルなアプリを構築する場合でも、コード・スニペットはC#コードやC#コードをより速く、より一貫性を持って記述するのに役立ちます。 これにより、次のことが可能になります:
繰り返しの排除
ビジネスロジックに重点を置く
- きれいに補間され、十分に文書化されたコードベースを維持すること。
ティムが包括的なビデオで提案しているように、あなた自身のコーディング習慣を探求してください。 同じことを何度も入力している箇所を発見してください。 次に、スニペットを作成するという1つのアプローチを決めます。
すぐに、ワークフローが変わり、開発がより効率的で、整理され、楽しくなることに気づくでしょう。
始めるためのクイックスニペットのアイデア
tryfinally - try + finally ブロックを生成します。
logerror - Log.Error()でロギングロジックを挿入します。
propnotify - INotifyPropertyChangedを持つプロパティ
filecheck - If File.Exists(path) with インラインロジック
- foreachdict - 辞書<TKey, TValue>をループする
ティムのアドバイス他のファイルからコピーペーストするだけではいけません。

