
スニペットとは、再利用可能なソースコード、マシンコード、またはテキストの小さな領域を指すプログラミング用語です。通常、これらはより大きなプログラミングモジュールに組み込むために正式に定義された操作単位です。スニペット管理は、一部のテキストエディタ、プログラムソースコードエディタ、IDE、および関連ソフトウェアの機能です。これにより、ユーザーは日常的な編集操作の過程で繰り返し入力する必要がなくなります。[1]
意味
プログラミングの実践において、「スニペット」とは、エディタプログラムによってファイルに文字通り組み込まれるソースコードの一部を指し、コピーアンドペーストプログラミングの一種です。[2]この具体的な組み込みは、言語内で抽象化される関数やマクロなどの抽象化方法とは対照的です。したがって、スニペットは主に、抽象化が利用できない、または望ましくない場合、たとえば抽象化が欠如している言語や、明確さやオーバーヘッドの排除のために使用されます。
スニペットは、エディタに静的な前処理が含まれているのと似ており、コンパイラによるサポートを必要としません。その一方で、これは、スニペットを事後に必ず変更できるわけではないことを意味し、したがって、コピー アンド ペースト プログラミングのすべての問題に対して脆弱です。このため、スニペットは主に、単純なコード セクション (ロジックがほとんどない) や、著作権表示、関数プロトタイプ、共通制御構造、標準ライブラリのインポートなどの定型文に使用されます。
概要
スニペット管理は、ソフトウェア開発者や、繰り返し入力されるテキストのカタログ (ソース コードや定型文など) のコンテンツを日常的に必要とするその他の人々の間で人気のあるテキスト エディターの機能です。多くの場合、この機能は、入力されるたびにコンテンツがわずかにしか変化しない (またはまったく変化しない) ため、正当化されます。
テキストエディタのスニペット
この機能を備えたテキスト エディターは、通常、テキスト エディターとオペレーティング システムが個別のファイルの管理を可能にするのと同じ方法で、カタログと個別の「スニペット」を管理するメカニズムを提供します。これらの基本的な管理機能には、リポジトリ、カタログ、またはデータベースへのスニペットの表示、追加、編集、削除、並べ替え、フィルタリング、グループ化、名前変更、および保存などの操作が含まれます。一部のエディターは、スニペットに対するマクロ機能を提供し、標準テンプレートに基づいて関数プロトタイプと変数制御構造を生成できるようにします。
IDE のスニペット
Eclipse、NetBeans、Microsoft のVisual Studio (内部ではTextMate風のスニペットを使用)などの一部のプログラマー向けアプリケーションやその他のIDEには、コーディングを容易にするための構造の部分が組み込まれています。
Macromedia Dreamweaverなどの他のアプリケーションでも、 Web 開発にこれらのコード スニペットが利用されます。
JIT コンパイラのスニペット
ジャストインタイム ( JIT ) コンパイラは、コードのプリコンパイルされたセクションを、より長いオブジェクト コード/マシン コードセグメントとして「つなぎ合わせる」ことができます。これにより、解釈時間が大幅に短縮され、同時に実行速度も向上します。

シェル内のスニペット
スニペットは、bash、zsh ( GNU Linux /Unix 系)、powershell ( MS Windows )などのコマンドライン インターフェイス内で使用できます。補完やプレースホルダーの置換などの機能は、サポートされている場合とサポートされていない場合があります。
例
2 つの変数xとyの値を交換するプロセスについて考えてみましょう。弱い型付けを前提とし、名前の衝突を気にしないとすると、これは次のコードで表されます。
温度 = x x = y y = 温度
スニペットを挿入すると、プログラマーは 2 つのパラメータの値の入力を求められます。これらが、交換する変数の実際の名前である typefooと でbarあると仮定すると、次のコードが生成されます。
温度 = フード foo = バー バー = 温度
スニペットがその後変更され、__tempたとえば の代わりにが使用されるようになった場合temp、すでに挿入されているコードは変更されませんが、スニペットのその後の挿入では が使用されます。
このスニペットは次のように表すことができます。
一時 = $1 1ドル = 2ドル $2 = 一時
コンベンション
前述の基本的な管理機能に加えて、スニペット管理機能は、スニペットとそれをホストするテキスト エディターまたはアプリケーション間の対話の範囲に応じて分類できます。
これらのスニペット機能グループには次のものが含まれます。
- プレーンテキストまたは「静的」スニペット
- インタラクティブまたは「動的」スニペット
- スクリプト可能なスニペット
- 静的
- このタイプのスニペットは、主に、ユーザーが現在のドキュメントに挿入することを選択できる固定テキストで構成されます。ユーザーは、新しく挿入されたテキストに対するカーソルの位置を除いて、他のものを指定することはできません。静的スニペットは、マクロがIDE ではなくコマンドライン プログラムによって評価 (または挿入) されることが多い点を除けば、単純なマクロに似ています。
- 動的
- スニペットは、固定テキストと、編集者またはユーザーによる変更が可能な動的要素 (プレースホルダー) の組み合わせで構成されます。ユーザーは、現在のドキュメントに挿入するものを選択する際に、動的要素の内容と、固定テキストに対するそれらの位置の両方を指定できます。動的要素の例としては、現在の日付やシステム時刻などの変数、GUI 経由で提供されるユーザーからの入力、または別のアプリケーションからの入力などが挙げられます (プログラム可能なマクロも参照)。
- スクリプト可能
- スニペットは、マクロ言語またはスクリプト言語のいずれかで記述された実行可能なコード セグメントで構成されます。スクリプト可能なスニペットは、ユーザーに最大限の柔軟性を提供しますが、これはテキスト エディターでサポートされているプログラミング言語や、そのプログラミング言語がよく知られているか、特定のエディターに固有のものであるかによって多少異なります。
スクリプト サポートの種類はさまざまですが、シェル コマンドの実行、 GUI ダイアログの提供、オペレーティング システム、他のアプリケーション、またはホスティング アプリケーション自体の他のサブコンポーネントとのユーザー対話のその他の方法などの機能が含まれる場合があります。
スニペットプレースホルダー
プレースホルダーは、スニペット内の要素であり、ユーザーまたは他の外部プロセスによって提供されるようになっています。プレースホルダーの値は、編集セッション中にスニペットのテキストが挿入されるまで決定されません。
プレースホルダーには、エディターが現在の編集バッファー内の他のテキストを基準にしてプレースホルダーの境界を識別できるようにする 特別なマークアップ構文がある場合があります。
他のアプリケーションでは、グラフィカル ユーザー インターフェイスとモーダル ダイアログ ボックスが採用されており、ユーザーはプレースホルダーに指定する 1 つ以上の値を入力できます。
プレースホルダー識別子
プレースホルダーは通常、スニペット テキストの残りの部分と区別するために、何らかの特殊文字または文字列で示されます。一部のシステムでは、スニペット プレースホルダーに名前付き識別子を使用できます。識別子は、プレースホルダーの複製やプレースホルダーの変換などの機能をサポートする場合に役立ちます。
次の例では、識別子first_name、last_name、 を使用しますitem。
こんにちは、{% first_name %} {% last_name %} 、
{% item %}の出荷品の受け取り準備が整いました。
ありがとう、{% first_name %} !
TexMate構文のスニペットの例:
こんにちは${ 1 : first_name } ${ 2 : last_name }、
${ 3 : item }の
出荷 品の受け取り準備が整いました。
${ 4 : first_name }
さん、ありがとうございます!
プレースホルダーの重複
これにより、ユーザーは、1 つのプレースホルダーに指定された値を、プログラム可能なスニペットのテキスト全体に対して複数の場所に複製する必要があることを示すことができます。前の例では、名前付きプレースホルダーfirst_nameがこの使用例です。
プレースホルダー変換
これにより、ユーザーは、プレースホルダーに指定された 1 つ以上の値を、プログラム可能なスニペットのテキスト内の他の場所に複製および変換する必要があることを示すことができます。たとえば、ユーザーはスニペットの一部にドキュメント タイトルを指定し、そのドキュメント タイトルを他の場所に繰り返して、最初のインスタンスをすべて大文字にし、他のインスタンスをすべて小文字にするように指定できます。
スニペットプログラミング機能
スクリプト可能なスニペットをサポートするアプリケーションの場合、サポートされるプログラミング機能の範囲は異なります。以下は、プログラム可能なスニペットに一般的に実装されている機能の一部です。
プレーンテキスト
プレーン テキストは、プログラム不可能な「静的」スニペットのみをサポートするアプリケーションでも含まれる基本的な機能ですが、プレーン テキストの操作にはプログラム可能なスニペットも使用されます。
ただし、よくある複雑な点の 1 つは、プログラム可能なスニペットをサポートする環境では、多くの場合、「プレーン テキスト」とみなされるものと「プログラミング命令」とみなされるものを区別する必要があることです。この区別をさらに複雑にしているのは、プログラム可能なスニペットをサポートするアプリケーションには、ほとんどの場合、基本的な構文の強調表示または埋め込みコマンドの実行を通じて、複数のプログラミング言語の認識がサポートされているという事実です。
これらの理由およびその他の理由により、プログラム可能なスニペットからプレーンテキストを出力する場合は、ほとんどの場合、構文と区切り文字の衝突に関する問題を回避するように注意する必要があります。
定数と変数
プログラム可能なスニペットには、既存の変数スコープまたは名前空間へのバインディングを確立する機能が含まれていることが多く、ユーザーはそこからさまざまな定数または変数を選択できます。これらには、特定のマシンに現在ログインしているユーザーの電子メール アドレス、現在のシステム時刻と日付、関数の出力値などの値が含まれる場合があります。
スクリプト可能なスニペットは、多くの場合、現在アクティブな 1 つ以上のファイルに関連付けられます。したがって、変数には、現在の編集セッションのファイルに関連するその他の統計情報に加えて、ファイル名、カーソル位置、親ディレクトリを指定する 環境変数と引数も含まれる場合があります。
解釈されたコード
スクリプト可能なスニペットを使用すると、1 つ以上のプログラミング言語でコードを実行できます。これには、1 つ以上のスタンドアロン言語、またはその言語がホストされているアプリケーションに固有の言語が含まれる場合があります。
代替案
コード スニペットの最も基本的な代替手段は、ライブラリ内のサブルーチンです。サブルーチンは再利用可能なソフトウェア ライブラリに組み込むことができ、複数のプログラミング プロジェクト間で共有できます。
オブジェクト指向プログラミングと関数型プログラミングにおけるデザイン パターンはどちらも、プログラマーがコードのさまざまな部分に毎回わずかに異なるスニペットを繰り返し挿入する作業を回避または削減できるようにする手法です。Cファミリの言語では、この目的で プリプロセッサが使用されることがあります。
ただし、このアプローチの欠点は、パターンやドキュメントを覚えるのが難しいことです。
ソフトウェアサポート
2021年現在、人間が読めるテキストから特定の機能を推測し、対応するソースコードスニペットを生成するのに役立つ洗練されたディープラーニングツールが登場しています(例: GitHub Copilot)。[3] [4]
参照
- オートコンプリート – ユーザーが入力している単語の末尾を予測する計算機能
- コードベース – システム、アプリケーション、またはコンポーネントの構築に使用されるソースコードコレクション
- コードリファクタリング – 外部の動作を変えずに既存のコンピュータコードを再構築する
- コンテンツ管理 – 視聴者を念頭に置いて構築された情報や体験を管理するプロセス
- Pastebin – ユーザーがプレーンテキストを保存できるオンラインコンテンツホスティングサービスの一種
- Scrapbook (Mac OS) – Macintosh コンピュータ ソフトウェア
- バージョン管理 – ファイルのバージョンを管理する活動
- Web ウィジェット – Web ページ内で使用することを目的としたアプレット
参考文献
- ^ 「Gedit/Plugins/Snippets」。2012年8月25日時点のオリジナルよりアーカイブ。2010年1月9日閲覧。Gedit エディタの機能の例。
- ^ Kim, Miryung; Bergman, Lawrence; Lau, Tessa; Notkin, David (2004)。「OOPL におけるコピー アンド ペースト プログラミング プラクティスの民族誌的研究」(PDF)。議事録: 2004 International Symposium on Empirical Software Engineering、ISESE 2004: 2004 年 8 月 19 ~ 20 日、カリフォルニア州レドンド ビーチ。カリフォルニア州ロサンゼルスアラミトス: IEEE。pp. 83 ~ 92。ISBN 978-0-7695-2165-7. OCLC 326620442。 2016年10月19日に オリジナル(PDF)からアーカイブ。2016年10月18日に取得。
各C&Pインスタンスについて、コピーされたコードスニペットとコードベースの他の場所のコードとの関係も記録しました。
- ^ HM LE, TRIET; CHEN, HAO; ALI BABAR, MUHAMMAD (2021). 「ソースコードのモデリングと生成のためのディープラーニング」. ACMコンピューティング調査. 53 (3). アデレード大学: 1–38. arXiv : 2002.05442 . doi :10.1145/3383458. S2CID 211096967.
- ^ 「GitHub、コーディング提案を行う新しいAIツールをプレビュー」TechCrunch 2021年6月29日 2021年7月25日閲覧。
