お疲れ様です。すぺきよです。
Webアプリを開発する際はVSCodeを愛用しているのですが、その相棒として使っているのがSFTPというファイルアップロード用のプラグインです。
このプライグインはとても便利で、ファイルを書き換えるとすぐにサーバーにアップロードしてくれたり、VSCode上の操作からフォルダをまとめてアプロードしたりダウンロードしたりできます。
こうなると欲しくなるのが特定のファイルやフォルダをアップロード対象外にすること。
大きなバックアップファイルや、ローカルでしか使わないテスト用のスクリプト、SQLファイルなど、サーバーにアップされると困るファイルがあったりします。
この、特定のファイルやフォルダをアップロードしない設定ができるのですが、意外と情報が少ないので備忘録としてまとめます。
この記事を読むと何がわかるか
特定のファイルやフォルダ以下のファイルをsftpのアップロード対象外にする方法がわかります。
テスト用のスクリプトやsqlファイル、バックアップ用のzipファイルをサーバーにアップロードしないように設定できるようになります。
筆者の記述時の環境
OS
macOS Ventura 13.5.2
VSCode
1.83.1(f1b07bd25dfad64b0167beb15359ae573aecd2cc)
SFTP
v1.16.3
設定方法
それではよく使うパターンで設定内容を説明します。
設定する場所
設定を行う場所は、プロジェクトフォルダの直下の.vscodeフォルダ内の、sftp.jsonファイルです。
このファイルをエディタで直接編集します。
ここには、以下のようにファイルをアップロードする対象のサーバーのアクセス方法などが記載されているはずです。
{
"name": "ローカルサーバー",
"host": "localhost",
"protocol": "sftp",
"port": 22,
"username": "username",
"password": "password",
"remotePath": "/var/www/",
"uploadOnSave": true
}
ここにアップロードをしたくないファイルやフォルダの設定を追記します。
追加する方法は、以下のように「ignore」キーを追加して、値にアップロードしたくないファイルの設定を追加します。
{
"name": "ローカルサーバー",
<中略>
"uploadOnSave": true,
"ignore": ["/.vscode"]
}
それでは次に私がよく使う除外設定パターンを見ていきます。
特定の名前のファイルやフォルダを除外する
特定の名前を持つファイルやフォルダをアップロード対象から除外する方法です。
ignoreのキーの値の配列内にファイル名を直接書き込みます。
"ignore": ["name"]
この設定を行うと、プロジェクト内のどこにその名前のファイルやフォルダが存在したとしてもアップロードされなくなります。
フォルダがアップロード対象外になると、そのフォルダ以下のファイルも全てアップロードされなくなります。
例えば、Macを使っているといつの間にか作られて、フォルダ内を一括アップロードすると勝手にアップロードされてしまう「.DS_store」ファイルを除外設定にするには以下のように記述します。
"ignore": [".DS_Store"]
これでサーバーにいつの間にか.DS_Storeがいる問題に悩まされずに済みます。
特定の名前で始まるファイルやフォルダを除外する
特定の名前で始まるファイルをアップロード対象から除外する方法です。
特定の名称から始まるファイル名やフォルダ名をアップロード対象外とするには、「名前」+「*」で設定します。
"ignore": ["prefix*"]
この設定を行うとプロジェクト内のどこにその名前から始まるファイルやフォルダがあったとしてもアップロードされなくなります。
フォルダがアップロード対象外になると、そのフォルダ以下のファイルも全てアップロードされなくなります。
例えば、エクセルファイルを開いたときに一時的に作成される「~filename.xlsx」をアップロード対象としたくない場合は、以下のように設定します。
"ignore": ["~*"]
特定の拡張子を持つファイルやフォルダを除外する
特定の拡張子を持つファイルやフォルダをアップロード対象から除外する方法です。
特定の拡張子を持つファイルを除外とするには「*」+「.」+「拡張子」で設定します。
"ignore": ["*.extension"]
この設定を行うとプロジェクト内のどこにその拡張子を持つファイルやフォルダがあったとしてもアップロードされなくなります。
フォルダがアップロード対象外になると、そのフォルダ以下のファイルも全てアップロードされなくなります。
例えば、sqlファイルを除去したい場合は以下のように設定します。
"ignore": ["*.sql"]
単一のファイルやフォルダを除外する
ときにはプロジェクトフォルダの特定のファイルやフォルダのみを除外したいことがあります。
その場合は、プロジェクトフォルダをルートとしたファイルパスを直接書くことで特定のファイルを除外することが可能です。
"ignore": ["/folder/filename"]
この設定を行うとパスが一致するファイルやフォルダのみがアップロード対象外となります。
ファイル名やフォルダ名を指定した時は該当する名称がプロジェクトフォルダ内のどこにあっても対象外となります。
しかし、ファイルパスをルートから指定すると、特定のファイルやフォルダのみを対象外にすることができます。
例えば、ローカルでしか必要のないVSCodeの設定ファイルがある.vscodeフォルダや、gitの情報が保存されている.gitフォルダなどですね。
たとえば、ルートにある.vscodeフォルダを除外したい場合は以下のように設定します。
"ignore": ["/.vscode"]
複数の設定を同時に行う
除外設定の対象としたいファイルが複数ある場合があります。
そういう場合は、設定をカンマ区切りで複数設定することができます。
"ignore": ["condition1","condition2","condition3"]
例えば、VScodeの設定ファイルや、”.DS_Store”ファイルなど、上記で例をあげてきた設定を同時にアップロード対象外とするには以下のように記述します。
"ignore": ["/.vscode",".DS_store",".gitignore", "/dev/scripts", "~*", "*.sql"]
“.*”の設定も追加するとよさそうですが、”.htaccess”ファイルや”.env”ファイルなど、サーバーにアップロードが必要なファイルまで除外されてしまうので注意が必要です。
除外したファイルを右クリックでアップロード
最後に、除外したファイルやフォルダを、エクスプローラーペインのファイルを右クリックしてアップロードを行うとどうなるでしょうか。
ファイルを右クリックしてアップロード
アップロード対象から除外したファイル、上記例で言うと”.DS_Store”などのファイルを右クリックしてアップロードを試すと、アップロードされます。
あえてわざわざやることはないと思いますが、不慮の事故でやってしまう可能性もゼロではないので注意しましょう。
フォルダを右クリックしてアップロード
アップロード対象から除外したフォルダ、上記例で言うと”/.vscode”などのフォルダを右クリックしてアップロードを試すと、アップロードされません。
ファイルかフォルダの動作が一致していないのは気になりますが、現状このような動作となっているようです。
まとめ
今回はSFTPのアップロード対象除外設定をまとめてみました。
細かく言うともう少し設定パターンはありますが、これだけの設定ができればおおよそ目的通りの設定ができると思います。