SSH経由でのリモート開発
このチュートリアルでは、Visual Studio CodeのRemote - SSH拡張機能を使用して、Azure上に仮想マシン (VM) を作成し、それに接続する方法を説明します。ソースコードがローカルにある場合と同じように、VS Codeでリモートマシン上で編集およびデバッグできることを示すために、Node.js Express Webアプリを作成します。
注意: 選択したLinuxディストリビューションがこれらの前提条件を満たしている限り、Linux VMはローカルホスト、オンプレミス、Azure、またはその他のクラウドなど、どこにでもホストできます。
前提条件
開始するには、以下の手順を実行する必要があります。
- OpenSSH互換のSSHクライアントをインストールします (PuTTYはサポートされていません)。
- Visual Studio Codeをインストールします。
- Azureサブスクリプションを持っていること (Azureサブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください)。
拡張機能をインストールする
Remote - SSH拡張機能は、SSHホストに接続するために使用されます。
Remote - SSH
Remote - SSH拡張機能をインストールすると、左端に新しいステータスバー項目が表示されます。
リモートステータスバー項目は、VS Codeがどのコンテキスト (ローカルまたはリモート) で実行されているかを素早く表示し、その項目をクリックするとRemote - SSHコマンドが表示されます。
仮想マシンを作成する
既存のLinux仮想マシンがない場合は、Azureポータルから新しいVMを作成できます。Azureポータルで「Virtual Machines」を検索し、追加を選択します。そこから、Azureサブスクリプションを選択し、まだお持ちでない場合は新しいリソースグループを作成できます。
注意: このチュートリアルではAzureを使用していますが、Linuxディストリビューションがこれらの前提条件を満たしている限り、Linux VMはどこにでもホストできます。
これで、VMの名前、サイズ、ベースイメージなどの詳細を指定できます。この例ではUbuntu Server 18.04 LTSを選択しますが、他のLinuxディストリビューションの最新バージョンを選択したり、VS CodeのサポートされているSSHサーバーを確認したりすることもできます。
SSHを設定する
VMへの認証方法には、SSH公開/秘密鍵ペアやユーザー名とパスワードなど、いくつかあります。キーベースの認証を使用することをお勧めします (ユーザー名/パスワードを使用する場合、拡張機能から資格情報の入力を複数回求められます)。Windowsを使用しており、PuttyGenを使用して既にキーを作成している場合は、それらを再利用できます。
SSHキーを作成する
SSHキーペアをお持ちでない場合は、bashシェルまたはコマンドラインを開き、次のように入力します。
ssh-keygen -t ed25519
これによりSSHキーが生成されます。以下のプロンプトでEnterを押して、キーをデフォルトの場所 (ユーザーディレクトリの下にある.ssh
という名前のフォルダー) に保存します。
その後、安全なパスフレーズの入力を求められますが、空白のままで構いません。これで、新しい公開SSHキーを含むid_ed25519.pub
ファイルがあるはずです。
注意: Ed25519アルゴリズムをサポートしないレガシーシステムを使用している場合は、代わりにrsaを使用できます:
ssh-keygen -t rsa -b 4096
。
VMにSSHキーを追加する
前のステップで、SSHキーペアを生成しました。生成したばかりの公開キーを使用できるように、SSH公開キーのソースドロップダウンで既存の公開キーを使用するを選択します。公開キーを取得し、id_ed25519.pub
のすべての内容をSSH公開キーにコピーして、VM設定に貼り付けます。また、選択したポートを許可するを選択し、受信ポートの選択ドロップダウンリストからSSH (22)を選択して、VMが受信SSHトラフィックを受け入れるようにします。
自動シャットダウン
Azure VMを使用する優れた機能の1つは、自動シャットダウンを有効にする機能です (正直なところ、私たちは皆VMの電源を切り忘れてしまいます…)。管理タブに移動すると、VMを毎日シャットダウンしたい時刻を設定できます。
確認と作成を選択し、次に作成を選択すると、AzureがVMをデプロイします。
デプロイが完了したら (数分かかる場合があります)、仮想マシンの新しいリソースビューに移動します。
SSHを使用して接続する
SSHホストを作成したので、それに接続しましょう!
ステータスバーの左下隅にインジケーターがあることに気づいたでしょう。このインジケーターは、VS Codeがどのコンテキスト (ローカルまたはリモート) で実行されているかを示します。インジケーターをクリックすると、リモート拡張機能コマンドのリストが表示されます。
Remote-SSHセクションでホストに接続...コマンドを選択し、VMの接続情報をuser@hostname
の形式で入力してホストに接続します。
user
は、SSH公開キーをVMに追加したときに設定したユーザー名です。hostname
については、Azureポータルに戻り、作成したVMの概要ペインでパブリックIPアドレスをコピーします。
Remote - SSHで接続する前に、コマンドプロンプトでssh user@hostname
を使用してVMに接続できることを確認できます。
注:
ssh: connect to host <host ip> port 22: Connection timed out
というエラーが発生した場合は、VMの「ネットワーク」タブから「NRMS-Rule-106」を削除する必要がある場合があります。
接続情報テキストボックスにユーザーとホスト名を設定します。
VS Codeは新しいウィンドウ (インスタンス) を開きます。その後、「VS Code Server」がSSHホスト上で初期化されているという通知が表示されます。VS Code Serverがリモートホストにインストールされると、拡張機能を実行し、VS Codeのローカルインスタンスと通信できます。
ステータスバーのインジケーターを見ると、VMに接続されていることがわかります。そこにはVMのホスト名が表示されます。
Remote - SSH拡張機能は、アクティビティバーにも新しいアイコンを追加し、それをクリックするとリモートエクスプローラーが開きます。ドロップダウンからSSHターゲットを選択すると、SSH接続を構成できます。たとえば、頻繁に接続するホストを保存し、ユーザー名とホスト名を入力する代わりにここからアクセスできます。
SSHホストに接続すると、リモートマシンのファイルとフォルダーを操作できます。統合ターミナル (⌃` (Windows, Linux Ctrl+`)) を開くと、Windows上にいながらbashシェル内で作業していることがわかります。
bashシェルを使用して、VM上のファイルシステムを閲覧できます。また、ファイル > フォルダーを開くでリモートのホームディレクトリ上のフォルダーを閲覧したり開いたりすることもできます。
Node.jsアプリケーションを作成する
このステップでは、シンプルなNode.jsアプリケーションを作成します。アプリケーションジェネレーターを使用して、ターミナルからアプリケーションを素早くスキャフォールドします。
Node.jsとnpmをインストールする
統合ターミナル (⌃` (Windows, Linux Ctrl+`)) から、Linux VMのパッケージを更新し、次にNode.jsパッケージマネージャーであるnpmを含むNode.jsをインストールします。
sudo apt-get update
curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
インストールは、以下のコマンドを実行して検証できます。
node --version
npm --version
Expressジェネレーターをインストールする
Expressは、Node.jsアプリケーションの構築と実行に人気のフレームワークです。Express Generatorツールを使用して、新しいExpressアプリケーションをスキャフォールド (作成) できます。Express Generatorはnpmモジュールとして提供され、npmコマンドラインツールnpm
を使用してインストールされます。
sudo npm install -g express-generator
-g
スイッチは、Express Generatorをマシンにグローバルにインストールするため、どこからでも実行できます。
新しいアプリケーションを作成する
これで、myExpressApp
という新しいExpressアプリケーションを以下のコマンドを実行して作成できます。
express myExpressApp --view pug
--view pug
パラメーターは、ジェネレーターにpugテンプレートエンジンを使用するように指示します。
アプリケーションのすべての依存関係をインストールするには、新しいフォルダーに移動し、npm install
を実行します。
cd myExpressApp
npm install
アプリケーションの実行
最後に、アプリケーションが実行されることを確認しましょう。ターミナルから、npm start
コマンドを使用してアプリケーションを起動し、サーバーを起動します。
npm start
Expressアプリはデフォルトでhttps://:3000で実行されます。Webアプリは仮想マシン上で実行されているため、ローカルブラウザのlocalhost:3000では何も表示されません。
ポート転送
ローカルマシンからWebアプリを閲覧できるようにするには、ポート転送と呼ばれる別の機能を活用できます。
公開されていない可能性のあるリモートマシンのポートにアクセスできるようにするには、ローカルマシンのポートとサーバーの間で接続またはトンネルを確立する必要があります。アプリがまだ実行されている状態で、SSH Explorerを開き、転送されたポートビューを見つけます。ポートを転送リンクをクリックし、ポート3000を転送したいことを指定します。
接続名を「browser」にする
これでサーバーはポート3000のトラフィックをローカルマシンに転送します。https://:3000にアクセスすると、実行中のWebアプリが表示されます。
編集とデバッグ
Visual Studio Codeのファイルエクスプローラー (⇧⌘E (Windows, Linux Ctrl+Shift+E)) から、新しく作成したmyExpressApp
フォルダーに移動し、app.js
ファイルをダブルクリックしてエディターで開きます。
IntelliSense
ソースコードがローカルマシンにある場合と同じように、JavaScriptファイルのシンタックスハイライト表示と、ホバー付きのIntelliSenseが利用できます。
入力を開始すると、オブジェクトのメソッドやプロパティのスマートな補完機能が表示されます。
デバッグ
app.js
の10行目にブレークポイントを設定するには、行番号の左側の余白をクリックするか、その行にカーソルを置いてF9を押します。ブレークポイントは赤い丸で表示されます。
次に、F5を押してアプリケーションを実行します。アプリケーションの実行方法を尋ねられたら、Node.jsを選択します。
アプリが起動し、ブレークポイントにヒットします。変数を確認したり、ウォッチを作成したり、コールスタックを移動したりできます。
F10を押してステップ実行するか、もう一度F5を押してデバッグセッションを終了します。
SSH経由で接続されたVisual Studio Codeの完全な開発エクスペリエンスが得られます。
SSH接続を終了する
ファイル > リモート接続を閉じるで、SSH経由のセッションを終了し、VS Codeをローカルで実行する状態に戻ることができます。
おめでとうございます
おめでとうございます。このチュートリアルを正常に完了しました!
次に、他のRemote Development拡張機能をチェックしてください。
または、Remote Development拡張機能パックをインストールして、すべてを入手してください。