ワークスペースの信頼
Visual Studio Codeはセキュリティを重視しており、ソースや元の作成者が誰であっても、コードを安全に閲覧・編集できるように支援したいと考えています。ワークスペースの信頼機能を使用すると、プロジェクトフォルダー内のコードを、明示的な承認なしにVS Codeや拡張機能が実行してもよいかどうかを決定できます。

安全なコードブラウジング
公開リポジトリやファイル共有で利用できるソースコードが非常に多いのは素晴らしいことです。どのようなコーディングタスクや問題であっても、おそらくどこかに優れた解決策が存在します。また、コードを理解、デバッグ、最適化するのに役立つ強力なコーディングツールが多数利用できるのも素晴らしいことです。しかし、オープンソースのコードやツールを使用することにはリスクがあり、悪意のあるコードの実行やエクスプロイトに対して脆弱になる可能性があります。
ワークスペースの信頼は、不慣れなコードを扱う際に、ワークスペースが「制限モード」で開かれている場合にそのワークスペース内のコードの自動実行を防ぐことで、セキュリティの追加レイヤーを提供します。
ワークスペースの信頼は、VS Codeウィンドウとエージェントウィンドウ間で共有されます。VS Codeでワークスペースが信頼されていない場合、エージェントウィンドウでも信頼されず、どちらの場所でもエージェントは実行されません。どちらの画面からでもワークスペースの信頼を管理でき、信頼状態は両者間で共有されます。
制限モード
ワークスペースの信頼ダイアログでプロンプトが表示された際、いいえ、作成者を信頼しませんを選択すると、コードの実行を防ぐためにVS Codeは制限モードに入ります。
ワークベンチの上部には、ワークスペースの信頼エディターを介してフォルダーを管理するためのリンクを含むバナーが表示されます。ステータスバーには、ワークスペースが制限モードであることを示すバッジも表示されます。

制限モードは、AIエージェント、ターミナル、タスク、デバッグ、ワークスペース設定、拡張機能など、VS Codeのいくつかの機能の動作を無効化または制限することで、コードの自動実行を防ごうとします。
制限モードで無効化される機能の全リストを確認するには、バナーの管理リンク、またはステータスバーの制限モードバッジを選択して、ワークスペースの信頼エディターを開くことができます。ワークスペースの信頼エディターは、既定でエディター領域の上にモーダルオーバーレイとして開きます。

ワークスペースの信頼は、悪意のある拡張機能がコードを実行し、制限モードを無視することを防ぐことはできません。信頼できる著名な発行元からの拡張機能のみをインストールして実行するようにしてください。
AIエージェント
VS CodeでエージェントなどのAIを活用した開発機能を使用する場合、これらのエージェントはコードベースへの変更、ターミナルコマンドの実行、Webリクエストの呼び出しなど、ユーザーに代わってアクションを実行します。エージェントを使用することで、あらゆるファイルがコンテキストに取り込まれる可能性があり、理論上はプロンプトインジェクション攻撃につながる可能性があります。
悪意のあるコンテンツが含まれていないかプロジェクトを確認するまでは、ワークスペースの信頼境界を信頼し、制限モードで開いてください。ワークスペースを制限モードで開くと、そのワークスペース内のエージェントは無効になります。
VS CodeでAIを活用した開発機能を使用する際のAIセキュリティに関する考慮事項について詳しく学びましょう。
ターミナル
シェルは、例えば.envファイルをソースとして読み込んだり、現在のディレクトリを参照するシェル初期化スクリプトを実行したりすることで、ワークスペースの内容に基づいて自動的にコードを実行できます。これを防ぐため、フォルダーが制限モードで開かれている場合、ターミナルを開くことは既定でブロックされます。
制限モード中にターミナルを開こうとすると、VS Codeはフォルダーを信頼するかどうかを確認するプロンプトを表示します。ダイアログをキャンセルすると、VS Codeは制限モードのままになり、ターミナルは開きません。
ワークスペースの内容に基づくコードの自動実行を防ぐようにシェルを設定している場合は、 terminal.integrated.allowInUntrustedWorkspace 設定を有効にすることで、信頼プロンプトなしで制限モードでもターミナルを開くことができます。
タスク
VS Codeのタスクは、スクリプトやツールバイナリを実行できます。タスクの定義はワークスペースの.vscodeフォルダーに定義されるため、リポジトリのコミットされたソースコードの一部となり、そのリポジトリのすべてのユーザーと共有されます。もし誰かが悪意のあるタスクを作成した場合、そのリポジトリをクローンした誰もが気づかないうちにそれを実行してしまう可能性があります。
制限モード中にタスクを実行または列挙しようとすると(タスク > タスクの実行)、VS Codeはフォルダーを信頼し、タスクの実行を継続できることを確認するプロンプトを表示します。ダイアログをキャンセルすると、VS Codeは制限モードのままになります。

デバッグ
VS Codeタスクの実行と同様に、デバッグ拡張機能はデバッグセッションを開始する際にデバッガーバイナリを実行できます。そのため、フォルダーが制限モードで開かれている場合、デバッグも無効になります。
制限モード中にデバッグセッションを開始しようとすると(デバッグ > デバッグの開始)、VS Codeはフォルダーを信頼し、デバッガーの起動を継続できることを確認するプロンプトを表示します。ダイアログをキャンセルすると、VS Codeは制限モードのままになり、デバッグセッションを開始しません。

ワークスペースの設定
ワークスペースの設定はワークスペースのルートにある.vscodeフォルダーに保存されるため、ワークスペースリポジトリをクローンしたすべてのユーザーと共有されます。一部の設定には実行ファイルへのパス(例: リンターのバイナリ)が含まれており、悪意のあるコードを指すように設定されていると損害を引き起こす可能性があります。そのため、VS Codeは制限モードで実行されている間、特定のワークスペース設定を無効にします。

ワークスペースの信頼エディターで、適用されていないワークスペース設定のリンクを選択すると、@tag:requireTrustedWorkspaceタグによってスコープ設定された設定エディターが開きます。

拡張機能
VS Codeの拡張機能エコシステムは非常に豊かで多様です。プログラミングのタスクやエディターのカスタマイズを支援するための拡張機能が作成されています。一部の拡張機能は完全なプログラミング言語サポート(IntelliSense、デバッグ、コード分析)を提供し、他の拡張機能は音楽を再生したり、バーチャルペットを飼ったりすることができます。
ほとんどの拡張機能はユーザーに代わってコードを実行し、潜在的に害を及ぼす可能性があります。一部の拡張機能には、予期しない実行ファイルを実行するように設定された場合に悪意を持って動作する可能性がある設定が含まれています。そのため、ワークスペースの信頼に明示的にオプトインしていない拡張機能は、制限モードでは既定で無効になります。

インストールされている拡張機能のステータスを確認するには、ワークスペースの信頼エディターの拡張機能が無効、または機能が制限されていますリンクを選択します。これにより、@workspaceUnsupportedフィルターでスコープ設定された拡張機能ビューが表示されます。

ワークスペースの信頼にオプトインしていない拡張機能は、制限モードでは無効になるか、制限されるかのいずれかになります。
制限モードで無効
制限モードで実行することをサポートしていると明示的に示していない拡張機能は、制限モードで無効セクションに表示されます。拡張機能の作者は、ワークスペース内の変更(設定やファイル)によって拡張機能が悪用される可能性があると判断した場合、制限モードで有効にしないよう指定することもできます。
制限モードで制限付き
拡張機能の作者は、自身の拡張機能の潜在的なセキュリティ脆弱性を評価し、制限モードでの実行時には制限付きサポートであることを宣言できます。このモードでは、潜在的なエクスプロイトを防ぐために、一部の機能がオフになる場合があります。
拡張機能は、拡張機能ビューのワークスペースの信頼バッジにカスタムテキストを追加し、信頼されていないフォルダーで実行されている際の制限について説明できます。例えば、VS Code組み込みのPHP拡張機能は、 php.validate.executablePath 設定の使用を信頼されたフォルダーに限定しています。この設定を上書きすると、悪意のあるプログラムが実行される可能性があるためです。

拡張機能のワークスペースの信頼サポートレベルは、以下の拡張機能の有効化セクションで説明されている extensions.supportUntrustedWorkspaces 設定を使用して上書きできます。
制限モードで拡張機能をインストールしようとすると、ワークスペースを信頼するか、単に拡張機能をインストールするかを尋ねられます。拡張機能がワークスペースの信頼をサポートしていない場合、インストールはされますが無効になるか、制限付きで実行されます。

拡張機能の作者は、ワークスペースの信頼拡張機能ガイドを読むことで、ワークスペースの信頼をサポートするように拡張機能を更新する方法を学ぶことができます。
ワークスペースの信頼
プロジェクトの作者や管理者を信頼できる場合は、ローカルマシン上のプロジェクトフォルダーを信頼できます。例えば、github.com/microsoftやgithub.com/dockerといった著名なGitHub組織のリポジトリは、通常は信頼しても安全です。
新しいフォルダーを開くと、最初のワークスペースの信頼プロンプトで、そのフォルダーとそのサブフォルダーを信頼できるようになります。

ワークスペースエディターを呼び出し、信頼または親を信頼ボタンを選択して、フォルダーの信頼状態を素早く切り替えることもできます。

ワークスペースの信頼エディターのダイアログを開くには、いくつかの方法があります。
制限モードの場合
- 制限モードバナーの管理リンク
- 制限モードのステータスバーアイテム
また、いつでも以下を使用できます
- コマンドパレットからWorkspaces: Manage Workspace Trustコマンド (⇧⌘P (Windows, Linux Ctrl+Shift+P))
ワークスペースの信頼は、VS Codeウィンドウとエージェントウィンドウ間で共有されます。VS Codeでワークスペースが信頼されていない場合、エージェントウィンドウでも信頼されず、どちらの場所でもエージェントは実行されません。どちらの画面からでもワークスペースの信頼を管理でき、信頼状態は両者間で共有されます。
フォルダーの選択
フォルダーを信頼すると、そのフォルダーはワークスペースの信頼エディターに表示される信頼されたフォルダーとワークスペースリストに追加されます。

このリストから手動でフォルダーを追加、編集、削除して、ワークスペースの信頼を有効または無効にできます。アクティブなフォルダーはこのリスト内で太字で強調表示されます。
親フォルダーを選択する
ワークスペースの信頼エディターでフォルダーを信頼する場合、親フォルダーも信頼するオプションがあります。これは、親フォルダーとそのすべてのサブフォルダーに信頼を適用します。

信頼されたコンテンツを含むフォルダーが多数ある場合に、親フォルダーを信頼することは役立ちます。
信頼された親の下にあるサブフォルダーを開くと、制限モードに戻すための通常の信頼しないボタンは表示されません。代わりに、他のフォルダーのためにフォルダーが信頼されている旨のテキストが表示されます。
信頼されたフォルダーとワークスペースリストから、親フォルダーのエントリを追加、変更、削除できます。
フォルダーの設定
親フォルダーを信頼すると、すべてのサブフォルダーが信頼されるため、ディスク上のリポジトリの場所でワークスペースの信頼を制御できます。
例えば、すべての信頼されたリポジトリを「TrustedRepos」親フォルダーの下に、不慣れなリポジトリを「ForEvaluation」のような別の親フォルダーの下に配置できます。「TrustedRepos」フォルダーを信頼し、「ForEvaluation」の下のフォルダーは個別に信頼します。
├── TrustedRepos - Clone trusted repositories under this parent folder
└── ForEvaluation - Clone experimental or unfamiliar repositories under this parent folder
また、組織固有の親フォルダーの下に整理することで、リポジトリのグループ化と信頼設定を行うこともできます。
├── github/microsoft - Clone a specific organization's repositories under this parent folder
├── github/{myforks} - Place your forked repositories under this parent folder
└── local - Local un-published repositories
拡張機能の有効化
制限モードを使用したいが、お気に入りの拡張機能がワークスペースの信頼をサポートしていない場合はどうすればよいでしょうか?これは、有用で機能的であっても、活発にメンテナンスされておらず、ワークスペースの信頼サポートを宣言していない拡張機能で発生する可能性があります。このシナリオに対処するには、 extensions.supportUntrustedWorkspaces 設定を使用して、拡張機能の信頼状態を上書きできます。
拡張機能のワークスペースの信頼サポートの上書きには注意してください。拡張機能の作者が、制限モードで拡張機能を無効にする正当な理由を持っている可能性があります。疑問がある場合は、拡張機能の作者に問い合わせるか、最近の変更ログを確認して文脈を把握してください。
設定エディター (⌘, (Windows, Linux Ctrl+,)) では、Extensions: Support Untrusted Workspaces設定 ( extensions.supportUntrustedWorkspaces ) を使用して、個々の拡張機能のワークスペースの信頼を上書きできます。

Edit in settings.jsonリンクを選択して、拡張機能IDのリストとそれらのサポート状況およびバージョンを管理します。IntelliSenseの提案から、インストール済みの拡張機能を選択できます。
以下に、Prettier拡張機能のsettings.jsonエントリを示します。
"extensions.supportUntrustedWorkspaces": {
"esbenp.prettier-vscode": {
"supported": true,
"version": "6.4.0"
},
},
supported属性を使用して、ワークスペースの信頼サポートを有効または無効にできます。version属性は適用される正確な拡張機能バージョンを指定し、すべてのバージョンに対して状態を設定したい場合はversionフィールドを削除できます。
拡張機能の作者が制限モードでどの機能を制限するかを評価・判断する方法について詳しく知りたい場合は、ワークスペースの信頼拡張機能ガイドを読むことができます。
信頼できないファイルのオープン
信頼されたフォルダーの外にあるファイルを開こうとすると、VS Codeはそのファイルがフォルダーのルート外から来ていることを検出し、ファイルを開き続けるか、制限モードで新しいウィンドウで開くかのオプションをプロンプトで表示します。制限モードで開くのが最も安全なオプションであり、そのファイルが信頼できると判断したら、いつでも元のVS Codeウィンドウでファイルを再度開くことができます。

信頼されたワークスペース外からファイルを開く際にプロンプトを表示したくない場合は、 security.workspace.trust.untrustedFiles をopenに設定できます。また、 security.workspace.trust.untrustedFiles をnewWindowに設定して、常に新しいウィンドウを制限モードで作成することもできます。信頼されていないファイルのダイアログですべてのワークスペースに対して私の決定を記憶するオプションをチェックすると、選択内容が security.workspace.trust.untrustedFiles ユーザー設定に適用されます。
信頼されていないフォルダーを開く
複数のフォルダーを持つマルチルートワークスペースを操作している際、信頼されたマルチルートワークスペースに新しいフォルダーを追加しようとすると、そのフォルダー内のファイルを信頼するかどうかを尋ねられ、信頼しない場合はワークスペース全体が制限モードに切り替わります。

空のウィンドウ(開いているフォルダーなし)
既定では、フォルダーやワークスペースを開かずに新しいVS Codeウィンドウ(インスタンス)を開くと、VS Codeはそのウィンドウを完全な信頼状態で実行します。インストールされているすべての拡張機能が有効になり、制限なしで空のウィンドウを使用できます。
ファイルを開く際、フォルダーがないため、信頼されていないファイルを開くかどうかを尋ねられます。
ワークスペースの信頼エディターを使用して、空のウィンドウを制限モードに切り替えることができます(コマンドパレットでWorkspaces: Manage Workspace Trustを選択し、信頼しないを選択します)。空のウィンドウは現在のセッション中は制限モードのままですが、再起動または新しいウィンドウを作成すると信頼状態に戻ります。
すべての空のウィンドウを制限モードにしたい場合は、 security.workspace.trust.emptyWindow をfalseに設定できます。
設定
以下は、利用可能なワークスペースの信頼設定です
- security.workspace.trust.enabled - ワークスペースの信頼機能を有効にします。既定値はtrueです。
- security.workspace.trust.startupPrompt - 起動時にワークスペースの信頼ダイアログを表示するかどうか。既定では、個別のフォルダーまたはワークスペースごとに1回のみ表示されます。
- security.workspace.trust.emptyWindow - 空のウィンドウ(開いているフォルダーなし)を常に信頼するかどうか。既定値はtrueです。
- security.workspace.trust.untrustedFiles - ワークスペース内の個別のファイルをどのように処理するかを制御します。既定ではプロンプトが表示されます。
- extensions.supportUntrustedWorkspaces - 拡張機能のワークスペースの信頼宣言を上書きします。trueまたはfalseを指定します。
- security.workspace.trust.banner - 制限モードバナーをいつ表示するかを制御します。既定値は
untilDismissedです。
コマンドラインスイッチ
VS Codeコマンドラインで--disable-workspace-trustを渡すことで、ワークスペースの信頼を無効にできます。このスイッチは現在のセッションのみに影響します。
次のステップ
詳細は以下をご覧ください
- ワークスペースの信頼拡張機能ガイド - 拡張機能の作者がワークスペースの信頼をサポートする方法を学びます。
- VS Code「ワークスペース」とは? - VS Code「ワークスペース」概念の詳細についてはこちらを参照してください。
- GitHub Repositories拡張機能 - ソースコードをローカルマシンにクローンすることなく、直接リポジトリ上で作業できます。
よくある質問
制限モードでもソースコードを編集できますか?
はい、制限モードでもソースコードの閲覧と編集は可能です。一部の言語機能は無効になる場合がありますが、テキスト編集は常にサポートされています。
インストールした拡張機能はどこに行きましたか?
制限モードでは、ワークスペースの信頼をサポートしていない拡張機能はすべて無効になり、アクティビティバーのアイコンやコマンドなどのすべてのUI要素は表示されません。
拡張機能のワークスペースの信頼サポートレベルは、 extensions.supportUntrustedWorkspaces 設定で上書きできますが、慎重に行ってください。拡張機能の有効化に詳細が記載されています。
ワークスペースの信頼機能を無効にすることはできますか?
可能ですが、推奨されません。新しいフォルダーやリポジトリを開くときにVS Codeがワークスペースの信頼をチェックしないようにしたい場合は、 security.workspace.trust.enabled をfalseに設定できます。すると、VS Codeはバージョン1.57以前と同じように動作します。
フォルダーやワークスペースの信頼を解除するにはどうすればよいですか?
ワークスペースの信頼エディター(コマンドパレットからWorkspaces: Manage Workspace Trust)を開き、信頼しないボタンを選択します。また、信頼されたフォルダーとワークスペースリストからフォルダーを削除することもできます。
「信頼しない」ボタンが見当たらないのはなぜですか?
ワークスペースの信頼ダイアログで信頼しないボタンが表示されない場合、フォルダーの信頼レベルは親フォルダーから継承されている可能性があります。信頼されたフォルダーとワークスペースリストを確認し、親フォルダーでワークスペースの信頼が有効になっていないか確認してください。
GitHub Codespaceへの接続や実行中のDockerコンテナーへのアタッチといった一部のワークフローは、これらが既に高い信頼レベルを持っているはずの管理された環境であるため、自動的に信頼されます。
ワークスペースの信頼は何を防ぐのですか?
VS Codeの多くの機能は、リントや保存時のフォーマットなど、あるいはコードのコンパイルやデバッグなどの操作を行う際に、サードパーティのツールや拡張機能が自動的に実行されることを許可します。倫理に反する人物が、一見無害に見えるプロジェクトを作成し、知識なしに悪意のあるコードを実行してローカルマシンに損害を与える可能性があります。ワークスペースの信頼は、不慣れなソースコードの安全性と整合性を評価している間にコードの実行を防ごうとすることで、セキュリティの追加レイヤーを提供します。