🎉

Visual Studio拡張機能自作入門

2024/09/23に公開

Visual Studio拡張機能とは

Visual Studioは、Windows向けアプリケーション開発でよく使用される統合開発環境(IDE)です。Visual Studio拡張機能は、その環境に機能やツールを追加できるプラグイン/アドオンのことを指します。

この記事を読むと

この記事では、簡単なVisual Studio拡張機能を自作することで、その概念や構造の基本を理解し、より実践的な拡張機能を開発するための最初のステップを学ぶことができます。

自作する Viual Studio拡張機能 の概要

今回は、特定の機能を持たせず、Visual Studioの拡張機能管理に登録できる拡張機能を作成します。最初のステップとして、この基本的な拡張機能から始めていきます。

前提

Visual Studio 2022

Visual Studio 2022がインストールされていること。Community版で問題ありません。

拡張機能のワークロード

Visual Studioインストーラーを起動し、「Visual Studio拡張機能の開発」にチェックを入れ、「ダウンロードしながらインストールする」を選択して実行します。すでにインストール済みの場合は、このステップはスキップして構いません。

Vsixプロジェクトの新規作成

Visual Studioを起動し、「新しいプロジェクトの作成」画面で検索欄に「vsix」と入力して、拡張機能開発向けのプロジェクトテンプレートを表示します。次に、「VSIX Project」を選択します。

Vsixプロジェクトの作成直後


この構成が拡張機能開発プロジェクトの最小構成です。

Vsixプロジェクト内のファイル説明

source.extension.vsixmanifest

作成する拡張機能に関する情報を格納するマニフェストファイルです。XML形式で記述されています。

source.extension.vsixmanifest
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
  <Metadata>
    <Identity Id="VSIXProject1.b5440dae-07f3-4e9b-812c-7b2171b0e435" Version="1.0" Language="en-US" Publisher="Company" />
    <DisplayName>VSIXProject1</DisplayName>
    <Description>Empty VSIX Project.</Description>
  </Metadata>
  <Installation>
    <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[17.0, 18.0)">
      <ProductArchitecture>amd64</ProductArchitecture>
    </InstallationTarget>
  </Installation>
  <Dependencies>
    <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" />
  </Dependencies>
  <Prerequisites>
    <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[17.0,18.0)" DisplayName="Visual Studio core editor" />
  </Prerequisites>
  <Assets>
    <Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
  </Assets>
</PackageManifest>
  1. Metadata
    拡張機能のメタデータを格納します。この拡張機能を一意に識別する識別情報や、表示名、説明などを設定します。
  2. Installation
    拡張機能のインストール情報です。インストール対象のVisual Studioや、対応するCPUアーキテクチャなどを設定します。
  3. Dependencies
    拡張機能が依存するコンポーネントやライブラリを設定します。
  4. Preresuistes
    拡張機能が動作するために必要なコンポーネントを設定します。
  5. Assets
    拡張機能のインストール時に含まれるファイルやリソースを定義します。

マニフェストを更新する際は、通常XMLファイルを直接編集せず、以下のデザイナを使用します。

VSIXProject1Package.cs

Visual Studio拡張機能のパッケージを表すクラスです。AsyncPackageクラスを継承しており、Visual Studioでこのパッケージが読み込まれる際の初期化処理を記述します。

VSIXProject1Package.cs
using Microsoft.VisualStudio.Shell;
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Task = System.Threading.Tasks.Task;

namespace VSIXProject1
{
    [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
    [Guid(VSIXProject1Package.PackageGuidString)]
    public sealed class VSIXProject1Package : AsyncPackage
    {
        public const string PackageGuidString = "17168784-3201-4d02-92d1-c2e1ad14eabd";

        protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
        {
            await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
        }
    }
}
  1. PackageRegistration
    このクラスがVisual Studio拡張機能パッケージとして登録されることを示します。
  2. Guid (文字列)
    拡張機能の識別子です。ここに指定されたGuid文字列を利用して拡張機能を識別します。
  3. InitializeAsync
    拡張機能の初期化を非同期で行うメソッドです。拡張機能固有の初期化処理はここに記述します。

拡張機能の実行とデバッグ

次のボタンをクリックすることで、拡張機能のデバッグ実行が可能です。

デバッグ実行時には「実験用インスタンス」が起動されます。「実験用インスタンス」は、起動元のVisual Studioとは独立した環境で動作するため、拡張機能開発プロジェクトに副作用を与えずに機能確認を行うことができます。

「コードなしで続行」をクリックします。

次に、メニューから 拡張機能 > 拡張機能の管理 をクリックします。
ここで、作成中の拡張機能が登録されていることを確認できます。
(なお、この段階では拡張機能は登録されているだけで、具体的な機能は実装されていません。)

ここまで確認できたら、ファーストステップは完了です。
次回は、具体的な機能を実装していきます。

Discussion