コンセプト
バッチファイルを使用してリモートのサーバーのコマンドを実行用というのが基本コンセプトです。
実行するコマンドを変えればphpunitも実行できます。
docker上のコマンドも実行できます。
ちなみに別にこんな方法をとらずとも構文チェックはできます。
構成
- Visual Studio Code(以下vscode)
- VirtualBox
- コマンドラインで使えるSSHクライアント
今回はGit-Bash - Ubuntu(SSHサーバーがあればほかのOSでもOK)
- PHP
前準備
VirtualBox上のLinuxに開発できる環境を用意します
今回の例ではソースはディレクトリ共有する形で使用します。
パスフレーズが設定されていないSSHのカギを用意します。
バッチファイルの処理の中身
行うことは大きく2つです
- ファイルパスをWindowsのワークスペースのパスからLinux上の実行フォルダーのパスに変換する
- sshコマンドでリモートのコマンドを実行する
設定手順
注意:複数のプロジェクトフォルダーがある場合、今回の設定をすると警告が表示されうまく動きません。ユーザー個別の設定にすれば大丈夫なのですが、その場合は複数のプロジェクトで設定が共有されるので注意してください。
- ファイル設定から「php.validate.executablePath」を探しワークスペースに設定をコピー
- 「.vscode」にバッチファイルを作成。今回は「php.bat」
- 先ほどコピーしたワークスペースの設定の「php.validate.executablePath」に「.vscode/php.bat」を指定
- php.batの中に内容コピーして必要な変更
これで準備完了です。phpファイルを編集すると「php.bat」が動作します。
バッチファイルの中身
@echo off
set REMOTE_HOST=<リモートホストのIP>
set REMOTE_USER=<リモートユーザーID>
set REMOTE_CMD=php
set SSH="c:\Program Files\Git\usr\bin\ssh.exe"
set SSH_OPTION=
set LOCAL_SRC_PATH=%CD%
set REMOTE_SRC_PATH=
set param=%1
set param=%param% %2
set param=%param% %3
set param=%param% %4
set param=%param%=%5
set param=%param% %6
set param=%param% %7
set param=%param%=%8
set param=%param% %9
shift
set file=%9
set file=%file:\=/%
set s=%LOCAL_SRC_PATH%
set strlen=0
:LOOP_HEAD
if defined s (
set s=%s:~1%
set /A strlen+=1
goto :LOOP_HEAD
)
set /A strlen+=1
setlocal enabledelayedexpansion
set file=!file:~%strlen%!
set CMD=!SSH!
set CMD=%CMD% !SSH_OPTION!
set CMD=%CMD% -l !REMOTE_USER!
set CMD=%CMD% !REMOTE_HOST!
set CMD=%CMD% !REMOTE_CMD!
set CMD=%CMD% !param!
set CMD=%CMD% !REMOTE_SRC_PATH!%file%
rem for debug print
rem echo %CMD%>> debug.log
%CMD%
endlocal
Batファイル内の設定について
バッチファイルにはいくつか設定すべき項目があります
- リモートホスト
- リモートユーザー
- SSHの鍵(デフォルトは.ssh/id_rsaを使用)
- ローカル側のソースのルートパス(デフォルトはワークスペースパス)
- リモートが側の実行のルートパス(例えば/var/www/htmlなど)
うまく動作しない場合
最終的に実行されるコマンドをファイルに出力します。バッチフィルの下部にあるremを外して実行してください。実行するとファイルが作成され、バッチファイルが作成しているコマンドが記載されています。
チェックすべきポイント設定変更した内容です。あっているように思われるのであればコマンドプロンプトで実行してみましょう。エラーの内容が表示されると思います。
よくある間違いは次の通りです
- リモートホストのアドレスとリモートホストのユーザーが違う
- パスワードが求められる(鍵が違う)
- パスフレーズを要求される(指定した鍵にパスフレーズが指定してあった)
- リモートのファイルパスが違う
うまく動かないポイントが見つかったらあとはバッチファイルの設定を直したり、バッチファイルそのものを修正してきちんと実行できる形に出力できるまで修正してください
そこまでできれば大丈夫なはずです。