GitHub Copilot CLI による Vibe Coding を使用した SSMS から安全にクエリを実行するための補助をする拡張機能作成の概念検証 で、Vibe Coding を使用した SSMS の拡張機能作成について触れました。
拡張機能の作成については、SSMS 拡張機能を作成する際の参考ドキュメント でも触れていますが、チュートリアルとして公開されている情報は「既存のツールバーにメッセージぼっくを表示するコマンドを追加する」というような内容が多いかと思います。
現在作成している SSMS 拡張機能ではいくつかの機能を追加しているのですが、その中で「新しく開いたクエリエディターに特定のトランザクション分離レベルのテキストを挿入する」という機能があります。
このようなクエリエディターの内容を更新する機能は、拡張機能を作成する際に使用したいケースが多いのではないでしょうか。
本投稿では Vibe Coding で作成したコードから、特定の機能を抽出し、新しくプロジェクトを作成する際に再現性を高くして再利用することができるのかを確認してみました。
再利用をするための作業の流れ
本投稿では Vibe Coding で作成したコードから特定の機能を抽出し再利用をするために、次の流れで作業を実施しています。
- ドキュメントの作成
- 作成したドキュメントをコンテキストとして追加しプロンプトを実行
新しく作成したプロジェクト / セッションで再利用をするため、最初に該当する実装のドキュメントを作成します。
次に、そのドキュメントを使用して実装をするためのプロンプトを実行することで、実装を再利用することができるかを確認しています。
今回、使用している Vibe Coding のツールとモデルは次の内容となります。
- Vibe Coding Tool: GitHub Copilot CLI
- 追加した MCP: Microsoft Learn MCP Server
- 使用する技術スタックは Microsoft 関連のものとなりますので Learn の MCP Server も追加
- Model: gpt-5.2
ドキュメントの作成
既に機能としては作成されているものですので、次のようなプロンプトでドキュメントを作成させます。
PRD / SPEC に ISOLATION LEVEL の自動挿入についてのドキュメントを作成して下さい。 === SPEC ですが、現在実装されている自動挿入を詳細化した内容に更新してください。 - どのようにして新しいクエリエディターを開いたことを検知しているか - 開いたエディターにどのようにして文字を挿入しているか。 この内容は可能な限り詳細に解説してください。 ==== learn.microsoft.com から関連ドキュメントを探し、各章に参考ドキュメントを追加してください。 === SPEC に具体的なコードも記載してください。 === https://learn.microsoft.com/ja-jp/visualstudio/extensibility/internals/document-windows?view=vs-2022 このドキュメントが参考として記載されていませんが、不要ですか? === SPEC に実装の概要も記載が欲しかったです。 === 処理フローにもう少し概要を記載してもらえますか。また、6 章以降のアウトラインの番号が誤っているので修正してください。 === 各参考ドキュメントにどのような内容が記載されているのかのコメントを追加して下さい。 === ()ではなく、箇条書きのレベルを下げて解説を入れてください。 === ドキュメントの概要に、今回の実装の中で各ドキュメントの内容をどのように使用しているのかも記載してください。
ドキュメントをブラシュアップしながら段階的に作成をしており、これらのプロンプトで作成できることが確認できたので、次からは指示をまとめることもできるかと思います。
このリポジトリはスペック駆動開発で実施しており、PRD / SPEC をセットで作成しているため、上記で出力されたドキュメントには PRD / SPEC の両方が含まれてます。
PRD は要求仕様を固めるものとなり実装済みの機能の再実装に対しては使用することはないため、今回は SPEC のみの公開としましたが、上記のプロンプトで次のような Markdown を作成することができます。(実際に再利用する際には SPEC のみを使用しています)
- https://gist.github.com/MasayukiOzawa/83feef36ccb361661a2fc9a13817779b#file-feature001_autoinsertisolationlevel-md
- 最終的に Vibe Coding で作成されたコード (VSIXProject1Package.cs / EditMonitor.cs もアップロードしています)
「既存のドキュメントが存在している」「カスタム指示を組み込んでいる」状態で出力したドキュメントとなりますので、素の状態で上記の内容のドキュメントが作成されない可能性はありますが、GitHub Copilot CLI + gpt-5.2 でこのレベルのドキュメントは出力できるようです。
作成していたトランザクション分離レベルの自動挿入機能では、
- どのトランザクション分離レベルを自動挿入するか選択するメニュー
- 選択した分離レベルをユーザー設定として永続化
- トランザクション分離レベルの自動挿入
という機能も含んでいるため、自動挿入の箇所以外の仕様もドキュメントに含まれていますが、テキストの自動挿入を実装するための記載を厚めに出力するようにしていますので、今回の再利用の検証では未使用の実装が含まれていても問題になりませんでした。
作成したドキュメントをコンテキストとして追加しプロンプトを実行
上記の作業で実装に必要なドキュメントを作成できました。
次に、Visual Studio で「VSIX Project」のプロジェクトを作成します。
(作成したプロジェクトでは、デバッグ設定 / VSIX の出力先設定を実施しています)
作成したディレクトリで GitHub Copilot CLI を起動して次のプロンプトを実行し、自動挿入の実装を開始します。
"C:\git\SSMSCustomExtension\docs\spec\FEATURE001_AutoInsertIsolationLevel.md" このドキュメントの内容をもとにして、新しいクエリエディターを開いた際に、自動的に SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; を追加する機能を実装して下さい。 拡張機能は .NET Framework で作成しているため、dotnet コマンドではなく、msbuild でビルドをしてください。
数回、プロジェクトを新規に作成して試してみたのですが、私の環境では安定して機能の追加を行うことができていました。
期待通りの実装が行えていると、新しいクエリエディターを開いた際に、次のように自動的にトランザクション分離レベルが追加されます。
SSMS の拡張機能の実装についての情報
SSMS 拡張機能の実装は、ブログ等の読みやすい内容で公開されているものは少なく、一般的に公開されているのはコマンドを追加してメッセージボックスを表示するという内容のステップバイステップになっていると思います。
それ以外の機能を実装する場合、GitHub の Public なリポジトリから SSMS の拡張機能のリポジトリを探し、どのように実装されているのかを調査しながら開発していくことが多いのではないでしょうか。
また、SSMS の拡張機能は Visual Studio の拡張機能の仕組みを使用するため、Visual Studio の拡張機能の観点で情報を探す必要もあります。
今回、自動挿入する機能では、RDT (Root Document Table) を使用していますが、軽く調べてみた限りでは、日本語の情報は Tanaka-san の Visual Studio 拡張でファイル保存イベントをフックする の情報しか実装を詳しく解説されたものはなさそうでした。
ツールバーのコマンド経由でテキストを挿入するのであれば [Visual Studio]拡張機能の開発で開発環境を自分好みに変更しよう! が参考となります。
SSMS の拡張機能実装は情報が少ないので Vibe Coding を活用することで効率化しやすい領域ではないでしょうか。
まとめ
Vibe Coding で実装した機能について、必要となる実装に注視してドキュメント化することで、他のプロジェクトでも機能を再利用して実装を行うことができることが確認できました。
Vibe Coding を使用することで、機能として動作するものを作ることはできますが
- どのようにして実装されているのか?
- Vibe Coding で作成した機能を他で再利用することはできるか?
を把握することは重要かと思います。
時間があるときに機能を抜粋して再利用性を確認してみるのは、学習 / コードの妥当性の確認のためにも良いかもしれませんね。