開発者コマンドプロンプトと PowerShell を統合して便利に使う方法

Visual Studio には「開発者コマンドプロンプト(Developer Command Prompt for VS)」が用意されています。
これは、C++ コンパイラ(cl.exe)や MSBuild、ILDasm、CorFlags などの開発ツールをコマンドラインから使えるようにする特別な環境です。

ただし難点があります。

  • 毎回スタートメニューから「開発者コマンドプロンプト」を開くのが面倒

  • PowerShell を普段使いしていると、わざわざ別ウィンドウを立ち上げなければならない

そこで今回は 開発者コマンドプロンプトの環境設定を PowerShell に取り込む方法を紹介します。


1. 開発者コマンドプロンプトの正体

実は「開発者コマンドプロンプト」の正体は、Visual Studio がインストールされているフォルダにある VsDevCmd.bat というバッチファイルです。

例(Visual Studio 2022 の場合):

 
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat

これを実行すると、PATHINCLUDELIB などの環境変数が自動的に設定され、コマンドラインから開発ツールが利用できるようになります。


2. PowerShell から VsDevCmd.bat を呼び出す

PowerShell から直接このバッチファイルを呼び出すことも可能です。

方法 1:毎回手動で呼び出す

 
cmd /k '"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"'

ただし、これは新しい cmd.exe を開いてしまうため、PowerShell の中では使えません。


3. 環境変数PowerShell に取り込む

本当に便利に使うには、バッチファイルで設定される環境変数PowerShell に引き継ぐ必要があります。

以下のスクリプトPowerShell プロファイル($PROFILE)に追記すると便利です。

 
function Enter-VSDevShell {
  $vsDevCmd = "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
  cmd /c ""$vsDevCmd" && set" | ForEach-Object {
    if ($_ -match "^(.*?)=(.*)$") {
      [System.Environment]::SetEnvironmentVariable($matches[1], $matches[2])
    }
  }
  Write-Host "Visual Studio 開発者コマンド環境を PowerShell に読み込みました。" -ForegroundColor Green
}

これで、PowerShell 上で次のように入力すれば:

 
Enter-VSDevShell

cl.exemsbuildildasm などがそのまま PowerShell から使えるようになります。


4. 使い勝手をさらに良くする

  • Visual Studio のバージョンごとに関数を作る

    • Enter-VS2022

    • Enter-VS2019

  • 自動実行する

    • プロファイルに Enter-VSDevShell を書いておけば、PowerShell 起動時に自動的に開発者環境がロードされる


まとめ