GitHub Actions から Xserver へ静的サイトをデプロイする方式として、最初はFTPSを使い、後からSSH+rsyncに切り替えた。その実体験に基づく比較と、それぞれの導入手順のまとめ。
| 観点 | FTPS | SSH+rsync |
|---|---|---|
| 導入の手軽さ | ◎ アカウント情報だけで動く | △ SSH鍵の生成・登録が必要 |
| 転送速度 | ✕ このサイトでは8〜13分 | ◎ 差分転送で約6秒 |
| 安定性 | △ 制御コネクションが度々タイムアウト | ◎ 一度ハマったが原因判明後は安定 |
| セキュリティ | 暗号化通信のみ | 公開鍵認証+暗号化通信 |
結論:最初からSSH+rsyncが使えるなら、そちらを選んだ方がいい。 FTPSは「手軽さ」だけが利点で、今回のように数百ファイルを扱う静的サイトでは速度・安定性の両方で見劣りした。
GitHub Actions上で SamKirkland/FTP-Deploy-Action というツールを使い、FTPS(FTP over TLS)でXserverに直接ファイルをアップロードする。ローカルの out/(Next.jsのビルド成果物)を丸ごと転送する。
FTP_SERVER(ホスト名)FTP_USERNAMEFTP_PASSWORDFTP_SERVER_DIR(アップロード先の相対パス)SamKirkland/FTP-Deploy-Action を使い、protocol: ftps を指定してアップロードするドメイン名/public_html/ が公開フォルダになる想定だったが、このサーバーでは実際のドキュメントルートが home直下 になっており、FTPアカウントの「接続先ディレクトリ」の設定次第で見える場所がまったく変わった。テストファイルを置いて実際にどこが配信されているか確認しながら特定する必要があった。Timeout (control socket) というエラーで、数回に1回の頻度でデプロイが失敗するようになった。タイムアウト時間を延長(30秒→120秒)し、失敗時に自動で1回リトライする仕組みを入れても、根本的には解消しなかった。