データベースに「規約」を埋め込む時代へ - SSMS × Copilot 実例集10【2026年4月版】
こんにちは!
ネクスタで、SmartFの開発エンジニアをしている日野岡です。
みなさん、GitHub Copilotを契約しているのに、
SQL Server Management Studio (以下、SSMS)で使っていない、ということはないですか?
今回は、
SSMSの、22.4.1 で GitHub Copilot in SSMS が GA(一般提供) になったこともあり、
SSMSに統合されたGitHub Copilotの機能について、調査した結果をまとめてみました。
※本記事の内容は、2026年4月時点での個人的な調査結果です。最近のSSMSは、日々アップデートしているため、将来的に結果が変わる可能性があります。
では、さっそく機能と実例を見ていきましょう!
SSMS×Copilotの機能と実例10選
1. データベースに「規約」を埋め込む(Database Instructions)
データベースの拡張プロパティとしてAIへの指示を保存し、チーム全員に共通のルールを適用させる機能です。役割分担を意識すると効果が倍増します。
-
AGENTS.md(オブジェクトレベルの「それが何か」)
- 例:「
dbo.AptsテーブルのStatus列は 1=Scheduled, 2=Completed を意味する」 - 例:「
Customer.CustNoとOrder.CNoは外部キー制約はないが論理的に紐づく」 - 用途:略称テーブル名の解説、列値の意味、暗黙の外部キーなど。
- 例:「
-
CONSTITUTION.md(データベース全体の「どう使うべきか」というポリシー)
- 例:「
SELECT *は原則禁止」 - 例:「売上の計算は
NetAmountからFinance.Refundsを引いたものとする」 - 例:「PII列は標準で返さない」「テーブル名は PascalCase」
- 用途:命名規則、保持期間、共通の計算ルール、セキュリティポリシーなど。
- 例:「
実装は拡張プロパティなので、データベースへのパフォーマンスに影響はなく、sp_updateextendedproperty / sp_dropextendedproperty で運用できます。
追加時のサンプル
EXECUTE sp_addextendedproperty
@name = N'AGENTS.md',
@value = N'収益(Revenue)の定義は、Finance.Refundsに記録された返金を除くNetAmountの総計(SUM)です。実績収益の計算においては、Revenueカラムの値から返金分を減算してください。',
@level0type = N'SCHEMA',
@level0name = N'Finance',
@level1type = N'TABLE',
@level1name = N'CompanyRevenue';
EXECUTE sp_addextendedproperty
@name = N'CONSTITUTION.md',
@value = N'当データベースのT-SQL作成にあたっては、ガイドライン記載の組織標準を遵守してください。なお、SELECT * によるクエリ実行は原則禁止とします。';
2. 日本語からT-SQLを生成する(自然言語→T-SQL)
チャットやインラインで、自然言語のプロンプトからクエリを生成します。
-
実例:「過去30日間に登録された顧客の
CustomerID、氏名、および登録日を取得するクエリを記述して」と具体的な日本語プロンプトを打つだけで、適切なテーブルを推論し精緻なT-SQLを生成してくれます。(「最近の顧客情報を適当に出して」のような曖昧な指示だと回答の精度が低下するため、具体性が鍵になります)
3. 意図を先読みするコード補完(Code Completions)
これまでに書かれたコードの文脈から「次にやりたいこと」を予測してくれます。
-
実例:単純な関数名の提案にとどまらず、複数行にわたる複雑な
WHERE句やCASE文、あるいはJOINのロジック全体をグレーのテキストで提案してくれます。Tabキーを押すだけでそのまま採用できるので、タイピングの手間が激減します。
4. スキーマ設計と高度なデータベースオブジェクトの生成
自然言語の指示で、適切なデータ型や制約付きのDDLを生成します。
-
実例:「ユーザー管理とデバイス管理を行うためのテーブルを作成して。リレーションも考慮して」と指示するだけで、主キー(IDENTITY)や外部キー制約、NOT NULL制約を含む
CREATE TABLE文が一式出力されます。
5. クエリのトラブルシューティングと自動エラー修正(/fix)
エラーの原因を特定し、修正案を提示してくれます。
-
実例:実行エラーを引き起こすクエリを選択して
/fixと打つと、欠けている括弧や予約語の誤用、不足している制約などを検出し、修正済みのコードを即座に提案してくれます。 - Tips:チャット欄に打つ以外に、選択範囲を右クリック → "Fix" メニューからも同じことができます。マウス派の方はこちらが便利。
6. レガシーコードの解読係(/explain, /doc)
意味不明なストアドプロシージャの解読やコメント付与を自動で行います。
-
実例:複雑な
JOINやサブクエリを含むレガシーコードを選択し/explainを実行すると、各JOINの意図やフィルタリング条件の意味をステップバイステップで解説してくれます。そのまま/docコマンドを使ってコメントとしてコードに埋め込むことも可能です。 - Tips:これらも 右クリックメニュー → "Explain" / "Document" から呼び出せます。
7. 実行プラン解析とパフォーマンスの最適化(/optimize)
クエリの実行効率を分析し、改善案を提示します。
-
実例:遅いクエリを選択して
/optimizeを叩くと、カーソルの使用や無駄なループなどのアンチパターンを特定し、インデックスの追加提案や、セットベース処理への構造再編など、ベストプラクティスに合致する改善案を提示してくれます。 - Tips:右クリックメニュー → "Optimize" からも実行可能。
8. テストデータの自動生成とシードスクリプトの作成
テーブル定義やJSONサンプルを参照し、リアリティのあるダミーデータを自動生成します。
-
実例:テストデータの作成を依頼すると、
Email列には有効なメールアドレス形式、CreatedAt列には過去の日付など、文脈に合った数十〜数百行のINSERTステートメントを一括で作成してくれます。「OrderQtyを上限値1,000で生成して制約違反を確かめたい」のようなエッジケース生成にも対応。
9. アクティブな接続エディタからのコンテキスト自動抽出
AIにいちいちDB構成を教えなくても、勝手に空気を読んでくれます。
-
実例:エディタで特定のデータベースに接続している状態でチャットを開くと、Copilotはそのデータベースのスキーマ(テーブル名、列名など)と、開いているエディタの内容を自動で背景情報として保持します。そのため、「昨年の製品ごとの売上合計を算出して」と聞くだけで、勝手に
Sales.SalesOrderHeaderといった関連テーブルを推論してJOINしたクエリを書いてくれます。 - Tips:エディタを切り替えたあとに「あれ、コンテキストが古いまま?」と感じたら、Sync Active Editor オプションを有効にすると、現在のエディタと再同期されます。
10. カスタム指示(Custom Instructions)によるパーソナライズ
自分好みのコーディングスタイルをAIに学習させます。
-
実例:ローカル環境の
%USERPROFILE%フォルダ内にcopilot-instructions.mdというファイルを配置し、「常に大文字のT-SQLキーワードを使用する」「CTE(共通テーブル式)をサブクエリよりも優先する」と記載しておくだけで、出力フォーマットを自分の好みに固定できます。 - 第1項との違い:Database Instructions(AGENTS.md / CONSTITUTION.md)がチーム全員に効くチームルールだとすると、こちらは自分専用の個人設定。役割分担を意識して使い分けましょう。
まとめ
各機能の実例を見ていくと、Copilotが単なる「データベースを参照できるチャットツール」ではなく、データベースの文脈を深く理解した「頼れる副操縦士」であることがより明確になったのではないでしょうか。
特に、Database Instructions で組織のルールを「コード化」してAIに強制できる点は、属人化を防ぐ強力な武器になります。AGENTS.md=オブジェクトの意味づけ/CONSTITUTION.md=全体ポリシー/copilot-instructions.md=個人の好み、という3階層を意識して整備すると、チームで一気に効果が出そうです。
Claude Code等の他のツールでも、MSSQL用MCPサーバを使用すると、同じようなことも可能ですが、SSMSからシームレスに使用できるのは何よりもメリットを感じるところなので、今後も引き続き使用していきたいと思います!
この記事が、皆さんの現場でのヒントに少しでもなれば幸いです🥷🙏
Discussion