スニペットとは
スニペットとは、
[プログラミング]]において再利用可能なソースコード、マシンコード、テキストの断片を指します。これは、より大きな
プログラミングモジュールに組み込むための、定義された操作ユニットとして機能します。スニペット管理は、
テキストエディタ、
ソースコードエディタ、[[統合開発環境]などの機能として提供され、日常的な編集作業での繰り返し入力を削減します。
スニペットの概要
スニペットは、
ソフトウェア開発者や、繰り返し入力するテキスト(
ソースコード、ボイラープレートなど)を頻繁に使用する人々に役立つ機能です。入力内容がほとんど変化しない場合や、全く変化しない場合に特に有効で、入力の手間を大幅に削減できます。
スニペット機能を備えた
テキストエディタは、スニペットを管理するためのメカニズムを提供します。これにより、スニペットの表示、追加、編集、削除、並べ替え、フィルタリング、グループ化、名前変更、保存などの操作が可能です。一部のエディタでは、マクロ機能も提供されており、関数プロトタイプや変数制御構造を標準テンプレートに基づいて生成できます。
[統合開発環境]であるEclipse、
NetBeans、
Microsoft Visual Studioなどの
プログラミングアプリケーションには、コーディングを容易にするためのスニペット機能が組み込まれています。また、Adobe Dreamweaverなどのアプリケーションでは、Web開発におけるコードスニペットの利用も可能です。
JITコンパイラにおけるスニペット
JIT(Just-In-Time)
コンパイラは、事前にコンパイルされたコードのセクションを連結し、長いオブジェクトコードや
機械語セグメントとして扱います。これにより、解釈時間を短縮し、実行速度を向上させることができます。
スニペットの定義
プログラミングにおけるスニペットとは、エディタプログラムによってファイルに含まれる
ソースコードの一部を指します。これは、コピーアンドペースト
プログラミングの一形態と言えます。スニペットは、関数やマクロなどの抽象化メソッドとは異なり、抽象化が利用できない場合や、抽象化が必要ない場合に用いられます。スニペットは主に、コードの単純なセクションや、著作権情報、関数プロトタイプ、共通制御構造、標準
ライブラリのインポートなどの定型文に使用されます。
スニペットの例
例えば、2つの変数xとyの値を交換する処理は、以下のコードで表現できます。
temp = x
x = y
y = temp
スニペットが挿入される際に、
プログラマはパラメータの入力を求められます。例えば、fooとbarという2つの変数の値を交換する場合、以下のコードが生成されます。
temp = foo
foo = bar
bar = temp
スニペットが変更された場合、例えばtempを__tempに変更すると、既に挿入されたコードは変更されませんが、それ以降のスニペット挿入には変更が適用されます。
temp = $1
$1 = $2
$2 = temp
スニペットの種類
スニペット管理機能は、スニペットと
テキストエディタまたはアプリケーションとの対話性に応じて分類できます。
1.
静的スニペット:
固定テキストで構成され、ユーザは挿入先のカーソル位置以外には何も指定できません。単純なマクロに似ています。
2.
動的スニペット:
固定テキストと動的要素を組み合わせたものです。ユーザは、挿入するコンテンツと、固定テキストに対する動的要素の位置を指定できます。動的要素には、現在の日付や時刻、ユーザ入力、他のアプリケーションからの入力などが含まれます。
3.
スクリプト可能なスニペット:
マクロ言語や
スクリプト言語で実行可能なコードセグメントです。柔軟性が高く、シェルコマンドの実行、GUIダイアログの表示、
オペレーティングシステムとの対話など、さまざまな機能が含まれます。
スニペットプレースホルダー
プレースホルダーはスニペット内の要素で、ユーザーまたは他の外部プロセスによって提供されます。編集セッション中にスニペットのテキストが挿入されるまで値が確定しません。プレースホルダーには、エディタがその境界を識別するためのマークアップ構文が含まれている場合があります。
プレースホルダーの識別
プレースホルダーは、他のスニペットテキストと区別するために特殊文字や文字シーケンスで示されます。一部のシステムでは、スニペットプレースホルダーに識別子を付与できます。
例:
jinja
Hello {%first_name%} {%last_name%},
Your shipment of {%item%} is now ready to pick up.
Thanks {%first_name%}!
プレースホルダーの複製
これにより、同じプレースホルダーの値が複数の場所に複製できます。例では、first_nameという名前のプレースホルダーが複数回使用されています。
プレースホルダー変換
プレースホルダーの値を変形して出力できます。例えば、ドキュメントタイトルを1つはすべて大文字で、もう1つはすべて小文字で出力するなどが可能です。
スクリプト可能なスニペットをサポートするアプリケーションでは、
プログラミング機能の範囲はさまざまです。
プレーンテキスト:
プログラムできない「静的」スニペットにも含まれます。プログラム可能なスニペットは、プレーンテキストの操作にも使用されますが、シンタックスと区切り文字の衝突に注意が必要です。
定数と変数:
既存の変数スコープまたは名前空間へのバインディングを確立する機能が含まれており、
システム時刻、日付、ファイル名、カーソル位置などの値を選択できます。
解釈されたコード:
1つ以上のプログラミング言語でコードを実行できます。
スニペットの代替案
コードスニペットの最も基本的な代替手段は、サブルーチンです。サブルーチンは、再利用可能なソフトウェアライブラリに組み込まれ、複数のプロジェクト間で共有できます。
オブジェクト指向プログラミングと関数型プログラミングのデザインパターンは、プログラマがスニペットを繰り返し挿入することを回避または削減するために役立ちます。Cファミリ言語では、この目的でプリプロセッサが使用されることがあります。
参考資料
自動補完
Codebase
リファクタリング
コンテンツ管理
Pastebin
Scrapbook (Mac OS)
バージョン管理
Web ウィジェット
Gitlab
C# コード スニペット
Emeditor