すべての記事

MacからSFTPサーバのファイルを直接編集する方法

· 10分で読めます

結論: サーバのファイルをダウンロードして編集し、手作業でアップロードし直す必要はありません。Folia FilesでSFTPのサーバに一度接続しておけば、あとはサーバのフォルダにあるファイルをダブルクリックするだけです。ファイルはMac上のコピーからいつものアプリで開き、保存するたびにFolia Filesがサーバへ送り返します。その前に、サーバ上で誰かがファイルを変更していないかを確かめます。送信の状況は操作 › リモートファイルで確認できます。

この記事では、設定の手順、編集中に表示される内容、そしてサーバが書き込みを拒んだときに起きることを説明します。

サーバのファイルの編集が面倒な理由

SFTPクライアントでの作業は、いつも3つの手順になります。config.phpやindex.htmlをダウンロードし、編集して、アップロードし直す。最後の手順を忘れれば、サーバでは古いバージョンが動いたままです。2台のMacから同じことをすれば、ほかの人の変更を気づかないうちに上書きしてしまいます。

サーバをディスクとしてマウントすれば、エディタでファイルをそのまま開けるので簡単そうに見えます。ところが、アプリはネットワークディスクへ直接保存するのが苦手です。多くのアプリは一時ファイルに書き込んでから元のファイルと入れ替えたり、ロックファイルを残したり、遅いサーバとの往復を毎回待ったりします。その結果、ファイルの所有者や権限が失われたり、保存中にエディタが固まったりすることがあります。

理想は両方のいいところを取ることです。エディタが扱いやすいローカルのファイルと、保存のたびに追従するサーバ上のコピーです。

手順1:SFTPでサーバに接続する

Folia FilesのWebサイト版では、SFTP接続に無料のオープンソースツールrcloneを使います。ターミナルでbrew install rcloneを実行して一度インストールしておきます(入っていない場合は、接続のウインドウにインストール用のボタンが表示されます)。続いて:

  1. ツール › 接続(サーバとクラウド)…(⌘K)を選び、新規接続をクリックしてSFTP / SCP (SSH)を選びます。
  2. サーバのアドレス、ユーザ名、パスワードまたはSSH鍵を入力します(鍵やSSHエージェントを使う場合は、パスワードを空欄にします)。
  3. 開始フォルダに、ふだん作業するフォルダ(例:/var/www)を入力します。Folia Filesはサーバ全体をルートからマウントするので、どこへでも上の階層に移動できます。開始フォルダは最初に開くフォルダというだけです。
  4. 接続をテストをクリックしてからマウントをクリックします。サーバがサイドバーのサーバセクションに表示されます。

接続のウインドウ。まだマウントしていないvps.alex.devへのSFTP接続と、そのユーザと開始フォルダ/var/www

ファイルを編集したい場合は、接続のオプションで読み出し専用をオフのままにしておきます。読み出し専用の接続では、ファイルはそのまま開き、送り返すものはありません。rclone、SSH鍵、S3について詳しくは「macFUSEなしでMacからSFTPとS3に接続する方法」をご覧ください。

手順2:ファイルを開いて編集する

ほかのフォルダと同じようにパネルでサーバの中を開き、次のどちらかを行います:

  • ファイルをダブルクリックして、デフォルトのアプリで開く
  • 右クリックしてこのアプリケーションで開くを選び、テキストエディット、BBEdit、Visual Studio Code、Novaなど好きなエディタで開く

Folia Filesは作業用のコピーをMacにダウンロードして開きます。バナーに「「index.html」はこのMac上のコピーから開きます」と表示され、保存するたびにサーバへ送り返されること、「操作」で追跡できることが示されます。ダウンロードに1秒以上かかる場合は、先にサーバ名とともに「「index.html」を開いています…」と表示されます。

あとはいつもどおり編集し、⌘Sで保存します。アプリが書き込みを終えてから1秒ほどで、Folia Filesがファイルを送信します。サーバに保存しましたと表示されるのは、サーバが新しい内容を実際に受け取ってからです。SFTPの場合は、マウントの表示を信用せず、サーバに直接問い合わせて確かめます。

Webサーバで大切な点がいくつかあります:

  • 権限は変わりません。 ファイルはその場で書き直されるので、新しいファイルの初期設定ではなく、サーバ上の所有者と権限がそのまま残ります。
  • 1つのファイルにコピーは1つ。 同じファイルをもう一度開くと、まだ送信していない変更も含めて同じ作業用コピーが開きます。
  • 対象は書類だけ。 200 MBまでのファイルがコピー経由になります。ビデオ、アーカイブ、ディスクイメージ、アプリはサーバから直接開きます。

この動作は初期設定でオンになっています。スイッチは設定 › ファイルとネットワークの「サーバ上の書類を、このMac上のコピーで編集し、保存するたびに送り返す」です。オフにするとファイルはサーバから直接開きますが、1つのファイルを右クリックして編集してサーバに送り返すを選ぶこともできます。

Folia Filesの設定の「ファイルとネットワーク」ページ。サーバ上の書類をMac上のコピーで編集するオプション

SFTPに限りません。ほかの接続のファイルや、Macにマウントされたネットワークボリューム(SMBの共有やWebDAVサーバなど)のファイルでも同じように動作します。

手順3:操作 › リモートファイルで送信を確認する

ツールバーの操作(2つの矢印のボタン)をクリックするか、ウインドウ › 進行中の操作(⌃⌘O)を選びます。サーバのファイルを開いている間は、すべてと進行中のページにリモートファイルのセクションが表示され、ファイルごとに1行ずつ並びます:

  • ファイル名と、その下に接続名とサーバ上のファイルのパス
  • 状態:最新、「(時刻)に送信」、送信中…、まだ送信されていない変更、その間にサーバ上で変更されました、または最後の送信を止めたエラー
  • 3つのボタン:サーバに送り返す、このMac上のコピーを表示、終了(このMac上のコピーを削除)

作業が済んだファイルは終了させましょう。サーバに最新のバージョンがない場合、Folia Filesは先に「最新の変更を送信せずに終了しますか?」と確認します。最新の状態で1週間手を付けていないコピーは自動的に片付けられます。

サーバが書き込みを拒んだとき

サーバがファイルの書き込みを拒否する

よくあるのは、別のユーザが所有する設定ファイルです。たとえば、alexとして接続しているのに、php.iniの所有者がrootになっている場合です。rcloneは「permission denied」とそっけなく返すだけですが、Folia Filesはバナーとリモートファイルでわかりやすく説明します:

サーバがこのファイルの書き込みを拒否しています。接続のユーザにはこのファイルを変更する権限がありません(サーバ上のファイルの所有者または権限)。

変更は失われません。Mac上に残り、バナーには再試行ボタンが表示されます。解決するには、サーバ上でファイルの所有者や権限を変えるか、書き込みが許されたユーザで接続し直してから、もう一度送信します。「サーバにこのファイルのための空き容量がありません。」の場合も同じです。サーバが受信をまったく確認しない場合は、「サーバが受信を確認しませんでした。変更はこのMacに残っています。」と表示されます。

送信の途中で接続が切れた場合は、サーバにあった元のバージョンがMac上に保管され、バナーの表示ボタンからそこへ移動できます。

誰かがサーバ上のファイルを変更した

Folia Filesは送信のたびに、サーバ上のファイルと、あなたが開いたときのファイルを比べます。同僚、デプロイ用のスクリプト、別のエディタなどによって変更されていれば、何も上書きしません。バナーに「サーバ上の「index.html」が変更されました」と表示され、次の選択肢が示されます:

  • サーバのバージョンを置き換える:あなたのバージョンをサーバに送ります。Folia Filesがサーバ上の内容をまだ見ていない場合は、先にそのコピーをMac上に残します。
  • 両方とも残す:あなたのバージョンを隣に「index(自分のバージョン).html」として保存し、以降の保存はそのファイルに送られます。

サーバに接続されていない

接続が切れている間に保存すると、バナーにサーバに接続されていないこと、変更はこのMacに保持されることが表示されます。接続して送信をクリックすれば、マウントし直して送信します。接続のログ(サイドバーでサーバを右クリック › 接続のログ)には、送信したファイルと失敗がすべて記録されるので、問題が繰り返すときに役立ちます。ネットワークディスクでMacが固まりがちなら、「ネットワークドライブでFinderが固まる理由」も参考になります。

サーバに届いていない変更があるまま終了するとき

編集中はFolia Filesを開いたままにしてください。保存のたびに送信しているのはFolia Filesです。変更がサーバに届く前に終了しようとすると、次のように確認されます:

リモートファイルへの一部の変更がサーバに反映されていません。これらはこのMacに残ります。次回の起動時にFolia Filesから案内されます(操作 › リモートファイル)。

キャンセルをクリックすれば終了せずに送信できます。終了を選んだ場合は、次回の起動時にリモートファイルでそのファイルに「まだ送信されていない変更」と表示され、矢印のボタンで送信できます。以前のセッションから送信されないまま残り、その後保存し直していない変更(サーバが拒否し続けるファイルなど)については、終了のたびに確認されることはありません。送信するか終了させるまで、リモートファイルで待機します。

Webサイト版とMac App Store版

ここまでの説明はWebサイト版のものです。Webサイト版では、rcloneをインストールすればすぐにSFTPを使えます。コピーを使った編集は両方の版にあり、SMBやWebDAVの共有でも使えます。Mac App Store版でSFTP接続を使うには、小さな無料アプリFolia Files Companionが必要です。Appleのサンドボックスでは、アプリがrcloneを起動できないためです。

接続、クラウド、その場での編集について詳しくは、サーバとクラウドのページをご覧ください。