VS Codeのエージェントモードを拡張するには、を試してください!

拡張機能マニフェスト

すべてのVisual Studio Code拡張機能には、拡張機能ディレクトリ構造のルートにマニフェストファイルpackage.jsonが必要です。

フィールド

名前 必須 タイプ 詳細
name Y string 拡張機能の名前 - スペースなしのすべて小文字である必要があります。
名前はマーケットプレイスで一意である必要があります。
version Y string SemVer互換バージョン。
publisher Y string 公開者識別子
engines Y object 拡張機能が互換性のあるVS Codeのバージョンと一致するvscodeキーを少なくとも含むオブジェクト。*にはできません。例: ^0.10.5は、VS Codeの最小バージョン0.10.5との互換性を示します。
license string npmのドキュメントを参照してください。拡張機能のルートにLICENSEファイルがある場合、licenseの値は"SEE LICENSE IN <filename>"である必要があります。
displayName string マーケットプレイスで使用される拡張機能の表示名。
表示名はマーケットプレイスで一意である必要があります。
description string 拡張機能が何であり、何をするかについての短い説明。
categories string[] 拡張機能に使用したいカテゴリ。許可される値: [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs, Data Science, Machine Learning, Visualization, Notebooks, Education, Testing]
keywords array 拡張機能を見つけやすくするためのキーワードの配列。これらはマーケットプレイスの他の拡張機能のタグに含まれます。このリストは現在30キーワードに制限されています。
galleryBanner object マーケットプレイスのヘッダーをアイコンに合わせるのに役立ちます。詳細は下記を参照してください。
preview boolean 拡張機能をマーケットプレイスでプレビューとしてフラグ付けするように設定します。
main string 拡張機能のエントリポイント。
browser string Web拡張機能のエントリポイント。
contributes object 拡張機能の貢献を記述するオブジェクト。
activationEvents array この拡張機能のアクティベーションイベントの配列。
badges array マーケットプレイスの拡張機能ページのサイドバーに表示する承認済みバッジの配列。各バッジは、バッジの画像URL用のurl、ユーザーがバッジをクリックしたときにたどるリンク用のhref、およびdescriptionの3つのプロパティを含むオブジェクトです。
markdown string マーケットプレイスで使用されるMarkdownレンダリングエンジンを制御します。github (デフォルト) または standard
qna marketplace (デフォルト)、stringfalse マーケットプレイスのQ & Aリンクを制御します。デフォルトのマーケットプレイスQ & Aサイトを有効にするにはmarketplaceに設定します。カスタムQ & AサイトのURLを提供する場合は文字列に設定します。Q & Aを完全に無効にするにはfalseに設定します。
sponsor object ユーザーが拡張機能をスポンサーできる場所を指定します。これは、ユーザーが拡張機能をスポンサーできるページへのリンクである単一のプロパティurlを持つオブジェクトです。
dependencies object 拡張機能が必要とするすべてのランタイムNode.js依存関係。npmのdependenciesとまったく同じです。
devDependencies object 拡張機能が必要とするすべての開発用Node.js依存関係。npmのdevDependenciesとまったく同じです。
extensionPack array 一緒にインストールできる拡張機能のIDの配列。拡張機能のIDは常に${publisher}.${name}です。例: vscode.csharp
extensionDependencies array この拡張機能が依存する拡張機能のIDの配列。拡張機能のIDは常に${publisher}.${name}です。例: vscode.csharp
extensionKind array リモート構成で拡張機能がどこで実行されるべきかを示す配列。値はui (ローカルで実行)、workspace (リモートマシンで実行)、またはその両方で、順序で優先度が設定されます。例: [ui, workspace]は、拡張機能がどちらの場所でも実行できるが、ローカルマシンでの実行を優先することを示します。こちらで詳細を参照してください。
scripts object npmのscriptsとまったく同じですが、vscode:prepublishvscode:uninstallのようなVS Code固有のフィールドが追加されています。
icon string 少なくとも128x128ピクセル (Retinaディスプレイの場合は256x256) のアイコンへのパス。
pricing string 拡張機能の価格情報。許可される値: FreeTrial。デフォルト: Freeこちらで詳細を参照してください。
capabilities object 制限されたワークスペースでの拡張機能の機能を示すオブジェクト: untrustedWorkspacesvirtualWorkspaces

npmのpackage.jsonリファレンスも確認してください。

完全なpackage.jsonはこちらです

{
  "name": "wordcount",
  "displayName": "Word Count",
  "version": "0.1.0",
  "publisher": "ms-vscode",
  "description": "Markdown Word Count Example - reports out the number of words in a Markdown file.",
  "author": {
    "name": "sean"
  },
  "categories": ["Other"],
  "icon": "images/icon.png",
  "galleryBanner": {
    "color": "#C80000",
    "theme": "dark"
  },
  "pricing": "Free",
  "activationEvents": ["onLanguage:markdown"],
  "engines": {
    "vscode": "^1.0.0"
  },
  "main": "./out/extension",
  "scripts": {
    "vscode:prepublish": "node ./node_modules/vscode/bin/compile",
    "compile": "node ./node_modules/vscode/bin/compile -watch -p ./"
  },
  "devDependencies": {
    "@types/vscode": "^0.10.x",
    "typescript": "^1.6.2"
  },
  "license": "SEE LICENSE IN LICENSE.txt",
  "bugs": {
    "url": "https://github.com/microsoft/vscode-wordcount/issues",
    "email": "sean@contoso.com"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/microsoft/vscode-wordcount.git"
  },
  "homepage": "https://github.com/microsoft/vscode-wordcount/blob/main/README.md"
}

マーケットプレイス表示のヒント

VS Code Marketplaceに表示されたときに拡張機能を美しく見せるためのヒントと推奨事項をいくつかご紹介します。

必ず最新のvsceを使用してください (npm install -g @vscode/vsceで確認してください)。

拡張機能のルートフォルダーにREADME.mdというMarkdownファイルを置いておくと、その内容が拡張機能の詳細の本文 (マーケットプレイス上) に含まれます。README.mdでは、相対パスの画像リンクも使用できます。

以下にいくつかの例を示します

  1. Word Count
  2. MD Tools

適切な表示名と説明を提供してください。これはマーケットプレイスおよび製品内の表示にとって重要です。これらの文字列はVS Codeでのテキスト検索にも使用されるため、関連するキーワードを含めることが非常に役立ちます。

    "displayName": "Word Count",
    "description": "Markdown Word Count Example - reports out the number of words in a Markdown file.",

アイコンと対照的なバナーカラーは、マーケットプレイスページのヘッダーで美しく見えます。theme属性は、バナーで使用されるフォント (darkまたはlight) を参照します。

{
  "icon": "images/icon.png",
  "galleryBanner": {
    "color": "#C80000",
    "theme": "dark"
  }
}

設定できるオプションのリンク (bugshomepagerepository) がいくつかあり、これらはマーケットプレイスのリソースセクションの下に表示されます。

{
  "license": "SEE LICENSE IN LICENSE.txt",
  "homepage": "https://github.com/microsoft/vscode-wordcount/blob/main/README.md",
  "bugs": {
    "url": "https://github.com/microsoft/vscode-wordcount/issues",
    "email": "sean@contoso.com"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/microsoft/vscode-wordcount.git"
  }
}
マーケットプレイスリソースリンク package.json属性
問題 bugs:url
リポジトリ repository:url
ホームページ homepage
ライセンス license

拡張機能のcategoryを設定してください。同じcategoryの拡張機能はマーケットプレイスでグループ化され、フィルタリングと発見性が向上します。

注: 拡張機能に意味のある値のみを使用してください。許可される値は[Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs, Data Science, Machine Learning, Visualization, Notebooks, Education, Testing]です。構文ハイライトやコード補完などの一般的な言語機能にはProgramming Languagesを使用してください。カテゴリLanguage Packsは、表示言語拡張機能 (例えば、ブルガリア語のローカライズ) 用に予約されています。

{
  "categories": ["Linters", "Programming Languages", "Other"]
}

承認済みバッジ

セキュリティ上の懸念から、信頼できるサービスからのバッジのみを許可しています。

以下のURLプレフィックスからのバッジを許可しています

  • api.bintray.com
  • api.travis-ci.com
  • api.travis-ci.org
  • app.fossa.io
  • badge.buildkite.com
  • badge.fury.io
  • badge.waffle.io
  • badgen.net
  • badges.frapsoft.com
  • badges.gitter.im
  • badges.greenkeeper.io
  • cdn.travis-ci.com
  • cdn.travis-ci.org
  • ci.appveyor.com
  • circleci.com
  • cla.opensource.microsoft.com
  • codacy.com
  • codeclimate.com
  • codecov.io
  • coveralls.io
  • david-dm.org
  • deepscan.io
  • dev.azure.com
  • docs.rs
  • flat.badgen.net
  • gemnasium.com
  • github.com (Workflowsのみ)
  • gitlab.com
  • godoc.org
  • goreportcard.com
  • img.shields.io
  • isitmaintained.com
  • marketplace.visualstudio.com
  • nodesecurity.io
  • opencollective.com
  • snyk.io
  • travis-ci.com
  • travis-ci.org
  • visualstudio.com
  • vsmarketplacebadges.dev
  • www.versioneye.com

注: vsmarketplacebadge.apphb.com のバッジを vsmarketplacebadges.dev のバッジに置き換えてください。

使用したい他のバッジがある場合は、GitHubでissueを開いていただければ、検討いたします。

拡張機能の貢献を組み合わせる

yo codeジェネレーターを使用すると、TextMateテーマ、カラーライザー、スニペットを簡単にパッケージ化し、新しい拡張機能を作成できます。ジェネレーターを実行すると、各オプションに対して完全なスタンドアロン拡張機能パッケージが作成されます。ただし、複数の貢献を組み合わせた単一の拡張機能を持つ方が便利な場合がよくあります。例えば、新しい言語のサポートを追加する場合、ユーザーに言語定義と色付け、さらにスニペット、場合によってはデバッグサポートも提供したいと考えるでしょう。

拡張機能の貢献を組み合わせるには、既存の拡張機能マニフェストpackage.jsonを編集し、新しい貢献と関連ファイルを追加します。

以下は、LaTeX言語定義 (言語識別子とファイル拡張子)、色付け (grammars)、およびスニペットを含む拡張機能マニフェストです。

{
  "name": "language-latex",
  "description": "LaTex Language Support",
  "version": "0.0.1",
  "publisher": "someone",
  "engines": {
    "vscode": "0.10.x"
  },
  "categories": ["Programming Languages", "Snippets"],
  "contributes": {
    "languages": [
      {
        "id": "latex",
        "aliases": ["LaTeX", "latex"],
        "extensions": [".tex"]
      }
    ],
    "grammars": [
      {
        "language": "latex",
        "scopeName": "text.tex.latex",
        "path": "./syntaxes/latex.tmLanguage.json"
      }
    ],
    "snippets": [
      {
        "language": "latex",
        "path": "./snippets/snippets.json"
      }
    ]
  }
}

拡張機能マニフェストのcategories属性にProgramming LanguagesSnippetsの両方が含まれるようになり、マーケットプレイスでの発見とフィルタリングが容易になったことに注目してください。

ヒント: マージされた貢献が同じ識別子を使用していることを確認してください。上記の例では、3つの貢献すべてが言語識別子として「latex」を使用しています。これにより、VS Codeはカラーライザー (grammars) とスニペットがLaTeX言語用であり、LaTeXファイルの編集時にアクティブになることを認識します。

拡張機能パック

個別の拡張機能を拡張機能パックとしてバンドルできます。拡張機能パックは、まとめてインストールされる拡張機能のセットです。これにより、お気に入りの拡張機能を他のユーザーと簡単に共有したり、PHP開発のような特定のシナリオ向けに拡張機能のセットを作成して、PHP開発者がVS Codeをすばやく使い始められるようにしたりできます。

拡張機能パックは、package.jsonファイル内のextensionPack属性を使用して他の拡張機能をバンドルします。

例えば、以下はデバッガーと言語サービスを含むPHP用拡張機能パックです。

{
  "extensionPack": ["xdebug.php-debug", "zobo.php-intellisense"]
}

拡張機能パックをインストールすると、VS Codeはその拡張機能の依存関係もインストールするようになります。

拡張機能パックは、マーケットプレイスのExtension Packsカテゴリに分類する必要があります。

{
  "categories": ["Extension Packs"]
}

拡張機能パックを作成するには、yo code Yeomanジェネレーターを使用し、New Extension Packオプションを選択します。現在VS Codeインスタンスにインストールされている拡張機能のセットでパックをシードするオプションがあります。このようにして、お気に入りの拡張機能で拡張機能パックを簡単に作成し、マーケットプレイスに公開して他のユーザーと共有できます。

拡張機能パックは、バンドルされた拡張機能と機能的な依存関係を持つべきではなく、バンドルされた拡張機能はパックとは独立して管理可能であるべきです。ある拡張機能が別の拡張機能に依存している場合、その依存関係はextensionDependencies属性で宣言する必要があります。

拡張機能アンインストールフック

VS Codeからアンインストールされる際に拡張機能にクリーンアップが必要な場合、拡張機能のpackage.jsonのscriptsセクションにあるアンインストールフックvscode:uninstallnodeスクリプトを登録できます。

{
  "scripts": {
    "vscode:uninstall": "node ./out/src/lifecycle"
  }
}

このスクリプトは、拡張機能がアンインストールされた後にVS Codeが再起動 (シャットダウンと起動) され、拡張機能がVS Codeから完全にアンインストールされたときに実行されます。

: Node.jsスクリプトのみがサポートされています。

便利なNodeモジュール

VS Code拡張機能の記述を支援するために、npmjsでいくつかのNode.jsモジュールが利用可能です。これらは拡張機能のdependenciesセクションに含めることができます。

次のステップ

VS Codeの拡張性モデルについて詳しく知るには、次のトピックを参照してください。