リモートサーバ上のファイルをTextMate2またはSublime Text2/3で編集する

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がインストールされていない場合はwgetrmateを直接ダウンロードする、などの方法でもOKです。

ローカルのTextMate2、Sublime Text2/3の準備

TextMate2の準備

[Preferences]-[Terminal]で[Accept rmate connections]にチェックを入れるだけです。

Terminal_20140406_003221_20140406_003233.jpg

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/configRemoteForwardの設定を追加しておくとssh接続時のポート指定を省けます。

Host example.com
    RemoteForward 52698 localhost:52698

TextMate2はalpha.9459からIPv6でrmateの接続を待ち受けるようになったので、転送先ポートは127.0.0.1:52689ではなく、localhost:52698とする必要があります。

textmate/Applications/TextMate/about/Changes.md at master · textmate/textmate 2013-08-02 (v2.0-alpha.9459)

rmateの使い方

ローカルマシンでTextMate2またはSublime Text2/3を起動しておきます。あとは冒頭で書いた通り、sshでリモートサーバに接続して以下のように実行するだけです。

$ rmate sample.txt

これでリモートサーバ上のファイルのデータがローカルのTextMate2(またはSublime Text2/3)に転送さえれて、ローカルマシン上でファイルを編集することができるようになります。

Sublime Textを使う場合は、リモートサーバ上でrmateのエイリアスとしてrsubを登録しておくと分かり易いかもしれません。

$ echo alias "rsub='rmate'" >> ~/.bashrc

##リモートサーバ側のポート変更

以下の3つ方法でポートの変更が可能です。下に行くほど優先順位が高くなります。

  1. /etc/rmate.rc
  2. ~/.rmate.rc
  3. 環境変数(RMATE_PORT)

rmate.rcでは以下のようにポートを指定します。

port=52699

まとめ

各種configファイルの更新であればviで実行する場合が多いかなと思いますし、chefなどのプロビジョニングツールを使う場合はそもそもリモートサーバ上のファイルを 直接更新すること自体がほとんど無いと思われるので、rmateのユースケースは限定的かもしれません。

開発の初期段階など、試行錯誤を繰り返すような場合はリモートサーバ上のファイルを直接編集出来た方が効率がよいので、 そういった場合にはrmateが役立つかと思います。

参考サイト

comments powered by Disqus