1.コードを書きながらサーバにアップロード
AIが発達してから、WEB系のシステムを組むのが本当に楽になりました。私も毎日のようにVS Codeでプログラムを書いているのですが、一つだけどうしても面倒な作業が残っていました。それが、書いたコードをサーバーに上げるFTP転送の作業です。
開発はXAMPPのローカル環境で進めるのですが、最終的な動作確認はやはり本番に近いXserver上で行いたい。そのたびにXAMPPのhtdocsからWinSCPに切り替えて、修正したファイルを目視で探してドラッグ&ドロップして…という流れを繰り返していました。一時期はGitHub Actionsを使って「git pushしたら自動でFTP転送される」仕組みも組んでいたのですが、これはこれで「まだサーバーに上げたくないタイミングでも勝手に上がってしまう」という別の悩みが出てきます。本番反映前にちょっとだけ試したい時には、むしろ邪魔になることが分かりました。
もっと手元でコントロールしたい、けれどWinSCPに切り替える手間は無くしたい。そんなわがままを叶えてくれる方法をようやく見つけたので、今回はそのご紹介です。VS Codeの中から、右クリック一発でXserverに転送できる仕組みを構築します。
- VS Codeに「Natizyskunk SFTP」という拡張機能をインストールする。
- 転送先のFTPサーバー情報を
sftp.jsonという設定ファイルに書き込む。 - 転送したいファイルやフォルダを右クリックして、メニューからアップロードを実行する。
手順1.SFTP拡張機能をインストールする
まずはVS Code(またはCursor)の左サイドバーから拡張機能アイコン(四角が4つのマーク)を開き、検索窓に SFTP と入力します。たくさん候補が出てきますが、その中から作者名が Natizyskunk のものを選んでインストールしてください。同名の拡張機能がいくつもあるので、必ず作者名を確認するのがポイントです。
「SFTP」という名前ですが、設定で protocol を切り替えれば普通のFTPでも使えます。私もこれをFTPモードでXserverに接続しています。SFTPに対応していないレンタルサーバーでも問題なく使えるのでご安心ください。
手順2.設定ファイル(sftp.json)を作成する
インストールが終わったら、転送先サーバーの情報を書く設定ファイル sftp.json を作成します。作成方法は2つあります。
方法A:コマンドパレットから自動生成する
1. プロジェクトのルートフォルダをVS Codeで開く
2. Ctrl + Shift + P でコマンドパレットを開く
3. 「SFTP: Config」と入力してEnter
4. .vscode/sftp.json が自動で作成され、エディタに開かれる
方法B:手動で作成する
もし方法Aで自動生成されない場合は、プロジェクトのルートフォルダ直下に .vscode という名前のフォルダを作り、その中に sftp.json という名前のファイルを手で作成してください。
手順3.sftp.jsonの中身を書く
作成された sftp.json に、Xserver(または使っているサーバー)の接続情報を書き込みます。私が実際にXserverで使っている設定が以下です。そのまま参考にしてください。
{
"name": "なんでもいいので識別名(例:my-xserver)",
"host": "sv****.xserver.jp",
"protocol": "ftp",
"port": 21,
"username": "FTPユーザー名",
"password": "FTPパスワード",
"remotePath": "/********.com",
"uploadOnSave": false,
"useTempFile": false,
"openSsh": false,
"passive": true,
"ignore": [
"**/datas",
"**/manual",
"**/docs",
"**/image",
"**/tools",
"**/stripe-php-master",
"**/db",
".cloudecodeignore",
".git-ftp-ignore",
".CLAUDE.md"
]
}
各項目の意味は、本記事の備考2にすべて表でまとめています。最初に書き換える必要があるのは host(Xserverのサーバー番号)、username、password、remotePath(転送先のディレクトリ)の4つです。ignore のリストは、転送したくないフォルダ・ファイルを書いておきます。動画フォルダや管理用ドキュメントなど、サーバーに上げる必要のないものをここで除外しておくのがおすすめです。
【最重要】.vscodeフォルダの置き場所に注意する
ここが今回の記事で一番つまずきやすいポイントです。私もここで何度も「設定したのに動かない!」とハマりました。
.vscode フォルダは、VS Codeで「ワークスペースとして開いているフォルダ」の直下に置かなければなりません。これがズレていると、拡張機能は sftp.json をまったく認識してくれません。
例えば、私のように C:\xampp\htdocs\qumcum.com というフォルダで作業している場合は、こうなります。
【正しい配置】
C:\xampp\htdocs\qumcum.com\ ← ここをVS Codeで開いている
├── .vscode\
│ └── sftp.json ← ここに置く
├── index.php
├── css\
└── js\
逆に、よくある失敗パターンが以下です。
【間違った配置1】 親フォルダを開いてしまっているケース
C:\xampp\htdocs\ ← VS Codeで開いているのはこっち
└── *******.com\
├── .vscode\
│ └── sftp.json ← これだと認識されない
└── index.php
【間違った配置2】 .vscodeを深い場所に作ってしまうケース
C:\xampp\htdocs\******.com\ ← ここをVS Codeで開いている
├── system\
│ └── .vscode\
│ └── sftp.json ← これも認識されない
└── index.php
VS Codeでフォルダを開いた時、画面左上のエクスプローラーに表示される「一番上のフォルダ名」が、ワークスペースのルートです。.vscode フォルダは必ずその直下に作るようにしてください。これさえ間違えなければ、ほぼ確実に動きます。
もう一つ補足すると、VS Codeで「フォルダを開く」のではなく「ファイルを単体で開いている」状態だと、そもそもワークスペースが存在しないので拡張機能は動きません。必ず「フォルダを開く(Open Folder)」でプロジェクトのルートを開いた状態で使ってください。
手順5.右クリックでアップロードする
ここまで設定できれば、あとは本当に簡単です。VS Codeの左サイドバーのエクスプローラーで、転送したいファイルやフォルダを右クリックします。表示されるポップアップメニューの下のほうに、SFTP拡張機能が追加した項目が並んでいます。
| メニュー名 | 機能 |
|---|---|
| Upload | 選択したファイル/フォルダをサーバーにアップロード |
| Download | サーバーから選択したファイル/フォルダをダウンロード |
| Sync Local → Remote | ローカルの状態をサーバーに反映(差分同期) |
| Sync Remote → Local | サーバーの状態をローカルに反映(差分同期) |
| Diff with Remote | ローカルとサーバーのファイルを比較して差分を表示 |
普段使うのは「Upload」だけで十分です。ファイル単位でも、フォルダごと丸ごとでも、右クリック一発で転送が走ります。VS Code下部のステータスバーに転送状況が表示されるので、進捗もすぐに分かります。WinSCPを立ち上げる必要も、ファイルをドラッグ&ドロップする必要もありません。本当に楽になりました。
2.便利な工夫
1.保存と同時に自動アップロードしたい時は uploadOnSave を true に
修正のたびに右クリックするのも面倒だ、という方は sftp.json の uploadOnSave を true に変えてください。これで Ctrl+S でファイルを保存するたびに、自動でサーバーに転送されるようになります。
ただしこれは諸刃の剣で、「実験的に試している途中のコード」までうっかり本番に上がってしまうリスクがあります。本番運用中のサイトでは、私はあえて false のままにして、必ず右クリックで明示的にアップロードする運用にしています。開発初期のステージング環境などでは true にすると非常に快適です。
2.アップロード除外リスト(ignore)を最初にしっかり書いておく
地味に大事なのが、ignore のリストをきちんと整備しておくことです。動画ファイル、データベースのバックアップ、開発用のドキュメント、ログファイルなど、サーバーに上げる必要のないものをここで除外しておきます。書き方はGitの .gitignore と同じで、ワイルドカード(*)も使えます。
"ignore": [
"**/.git",
"**/.vscode",
"**/node_modules",
"**/datas",
"**/docs",
"*.log",
"*.zip",
"*.mp4",
"config.local.php"
]
特に .vscode 自体や .git フォルダは必ず除外しておきましょう。これらをサーバーに上げてしまうと、最悪の場合パスワードを書いた sftp.json がそのまま公開されてしまう危険があります。
3.複数のサーバーを切り替えて使う
sftp.json は、配列形式で書くことで複数のサーバー設定を持つことができます。本番環境とテスト環境を切り替えたい時に便利です。
[
{
"name": "本番サーバー",
"host": "sv****.xserver.jp",
"protocol": "ftp",
"port": 21,
"username": "honban_user",
"password": "honban_pass",
"remotePath": "/example.com/public_html",
"uploadOnSave": false
},
{
"name": "テストサーバー",
"host": "sv****.xserver.jp",
"protocol": "ftp",
"port": 21,
"username": "test_user",
"password": "test_pass",
"remotePath": "/test.example.com/public_html",
"uploadOnSave": true
}
]
右クリックメニューからアップロードを実行する時に、どちらのサーバーに送るかを選べるようになります。本番には慎重に、テストには気軽に、という使い分けができるので、大規模なプロジェクトでは特に重宝します。
3.備考
1.Natizyskunk SFTPとは
Natizyskunk SFTPは、フランスの開発者 Natan FOURIÉ氏(GitHub ID: Natizyskunk) が中心となって開発・メンテナンスしている、VS Code向けのファイル転送拡張機能です。SFTP(SSH File Transfer Protocol)とFTP/FTPSの両方に対応し、ローカルで編集したファイルをリモートサーバーに転送・同期できます。
もともとは liximomo氏 が作っていた「vscode-sftp」という拡張機能が広く使われていましたが、原作者がメンテナンスを停止したため、Natizyskunk氏がフォーク(派生開発)して引き継いだものが現在の主流になっています。VS Codeのマーケットプレイスでも、liximomo版は「非推奨(deprecated)」と表示され、Natizyskunk版が後継として案内されています。さらに2023年からは satiromarra氏 も共同メンテナとして加わり、現在は2人体制で開発が続けられています。
ここ2年ほどで50回以上のアップデートがリリースされており、バグ修正・機能追加・安定性向上が継続的に行われています。執筆時点の最新安定版はv1.16.3です。GitHubのスター数は約500、フォーク数は100以上と、世界中の開発者に使われている定番拡張機能の一つだと言えます。
主な特長は次の通りです。
| 特長 | 内容 |
|---|---|
| マルチプロトコル対応 | SFTP(SSH)とFTP/FTPSの両方を1つの拡張機能で扱える |
| シンプルな設定 | JSON形式の設定ファイル1つで完結。難解なGUIは無い |
| 右クリック操作 | エクスプローラーから右クリックでアップロード/ダウンロード |
| 保存時自動転送 | uploadOnSave オプションでCtrl+S時に自動アップロード |
| 双方向同期 | ローカル⇔リモートの差分同期コマンドを搭載 |
| 差分比較 | ローカルとリモートのファイルをVS Code上で比較可能 |
| ファイル監視 | VS Code外で変更されたファイルも検知してアップロード |
| 無料 | オープンソース、MITライセンスで無償公開 |
参考リンク:VS Code Marketplace – SFTP by Natizyskunk
参考リンク:GitHubリポジトリ(公式)
2.sftp.jsonのパラメータ一覧
公式Wikiで公開されている設定パラメータを、用途別に整理しました。普段使うのは上の方の基本パラメータだけで十分ですが、後半のパラメータも知っておくと、いざという時に役立ちます。
接続設定(基本)
| パラメータ | 型 | デフォルト | 意味 |
|---|---|---|---|
| name | 文字列 | ― | この接続設定の識別名。複数サーバーを使う時に区別するための名前 |
| protocol | “sftp” / “ftp” | sftp | 使用するプロトコル。XserverのFTP接続なら “ftp” |
| host | 文字列 | ― | サーバーのホスト名またはIPアドレス |
| port | 整数 | 22(sftp) / 21(ftp) | 接続ポート番号 |
| username | 文字列 | ― | FTP/SFTPのユーザー名 |
| password | 文字列 | ― | FTP/SFTPのパスワード(平文で保存される点に注意) |
| remotePath | 文字列 | / | サーバー側の転送先ディレクトリ(絶対パス) |
| context | 文字列 | ワークスペースルート | ローカル側の起点フォルダ。サブフォルダだけを転送したい時に使う |
転送動作の設定
| パラメータ | 型 | デフォルト | 意味 |
|---|---|---|---|
| uploadOnSave | 真偽値 | false | VS Codeで保存したら自動でアップロードするか |
| downloadOnOpen | 真偽値 | false | ファイルを開いた時に自動でリモートからダウンロードするか |
| useTempFile | 真偽値 | false | 転送中のファイル破損を防ぐため、一時ファイル経由でアップロードするか |
| openSsh | 真偽値 | false | OpenSSH独自のアトミック転送機能を使うか(SFTPのみ・useTempFile併用必須) |
| concurrency | 整数 | 4 | 同時転送するファイル数。サーバーが弱い時は減らす |
| connectTimeout | 整数 | 10000 | 接続タイムアウト時間(ミリ秒) |
除外・同期設定
| パラメータ | 型 | デフォルト | 意味 |
|---|---|---|---|
| ignore | 文字列配列 | [] | 転送対象から除外するファイル/フォルダのパターン(gitignore形式) |
| ignoreFile | 文字列 | ― | 除外パターンを別ファイルから読み込みたい時のファイルパス |
| syncOption.delete | 真偽値 | false | 同期時に転送先の余計なファイルを削除するか |
| syncOption.skipCreate | 真偽値 | false | 同期時に新規ファイルを作成しないか |
| syncOption.ignoreExisting | 真偽値 | false | 同期時に既存ファイルを更新しないか |
| syncOption.update | 真偽値 | false | 転送元のほうが新しい時だけ更新するか |
ファイル監視(watcher)
| パラメータ | 型 | 意味 |
|---|---|---|
| watcher.files | 文字列 | 監視対象のファイルパターン(例:**/*) |
| watcher.autoUpload | 真偽値 | 変更を検知したら自動アップロードするか |
| watcher.autoDelete | 真偽値 | ファイル削除を検知したらリモートからも削除するか |
パーミッション・その他
| パラメータ | 型 | 意味 |
|---|---|---|
| filePerm | 数値(8進数) | 新規ファイルに設定するパーミッション(例:644) |
| dirPerm | 数値(8進数) | 新規ディレクトリに設定するパーミッション(例:755) |
| remoteTimeOffsetInHours | 数値 | ローカルとリモートの時差(時間単位) |
| limitOpenFilesOnRemote | 真偽値/数値 | サーバー側の同時オープンファイル数の上限。基本は触らない |
FTP固有の設定
| パラメータ | 型 | 意味 |
|---|---|---|
| secure | 真偽値 | FTPS(暗号化FTP)を使うか |
| passive | 真偽値 | パッシブモードで接続するか。Xserverを含む多くのレンタルサーバーでは true 推奨 |
参考リンク:公式Wiki – Common Configuration(全パラメータの詳細)
3.セキュリティの注意点
sftp.json には、FTPのパスワードが平文(暗号化されずそのままの文字列)で書かれます。これは公式ドキュメントにも明記されている仕様で、便利さと引き換えのトレードオフです。そのため、次の3つは絶対に守ってください。
1. .gitignore に必ず .vscode/sftp.json を追加し、Gitリポジトリに上げない
2. sftp.json の ignore リストに必ず .vscode を含め、サーバーにも上げない
3. パブリックなGitHubリポジトリには絶対にコミットしない
万が一 sftp.json をGitHubの公開リポジトリに上げてしまうと、世界中からあなたのサーバーのFTPパスワードが見える状態になります。ボットがすぐに見つけてサーバーを乗っ取られる事故も実際に起きています。最初の1回だけ、必ずこの3点を確認するクセをつけておいてください。
4.WinSCPやFileZillaと比べた時のメリットとデメリット
| 項目 | Natizyskunk SFTP | WinSCP / FileZilla |
|---|---|---|
| 起動の手間 | VS Code内で完結。別ソフト不要 | 別ソフトを起動する必要あり |
| 転送操作 | 右クリック1回 | ファイルを探してドラッグ&ドロップ |
| 差分管理 | ローカルとリモートを直接比較可能 | 基本的に手動で確認 |
| 自動アップロード | 保存時自動転送に対応 | 非対応(または有料機能) |
| ファイル管理画面 | VS Codeのエクスプローラーがそのまま使える | 独自の2ペイン画面に慣れる必要あり |
| パスワード保管 | JSONに平文(注意が必要) | 専用の暗号化保管庫を持つ |
セキュリティ面ではWinSCPなどの専用ソフトに分がありますが、開発スピードという点ではVS Code内で完結するこちらの方が圧倒的に楽です。私の場合、本番のクリティカルな運用作業はWinSCPで、開発中の頻繁な転送はNatizyskunk SFTPで、というふうに使い分けています。慣れてくると、もうWinSCPに切り替える時間すら惜しくなります。一度この快適さを味わうと、本当に手放せません。

コメント