Windows上のVSCodeからUbuntuサーバーへSSH接続し、Rustアプリケーションの開発とデバッグを行う方法

前提とアーキテクチャ方針

Windowsマシン上に導入したVisual Studio Code(VSCode)から、Linux系OS(Ubuntu等)を搭載したリモートホストへSSH経由で接続し、ネイティブな開発体験を得る手法を解説します。本アプローチでは、ローカル側のUI操作とリモート側のコンパイル・実行環境を分離することで、ネットワーク遅延を最小限に抑えつつ、専用ビルドサーバーやクラウドインスタンス上での作業が可能になります。

1. VSCode拡張機能の導入

ローカルのIDEに対して、以下の拡張機能を適用します。

  • ms-vscode-remote.remote-ssh: リモートホストとのトンネリングとファイルシステム同期を制御
  • rust-lang.rust-analyzer: コンパイラ支援型のインテリセンス、リファクタリング、型推論を提供
  • vadimcn.vscode-lldb: LLDBベースのプロセッサレベルデバッグインターフェース

コマンドパレット(Ctrl+Shift+P)から Extensions: Install Extensions を選択し、上記のスラッグまたは名称で検索してインストールしてください。

2. SSH認証情報の構築

パスワード認証よりも堅牢な公開鍵暗号方式を用いるため、Windows側でキーペアを生成します。PowerShellまたはGit Bashにて以下を実行します。

ssh-keygen -t ed25519 -C "rust-dev-workspace"

生成された秘密鍵は .ssh ディレクトリ配下に配置されます。公鍵をターゲットのUbuntuノードへ転送するには、以下のコマンドを使用します。ubuntu_user203.0.113.42 は各自の環境に合わせて変更してください。

scp ~/.ssh/id_ed25519.pub ubuntu_user@203.0.113.42:/tmp/pubkey.tmp

ターゲットサーバー側でログイン後、一時ファイルを認証リストへ追加し、権限を適切に設定します。

mkdir -p ~/.ssh && cat /tmp/pubkey.tmp >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm /tmp/pubkey.tmp

3. VSCodeでのリモート接続定義

VSCodeのステータスバー左端にある青いアイコンをクリックするか、コマンドパレットから Remote-SSH: Add New SSH Host... を選択します。接続文字列として ubuntu_user@203.0.113.42 を入力し、構成ファイル保存先を推奨値(通常は %USERPROFILE%\.ssh\config)に指定します。

次回以降、同じくコマンドパレットから Remote-SSH: Connect to Host を実行すると、設定したエントリがリストアップされます。接続が完了すると、画面下部に緑色の SSH: ubuntu_user@203.0.113.42 ステータスが現れ、現在のセッションがリモートプロセス群を参照していることが確認できます。

4. サーバーサイドの言語ランタイム構築

SSHセッション確立後、VSCode内の統合ターミナル(Ctrl + ``)にて、Ubuntu環境用のRustビルドツールを初期化します。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

インストールスクリプト実行後は、シェルセッションが新しいパスを読み込むまで以下のコマンドを実行してください。

source "$HOME/.cargo/env"
rustc --version
cargo --version

バージョン番号が正しく表示されれば、コンパイラとパッケージマネージャーの準備は完了です。

5. プロジェクトの作成とファイル構造の同期

任意のワークスペースディレクトリを作成し、Cargoによって新規クレートを初期化します。

cd ~/projects
cargo init linux-rust-service --name backend_core

VSCodeのメニュー File > Open Folder より、上記で作成した ~/projects/linux-rust-service ディレクトリを選択します。これにより、ローカルのエディタUIがリモートのファイルシステム階層とリアルタイムで同期されます。

6. デバッガ設定とビルドパイプライン

Rustコードの実行時例外や変数状態を確認するため、LLDBエンジンを活用したデバッグ設定を行います。VSCode上で F5 キーを押下すると、自動補完ウィザードが表示されるため、lldb を選択します。

プロジェクトルート直下に .vscode/launch.json が生成されるため、必要に応じて以下のようにパラメータを調整します。ここでは、実行前に依存解決と最適化なしビルドを実行するようタスク連鎖を定義しています。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "lldb",
      "request": "launch",
      "name": "Debug Linux Backend",
      "program": "${workspaceFolder}/target/debug/backend_core",
      "args": [],
      "cwd": "${workspaceFolder}",
      "preLaunchTask": "cargo build (debug)",
      "externalConsole": false,
      "justMyCode": true
    }
  ]
}

preLaunchTask キーに対応するタスクは、初回起動時に .vscode/tasks.json の作成を促すため、指示に従って cargo build (debug) テンプレートを選択すれば自動的にマージされます。

7. デバッグ実行とデプロイ特性

設定完了後、ソースコード内の適当な行にブレークポイントを設け、F5 キーでセッションを開始します。LLDBエージェントがリモートプロセスにアタッチされ、ステップオーバーやウィンドウ内の変数モニタリングが可能になります。

なお、本構成における特筆すべき点は、コンパイル結果や最終バイナリがすべてUbuntu側で生成・維持されることです。ローカルマシンには編集時の差分のみがキャッシュされ、リリース時は cargo build --release またはCI/CDパイプライン経由で直接デプロイ可能です。これにより、クロスコンパイルの手間や環境差異による不整合を根本的に排除することができます。

タグ: Visual Studio Code Remote-SSH rust LLDB Ubuntu

7月6日 23:13 投稿