コード スニペットとその使用方法
コード スニペットは、コード ファイルに追加できる再利用可能なコードの小さなブロックです。 スニペットには、通常よく使用される Try...Finally
や If...Else
などのコード ブロックが含まれています。 コード スニペットを使用してクラスまたはメソッド全体を追加することもできます。
コード スニペットには、スニペットを選択するのに使用する名称があります。また、ショートカット名を付けて、それを入力することでスニペットを追加できます。 スニペットには、プレースホルダーとして機能する置換パラメーターを含めることもできます。 スニペットは C#、C++、Visual Basic など、さまざまなプログラミング言語で使用できます。
拡張スニペットとブロックの挿入スニペット
ご利用のコードに追加できるコード スニペットには 2 種類あります。
- 拡張スニペットは、指定した挿入ポイントに追加されます。
- ブロックの挿入スニペットは、任意のコードを囲む形で追加されます。こちらは C# と C++ でのみ使用できます。
使用可能なスニペットを見つける
特定の言語で使用可能なスニペットを表示するには、メニュー バーから [ツール]>[コード スニペット マネージャー] を選択するか、Ctrl+K キーの後に B キーを押して、ドロップダウン メニューから目的の言語を選択します。
独自のスニペットを作成してインポートし、それをスニペットの一覧に表示するには、「チュートリアル: Visual Studio でコード スニペットを作成する」を参照してください。
コード ファイルにスニペットを追加する
コード ファイルにスニペットを追加する方法は、次のとおりです。
コード エディターで、スニペットを追加する位置にカーソルを合わせるか、C# または C++ コードを選択します。
以下のいずれかのアクションを実行します:
- Visual Studio のメニュー バーで、[編集]>[IntelliSense]>[スニペットの挿入] を選択するか、[編集]>[IntelliSense]>[ブロックの挿入] を選択します。
- 右クリックしてコンテキスト メニューから [スニペット]>[スニペットの挿入] を選択するか、[スニペット]>[ブロックの挿入] を選択します。
- 拡張スニペットの場合はキーボードから Ctrl+K の後に X キーを、挿入スニペットの場合は Ctrl+K の後に S キーを押します。
ドロップダウン リストで目的のスニペットをダブルクリックするか、スニペットのショートカットを入力して Tab キーまたは Enter キーを押します。
拡張スニペットを追加する
たとえば、C# の拡張スニペット tryf
では、次の Try...Finally
ブロックが追加されます。
try
{
}
finally
{
}
この拡張スニペットを追加する方法は、次のとおりです。
- コード エディターで、スニペットを追加する場所にカーソルを置きます。
- 右クリックして、コンテキスト メニューから [スニペットの挿入] を選択するか、メニュー バーまたはキーボード コマンドを使用します。
- Visual C# フォルダーを開き、ドロップダウン リストで tryf をダブルクリックするか、tryf を選択して Tab キーまたは Enter キーを押します。
ヒント
カーソルを挿入ポイントに置き、「tryf」と入力してから Tab キーを 2 回押す方法もあります。
ブロックの挿入スニペットを追加する
次の C++ の例では、ショートカット if
は挿入スニペットまたはブロックの挿入スニペットとして使用できます。 コード行 return FALSE;
を選択して [ブロックの挿入]>[if] を選択すると、行の周りにスニペットが展開されます。
if (true)
{
return FALSE;
}
スニペットの置換パラメーター
スニペットには、置換パラメーターを含めることができます。置換パラメーターとは、作成中のコードに応じた置換を必要とするプレースホルダーです。 前の例で、true
は置換パラメーターであり、適切な条件への置換が必要です。 置換は、スニペット内に置換パラメーターが現れるたびに繰り返されます。
たとえば、Visual Basic には、プロパティを定義するコード スニペットがあります。 スニペットを挿入するには:
- Visual Basic コード ファイルの右クリック コンテキスト メニューから [スニペット]>[スニペットの挿入] の順に選択してください。
- [コード パターン]>[プロパティ、プロシージャ、イベント]>[プロパティの定義] の順に選択してください。
次のコードが挿入されます。
Private newPropertyValue As String
Public Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
newPropertyValue
を m_property
に変更すると、newPropertyValue
のすべてのインスタンスが変更されます。 プロパティ宣言の String
を Int
に変更すると、Set
メソッド内の値も Int
に変更されます。
コード スニペットを使用するためのベスト プラクティス
コード スニペットのコードは、最も基本的な処理方法のみを示しています。 ほとんどのアプリケーションでは、そのアプリケーションに合わせてコードを変更する必要があります。
例外処理
コード スニペットの Try...Catch
ブロックは、通常すべての例外をキャッチして再スローしますが、現在のプロジェクトに適した選択肢ではない場合があります。 例外ごとに、対応方法はいくつかあります。 たとえば、「方法: try/catch を使用して例外を処理する (C#)」や「Try...Catch...Finally ステートメント (Visual Basic)」を参照してください。
ファイルの場所
ファイルの場所をアプリケーションに合わせる際は、次の要因を考慮してください。
アクセス可能な場所を見つけます。 ユーザーはコンピューターの Program Files フォルダーにアクセスできない可能性があるので、アプリケーションのファイルと共にユーザー ファイルを保存してもうまくいかない場合があります。
セキュリティで保護された場所を見つけます。 C:\ などのルート フォルダーにファイルを保存するのは安全ではありません。 アプリケーションのデータの場合は、AppData フォルダーを使用することをお勧めします。 個々のユーザー データの場合は、アプリケーションで Documents フォルダーに各ユーザーのファイルを作成できます。
有効なファイル名を使用します。 OpenFileDialog コントロールと SaveFileDialog コントロールを利用し、無効なファイル名の可能性を減らすことができます。
ユーザーが選択したファイルが、コードで操作する前に削除される可能性があることに注意してください。 また、ユーザーがファイルへの書き込みアクセス許可を持っていない場合もあります。
セキュリティ
スニペットのセキュリティは、ソース コードのどこで使用するか、そしてコード内に置いたスニペットをどのように変更するかによって変わります。 次の一覧は、考慮する必要がある点の一部です。
- ファイルおよびデータベースのアクセス
- コード アクセス セキュリティ
- イベント ログ、レジストリなどのリソースの保護
- シークレットの保存
- 入力の検証
- データをスクリプティング テクノロジに渡す
詳細については、「セキュリティで保護されたアプリケーション」を参照してください。
ダウンロードしたコード スニペット
Visual Studio でインストールされるコード スニペット自体は、セキュリティ ハザードではありませんが、 アプリケーションのセキュリティ リスクになる可能性があります。 インターネットからダウンロードしたスニペットの扱いには、他のダウンロードしたコンテンツと同様に、細心の注意が必要です。 信頼しているサイトからのみスニペットをダウンロードし、最新のウイルス対策ソフトウェアを使用します。
ダウンロードしたすべてのスニペット ファイルはメモ帳または Visual Studio の XML エディターで開き、よく確認してからインストールします。 以下の問題があることにご注意ください。
スニペット コードを実行した場合にシステムが破損する可能性があります。 ソース コードをよく読んでから実行してください。
スニペット ファイルには、悪意のあるスクリプト ファイルが実行されたり、有害な Web サイトが表示されたりする
HelpURL
ブロックが含まれているおそれがあります。スニペットには、プロジェクトに自動的に追加され、システムの任意の場所から読み込まれる参照が含まれている場合があります。 これらの参照は、ダウンロードするスニペットと同じ場所からダウンロードされる可能性があります。 また、そのスニペットから、悪意のあるコードを実行する参照内のメソッドが呼び出される可能性があります。 このような参照に気付くには、スニペット ファイルの
Imports
ブロックとReferences
ブロックを確認します。