SSH 【TRAMP】
Emacsでリモートファイルを編集する
(ssh:remote:~/)

リモートのファイル編集は、しばらく scp が当たり前でした。
ただ、実務で扱うファイルが増えると、手順が少しずつ重くなってきました。
どれが最新か迷ったり、更新し忘れたり。

ここで「直接編集できれば、流れが止まらないのでは」と思ったのがきっかけです。
結論はシンプルで、EmacsのTRAMPを使うと作業のリズムが整いやすい、という体感でした。

関連記事

1. 「TRAMP」という発想

TRAMP」は、EmacsからSSH経由でリモートのファイルを開く仕組みです。

「TRAMP」という発想 Emacs ローカル SSH経由 直接編集 サーバー リモート リモートのパスを書いて開くだけ 「普通に編集できる」がそのまま通用

TRAMPは “Transparent Remote Access, Multiple Protocol(透過的なリモートアクセス自動切り替えプロトコル)” の略です1
この「Multiple Protocol」というのは、 SSH、SCP、FTP、telnetなど様々な接続方法に対応しているからで、リモートファイルを意識せずローカルファイルのように扱える仕組みです。

ユーザーからすると、リモートのファイルも自分のパソコン上のファイルも同じように C-x C-f で開いて編集できる、という「透過性」がTRAMPの最大の特徴です。

難しそうに聞こえますが、やっていることは「リモートのパスを書いて開く」だけです。
実際に触ってみると「普通に編集できる」がそのまま通用します。

2. diredでリモートフォルダに入る手順

ここからが本題です。
diredでリモートのフォルダへ入る流れを、細かく分けて書きます。

リモートフォルダへの接続手順 1 dired を開く C-x d ファイル操作モード起動 2 パスを指定 /ssh:USER@HOST:~/ 3 ファイルを開いて保存 • ホームは ~ で指定 • g キーでリスト更新 • 通常のファイル操作と同じ

C-x d で dired を開きます。
入力するパスは次の形です2

/ssh:USER@HOST:~/

diredで開けたら、あとは普通にファイルを開いて保存するだけです。

リモートコンピュータのユーザーのホームに行きたいなら ~ を使うのがポイントです3
私はここで混乱して、意図せず / を見てしまいました。

ちなみに、diredでは、キーのgを入力するとファイルリストが更新されます4

3. 使ってみて良かった点

良かった点は、ざっくり言うと「作業が連続的になる」ことです5

  • 最新のファイル場所で迷わない
  • コピーの往復がなく、差分管理が減る
  • 編集と確認が一つの流れになる

たとえるなら、紙をコピーして持ち歩くのをやめて、机の上で直接書き込む感じです。
少しの違いですが、日々の実務だと効きます。

現状は「全部TRAMPに寄せる」ではなく、作業内容で使い分けています6

  • 軽い編集や確認はTRAMP
  • 大量の操作や重い処理は端末で直接、またはscp、git

TRAMPは「scpの代替」というより、作業の流れを崩さない道具だと思っています。

  1. TRAMPは「Transparent Remote Access, Multiple Protocol」の略で、SSH以外にもscp、telnet、FTPなど複数のプロトコルに対応しています。 – TRAMP User Manual
  2. 非標準のSSHポート番号を使用する場合は、ホスト名の後に「#」でポート番号を指定できます(例:/ssh:USER@HOST#2222:~/)。 – Emacs Tramp でリモート上のファイルを直接編集する方法|Windowsにも対応
  3. ~/.ssh/configでホスト名のエイリアスを設定しておくと、/ssh:myserver:~/のように短く記述できます。 – Emacs でリモートホストのファイルを SSH 接続して直接編集
  4. TRAMPはdiredと統合されており、ローカルとリモートのファイル間でコピーや移動などの操作も可能です。 – Emacs TRAMP
  5. TRAMPは編集時にファイルを一時的にローカルに転送し、保存時にリモートに書き戻します。接続はキャッシュされるため、複数回の編集でも効率的に動作します。 – Quick Start Guide (TRAMP User Manual)
  6. TRAMPは地理的に遠い接続(国をまたぐVPN接続など)では待ち時間が長くなる傾向があります。そのような場合は直接SSHでログインする方が効率的です。 – emacs+tramp-modeでシームレスにリモートワークする