.NET TIPS

C#で独自のコード・スニペットを登録するには?[VS 2005のみ、C#]

デジタルアドバンテージ 一色 政彦
2006/05/12

 Visual Studio 2005(以後VS 2005)には、繰り返し利用するパターン化されたコードを簡単に挿入するための「コード・スニペット」という機能が搭載されている。このコード・スニペット機能に、よく使う独自のコードを登録したいという要望は少なくないだろう。そこで本稿では、独自のコード・スニペットを新たに追加登録する方法を紹介する。

 なお、コード・スニペットの基本的な利用方法については、「TIPS:コード・スニペットを素早く挿入するには?」に記述されているので、併せて参照していただきたい。ちなみに、コード・スニペットはC#やVisual Basic(以降、VB)の各Express Edition以上のすべてのエディションで利用できる機能である。

独自のコード・スニペットを登録・利用するためには?

 VS 2005では、1つのコード・スニペットは、「.snippet」という拡張子を持つ、1つのXMLファイルで管理される。従って、独自のコード・スニペットを作成するには、このXMLファイルを作成する必要がある。

 .snippetファイルはコード・スニペット用のスキーマ(=「コード スニペット スキーマ」)に基づいて作成しなければならないので、手動で作成する*1よりも、.snippetファイル作成用のツールで自動生成する方が便利だ。だが残念ながら、VS 2005では標準でそのようなツールが提供されていないため、サードパーティが提供するツールを使う必要がある。

 とはいっても現時点でVS 2005全体(=全言語共通)で使える決定打となるコード・スニペットの編集ツールはまだ存在しないようだ。現時点で筆者が最もお薦めできるのは、C#では「Snippy」、VBでは「Visual Basic Snippet Editor」である(なお、どちらのツールもC#とVBの両方のコード・スニペットを作成できるのだが、それぞれのツールには向いている言語/向いていない言語という特色があるため、ここではツールを言語ごとに分けた)。

 本稿ではこのうちSnippyを使ってC#のコード・スニペットを作成する方法を紹介する。なおVBでコード・スニペットを作成する方法については後日公開するTIPSであらためて紹介する。

*1 手動でコード・スニペットを作成するには、VS 2005のIDEでXMLファイルの新規作成を行い(具体的にはメニュー・バーから[ファイル]−[新規作成]−[ファイル]をクリックし、表示される[新しいファイル]ダイアログで「XML ファイル」を作成する)、エディタに開かれたXMLファイルのコード上に「Snippet」という名前のコード・スニペットを挿入すればよい(コード・スニペットを挿入するには、[Ctrl]+[K]キーを押してすぐに続けて[X]キーを押すか、メニュー・バーから[編集]−[IntelliSense]−[スニペットの挿入]を選択すればよい)。

Snippyを使ったコード・スニペットの作成

 C#でコード・スニペットを作成するには、GotDotNet(米国)のWorkspaces上で開発されているオープンソース・ツールである「Snippy」というツールがお薦めだ。Snippyは、以下のサイトからダウンロードできる。

 ダウンロード後、ツールをインストールし、[スタート]メニューから[PowerToys for Visual Studio 8]−[Snippy]−[Snippy]を選択すると起動する。次の画面はSnippyを実際に起動して、独自のコード・スニペットを作成しているところだ。Snippyの操作方法については、この画面の説明内容を参考にしてほしい。

Snippyによるコード・スニペットの作成
この画面の例は、MessageBoxクラス(System.Windows.Forms名前空間)の静的なShowメソッド(2つの文字列をパラメータに取るバージョン)の呼び出しを挿入するコード・スニペットを作成しているところである。なおこの例ではC#のコード・スニペットを作成しているが、もちろんVBやXMLのコード・スニペットを作成することもできる(XMLのコード・スニペットはXMLファイル編集用のエディタ上で利用できる)。
  コード・スニペットのタイトルを指定する。
  コード・スニペットのショートカット名を入力する。ここで指定した名前が、「TIPS:コード・スニペットを素早く挿入するには?」で紹介したショートカット名として利用できる。
  コード・スニペットの作成者の名前を指定する。
  コード・スニペットの内容に関する説明を記述する。
  コード・スニペットの種類を「Expansion」「SurroundsWith」の中からを選択する。複数選択も可能。Expansionはカーソル位置に挿入されるタイプ、SurroundsWithは選択したコードの前後に挿入されるタイプのコード・スニペットであることを表す。これらの種類の違いについては、「TIPS:コード・スニペットを素早く挿入するには?」でも説明しているので併せて参照していただきたい。なおC#のリファクタリング機能はコード・スニペットを利用して実現されているらしく、このため「Refactoring」という種類も用意されているのだが、カスタムのコード・スニペットでは使用できない。
  インポートする必要がある名前空間を指定するための欄だが、C#では指定できない。VBで使用する。
  コード・スニペット内で利用するリテラル(=文字列)やオブジェクトといった変数(=ユーザーが書き換えなければならない部分。[TAB]キーにより移動する部分)をここで追加する。当然ながら、[Add]ボタンで追加、[Edit]ボタンで編集、[Remove]ボタンで削除できる。[Add]ボタンをクリックすると、[Literal Editor - Snippy]ダイアログが表示される。
  コードで使用する変数名を指定する。必須。この例では「text」というIDを指定しているが、で記述する実際のコード内容では「$text$」というように“$”で囲んで利用する。
  ユーザーがコード・スニペットを挿入すると、VS 2005によって(書き換えなければならない)変数部分は色付けされるが、その上にマウス・カーソルを乗せると表示されるツールチップのテキストを入力する。省略可能。
  ユーザーがコード・スニペットを挿入すると、変数部分にデフォルトで入力される値。省略可能。
  ユーザーがコード・スニペットを挿入した後、VS 2005で変数部分がフォーカスを受け取ったときに実行される関数を指定する。省略可能。ここで使用できるコード・スニペットの関数については、「コード スニペットの関数」を参照されたい。
  変数がリテラル(Literal)かオブジェクト(Object)かを指定する。ただし、筆者が試したバージョンのSnippyでは、Type要素を指定できないため、オブジェクトを選択することは不可能だった(オブジェクト変数の場合、Type要素の指定が必須である)。
  ユーザーが変数部分を編集可能(Editable)かどうかを指定する。通常はチェックを入れて編集可能にすべきである。ここでチェックを外すケースとしては、上述のコード・スニペット関数を利用する場合が挙げられる(以下で具体的な例を示す)。
  言語を「csharp」(=C#)「vb」「xml」などの中から選択する。
  コード・スニペットの実際のコードを記述する。でも述べたが、変数は“$”で囲んで利用する。

 この画面の手順に従ってコード・スニペットの内容を入力し終わったら、メニュー・バーから[File]−[Save]を選択してスニペット・ファイル(.snippetファイル。本稿では「MessageBoxShow.snippet」)として保存する。保存しようとすると[名前を付けて保存]ダイアログが表示されるので、そこで次に示す場所に保存するとよい(C#の場合)。

<マイ ドキュメント>\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets

 ここに保存すれば、ほかに何もしなくても、コード・スニペットがすぐに利用できる(これは「My Code Snippets」フォルダがデフォルトでコード・スニペット・ディレクトリとして登録されているためだ)。

 これ以外のフォルダにコード・スニペットを保存する場合、そのフォルダをコード・スニペット・ディレクトリとして登録する必要がある。その方法については、「TIPS:C#でタスク・ベースのコード・スニペットを利用するには?」の「タスク・ベースのコード・スニペットの利用設定と実際の使用」の項目を参考にしてほしい。

コード・スニペット関数を利用した名前空間の自動省略

 独自のコード・スニペットを作成する際には、挿入するクラスの記述に対して名前空間を記述すべきかどうかという問題がある。つまり、例えばMessageBoxクラスはSystem.Windows.Forms名前空間なので、どこでも利用できるコード・スニペットにするには、「System.Windows.Forms.MessageBox」と名前空間を含めた長いクラス名を記述する必要があるが、これではあまりに記述が冗長になってしまう。

 この名前空間名の問題を解決するには、コードの状況(=コンテキスト)に合わせてクラス名のみの「MessageBox」で挿入されたり、完全な名前の「System.Windows.Forms.MessageBox」で挿入されたりするようにしなければならない。それを実現するのが、コード・スニペット関数の

SimpleTypeName(<名前空間名を含めたクラス名>)関数

である。

 SimpleTypeName関数は、パラメータに指定された<名前空間を含めたクラス名>を、コード・スニペットが挿入されるコンテキストに合わせて最も単純な形式に縮小するためのものだ。これにより、例えばusingディレクティブによって「System.Windows.Forms」名前空間が宣言されている場合は「MessageBox」のみが挿入され、宣言されていなければ「System.Windows.Forms.MessageBox」と長いクラス名が挿入されるわけである。

 なお、コード・スニペット関数は変数経由で使用しなければならないが、この変数をユーザーが書き換える必要はないので、前掲の画面のEditableのチェック・ボックスは外した方がよい。

 次の画面は実際にSimpleTypeName関数を使用してリテラル変数を設定しているところである。

SimpleTypeName関数を使用したリテラル変数の設定例
コード・スニペット関数を利用することで、コンテキストに合わせて名前空間を省略できる。
  コードで使用する変数名を指定する。この例では「MessageBox」というIDを指定しているが、この変数はコードでは「$MessageBox$」というように“$”で囲んで利用する。
  SimpleTypeName関数を指定する。本稿の例では「SimpleTypeName(System.Windows.Forms.MessageBox)」と指定している。
  リテラル(Literal)を選択する。
  編集可能(Editable)のチェック・ボックスは外す。

 VBで独自のコード・スニペットを登録する方法については、「TIPS:VBで独自のコード・スニペットを登録するには?」で紹介している。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Visual Studio 2005 処理対象:IDE
関連TIPS:コード・スニペットを素早く挿入するには?
関連TIPS:C#でタスク・ベースのコード・スニペットを利用するには?
関連TIPS:VBで独自のコード・スニペットを登録するには?

この記事と関連性の高い別の.NET TIPS
VBで独自のコード・スニペットを登録するには?
C#でタスク・ベースのコード・スニペットを利用するには?
コード・スニペットを素早く挿入するには?
チーム内でコード・スニペットを共有するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間