rmateを使います。
rmateをリモートサーバにインストールしておくと、リモートサーバ上でrmate sample.txt
のように実行するだけで
ローカルのTextMate2やSublime Text2/3でリモートファイルを編集できるようになります。
環境
- リモートサーバOS : CentOS 6.4
- ローカルマシン : Mac OS X 10.9
リモートサーバ側の準備
リモートサーバにrmateをインストールします。
rmateにはRubyスクリプト版とシェルスクリプト版があります。 前者を使用するにはリモートサーバにRubyがインストールされている必要があります。 リモートサーバにRubyの実行環境が無い場合は後者を使用します。
Rubyスクリプト版のインストール
gemでインストールします。
$ gem install rmate
シェルスクリプト版のインストール
github上のrmateスクリプトを任意のディレクトリにコピーします。
以下はリポジトリをカレントディレクトリにcloneして、rmate
を/usr/local/bin
にコピーする方法です。
コピーしたrmate
には実行権限を付与しておきます。
またrmate
のコピーが完了したらrmateディレクトリは不要になるので削除しておきます。
$ git clone git@github.com:aurora/rmate.git
$ sudo cp ./rmate/rmate /usr/local/bin/
$ sudo chmod a+x /usr/local/bin/rmate
$ rm -rf ./rmate
git
がインストールされていない場合はwget
でrmate
を直接ダウンロードする、などの方法でもOKです。
ローカルのTextMate2、Sublime Text2/3の準備
TextMate2の準備
[Preferences]-[Terminal]で[Accept rmate connections]にチェックを入れるだけです。
rmateはsshのport forwardingの機能を利用しています。ここで設定しているポート(52689)はTextMate2がリモートサーバからのデータ転送を待ち受けるためのポートです。 他アプリケーションとの競合がある場合は適当なポートに変更しておきます。
Sublime Text2/3の準備
rmateのSbulime Text用の実装である[rsub](https://github.com/henrikpersson/rsub)
をインストールします。
インストールはPackage Controlから実行可能です。
rsubの待ち受けポートはrsubのパッケージ設定(rsub.sublime-settings)で変更可能です。
{
"port": 52698,
"host": "localhost"
}
sshの設定
sshのport forwardingで、リモートサーバのポート52689へのアクセスをローカルマシンのポート52689へ転送するようにします。
sshでの接続時に動的に転送元・先のポートを設定する場合は、以下のように-R
オプションでポートを指定してリモートサーバへ接続します。
ssh -R 52698:localhost:52698 user@example.com
ただしこの方法だとsshでの接続都度ポートを指定する必要があって面倒です。~/.ssh/config
にRemoteForward
の設定を追加しておくとssh接続時のポート指定を省けます。
Host example.com
RemoteForward 52698 localhost:52698
TextMate2はalpha.9459からIPv6でrmateの接続を待ち受けるようになったので、転送先ポートは127.0.0.1:52689
ではなく、localhost:52698
とする必要があります。
rmateの使い方
ローカルマシンでTextMate2またはSublime Text2/3を起動しておきます。あとは冒頭で書いた通り、sshでリモートサーバに接続して以下のように実行するだけです。
$ rmate sample.txt
これでリモートサーバ上のファイルのデータがローカルのTextMate2(またはSublime Text2/3)に転送さえれて、ローカルマシン上でファイルを編集することができるようになります。
Sublime Textを使う場合は、リモートサーバ上でrmate
のエイリアスとしてrsub
を登録しておくと分かり易いかもしれません。
$ echo alias "rsub='rmate'" >> ~/.bashrc
##リモートサーバ側のポート変更
以下の3つ方法でポートの変更が可能です。下に行くほど優先順位が高くなります。
- /etc/rmate.rc
- ~/.rmate.rc
- 環境変数(RMATE_PORT)
rmate.rc
では以下のようにポートを指定します。
port=52699
まとめ
各種configファイルの更新であればviで実行する場合が多いかなと思いますし、chefなどのプロビジョニングツールを使う場合はそもそもリモートサーバ上のファイルを 直接更新すること自体がほとんど無いと思われるので、rmateのユースケースは限定的かもしれません。
開発の初期段階など、試行錯誤を繰り返すような場合はリモートサーバ上のファイルを直接編集出来た方が効率がよいので、 そういった場合にはrmateが役立つかと思います。