レンタルサーバーで特定のディレクトリをローカルと同期する。FTPクライアントソフトウェアはWinSCPを使用しているが、デスクトップアプリケーションで毎回操作するのも面倒だし、コマンドを打つのもの面倒なので、バッチファイルを作成し、クリック一回でローカルのディレクトリをリモートに更新できるようにしている。
普段、バッチファイルを作ることがないため少々手こずったが、下記が特定のディレクトリ以下のファイルを同期するためのバッチファイル。
@echo off
powershell -NoExit -Command ^
"& 'C:\Program Files (x86)\WinSCP\WinSCP.com' /command" ^
'open アカウント名:パスワード@IPアドレス' ^
'option batch on' ^
'option confirm off' ^
'synchronize remote 同期するローカルのパス 同期するサーバのパス -delete -filemask="|.git/"'
コードの内容
これは慣習的に記述するもの。実行したコマンドなどがエコーされないようにする。そうすることで、実行時の表示結果がわかりやすくなる。
@echo off
PowerShellを起動し、コマンドを実行。”-NoExit” は実行後にウィンドウを閉じないようにする。”-Command” は引数のコマンドを実行する。 “^” は複数行のコマンドを渡すためのエスケープ記号。
powershell -NoExit -Command ^
“&”は、以降のパスやコマンドを文字列として実行する。WindowsだとWinSCPをインストールしたら、カスタムしない限り下記のパスにインストールされる。その中の “WinSCP.com” がコマンドライン(CLI)で実行してくれるファイル。”/command” 以下にWinSCPに引き渡すコマンドを記述する。
"& 'C:\Program Files (x86)\WinSCP\WinSCP.com' /command" ^
“open” でFTPサーバにログインする。アカウント名、パスワード、サーバのIPアドレスを記述するだけ。
'open アカウント名:パスワード@IPアドレス' ^
“option batch on” はエラーが発生したとしても、それを無視して実行する。たまにどうでもいいことで止まったりするので、無視するようにしている。”option confirm off” は、ファイルの上書きなどで確認が行われるのでそれを無視して実行するようにする。
'option batch on' ^
'option confirm off' ^
“synchronize remote” でローカルのディレクトリ又はファイルをリモート(サーバー)へ同期する。引数はローカルのパスと同期先であるサーバーのパス。”-delete” は、リモートにしかないファイルがあった場合は、削除する(要注意)。”-filemask” は、特定のディレクトリやファイルのみを同期又は除外するためのフィルター。”|パス/” でそのパスを除外して同期する。
'synchronize remote 同期するローカルのパス 同期するサーバのパス -delete -filemask="|パス/"'
このコードを”sync.bat” というファイルとしてデスクトップに置いて、ローカルで開発した後、ファイルをクリックして実行するだけで、ローカル開発環境の内容がサーバーに反映される。

記事を読んでいただきありがとうございました。