セキュリティの厳しいネットワークや、OSを汚したくないクリーンなWindows環境(Windows 11 Proなど)で開発を行いたいことはありませんか?
Visual Studio Code(VS Code)は、特定のフォルダ構成とバッチファイルを組み合わせることで、拡張機能や各種プログラミング言語のコンパイラを含めた「完全なポータブル環境」を構築できます。USBメモリに入れて持ち運ぶことも可能です。
この記事では、Python、Node.js、C#、F#、Rust、PowerShell、さらにはデータベース接続やPolyglot Notebooksまで詰め込んだ、オールインワンのVS Codeポータブル環境の作り方を徹底解説します。
まずは作業用のベースディレクトリ(例: C:\VSCodePortable)を作成し、以下のような空フォルダを用意します。
VSCodePortable\
├─ home\ (Git設定やSSH鍵などを保存する仮想ホーム)
├─ tools\ (各言語・ツールのバイナリを格納)
│ ├─ git\
│ ├─ python\
│ ├─ nodejs\
│ ├─ dotnet\
│ ├─ pwsh\
│ └─ rust\
├─ vscode\ (VS Code本体)
└─ example\ (テスト用コードを格納)
各ツールのインストーラー版(.exe)ではなく、ZIP版(バイナリ版)をダウンロードして配置していきます。
.zip (x64) をダウンロードし、vscode フォルダに展開。超重要: Code.exe と同じ階層に data という名前の空フォルダを作成します(これで設定や拡張機能がポータブル化されます)。tools\git に展開。Windows embeddable package (64-bit) を tools\python に展開。python3xx._pth 内の import site のコメントアウトを外し、get-pip.py を使ってpipを有効化しておきます。Windows Binary (.zip) を tools\nodejs に展開。tools\dotnet に上書き統合。.zip 版を tools\pwsh に展開。rustup-init.exe を実行し、tools\rust 内にインストールします。start.batホストPCの環境変数を汚さず、ポータブルフォルダ内のツール群にだけパスを通すバッチファイルを作成します。
VSCodePortable 直下に start.bat を作成し、以下のコードを貼り付けます。
@echo off
setlocal
rem カレントディレクトリをベースパスとして取得
set "BASE_DIR=%~dp0"
rem ポータブル環境用の HOME ディレクトリを設定
set "HOME=%BASE_DIR%home"
if not exist "%HOME%" mkdir "%HOME%"
rem 各ツールの環境変数を設定
set "DOTNET_ROOT=%BASE_DIR%tools\dotnet"
set "RUSTUP_HOME=%BASE_DIR%tools\rust\rustup"
set "CARGO_HOME=%BASE_DIR%tools\rust\cargo"
rem パスを通す
set "PATH=%BASE_DIR%tools\git\cmd;%BASE_DIR%tools\python;%BASE_DIR%tools\python\Scripts;%BASE_DIR%tools\nodejs;%DOTNET_ROOT%;%BASE_DIR%tools\pwsh;%CARGO_HOME%\bin;%PATH%"
rem VS Codeを起動
start "" "%BASE_DIR%vscode\Code.exe"
endlocal
以降、VS Codeを起動する際は必ずこの start.bat をダブルクリックします。
start.bat から起動したVS Codeのターミナル(Ctrl + `)を開き、必要なパッケージをインストールします。
CLIツールのインストール:
# Jupyter環境
python -m pip install jupyter
# OpenAPI仕様書生成用 (redocly)
npm install -g @redocly/cli
VS Code拡張機能のインストール:
拡張機能メニューから以下をインストールします(すべて data フォルダ内に保存されます)。
Python (ms-python.python)Jupyter (ms-toolsai.jupyter)Polyglot Notebook (ms-dotnettools.dotnet-interactive-vscode)C# (ms-dotnettools.csharp)Ionide for F# (Ionide.Ionide-fsharp)Rust Analyzer (rust-lang.rust-analyzer)PowerShell (ms-vscode.PowerShell)SQL Server (mssql) & SQLTools (DB接続用)環境が正しく構築できたか、各言語でテストしてみましょう。example フォルダ内にファイルを作成して実行します。
hello.py)import sys
print(f"Hello Portable Python! Version: {sys.version}")
実行: python hello.py
ターミナルから以下のコマンドでプロジェクトを作成し、ビルド・実行します。
dotnet new console && dotnet rundotnet new console -lang "F#" && dotnet runcargo new hello_rust && cd hello_rust && cargo runopenapi.yaml)Redoclyを使ってYAMLからHTMLドキュメントを生成します。
実行: redocly build-docs openapi.yaml -o index.html
C#のプロジェクトを作成し、NuGetパッケージ(Microsoft.Data.SqlClient, Net.IBM.Data.Db2)を追加することで、完全マネージドな状態で各DBへSQLを投げて結果を受け取ることが可能です。
Polyglot Notebooks (.dibファイル) を開いた際、右下に以下のようなエラーが出て失敗することがあります。
Polyglot Notebooks failed to activate: Cannot read properties of undefined (reading 'workingDirectory')
これは、拡張機能が初期化時に作成しようとするツールマニフェストの上書きに失敗してクラッシュする既知のバグ(Issue #4154)です。以下の手順でソースコードを1箇所修正します。
vscode\data\extensions\ms-dotnettools.dotnet-interactive-vscode-[バージョン]\out\src\vscode-common\ を開く。commands.js をテキストエディタで開く。['new', 'tool-manifest'] と記載されている配列を探し、--force 引数を追加して ['new', 'tool-manifest', '--force'] に書き換えて保存する。これでマニフェストの上書きエラーを強制突破でき、快適に Polyglot Notebooks が動作するようになります!
ここまでの手順を踏むことで、ホストPCの環境を一切汚さずに、最先端の開発体験を持ち運べる最強のポータブルVS Codeが完成しました。セキュリティ要件が厳しい現場や、複数台のPCを行き来する環境でぜひ活用してみてください!