somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Eclipse】開発サーバと一時ファイルとファイルシステムの同期【Ruby】

RubyのwatchrとEclipseのRSEを併用して、RSEで更新している一時ファイルをローカルファイルシステムと同期してみました。他のプラグインを使えばできそうな感じもしますが、試していません…。また、RSEで接続しているサーバのディレクトリとファイルシステム内のディレクトリの構成が同じであることが前提です。

事前準備

以下がインストールされている前提です。

watchr用スクリプト

以下を用意しておいてください。

  • RSEで接続するサーバに対応する一時ファイルが作成されるディレクトリパス・・・①
  • 同期するファイルシステムのディレクトリパス・・・②

スクリプトを用意①に格納します。その後、用意①に移動して下記コマンドを実行してください。

watchr スクリプト名

以下、スクリプト内容です。もっといい書き方があるはず・・・。

def run(file_path)
  replace_file_path = file_path.gsub("/", "\\")
  cmd = "copy #{replace_file_path} 用意②\\#{replace_file_path}"
  puts "$ #{cmd}"
  system cmd
end

watch("(.*)") { |m| run "#{m[0]}" }

スクリプト説明

監視対象を全てのソースにしています。ソースの更新等が発生した場合にrunメソッドに監視対象ファイルのパスを渡します。このパスは、用意①以下のフルパスです。

渡されたパスに含まれるディレクトリセパレータをUNIX形式からWindows形式にしています。

あとは、コピーコマンドを実行しているだけです。テストを書かない開発なのでとりあえず問題ないです・・・。そもそもテストを書くようならば、ローカルに開発環境が存在するはずなので気にしなくてもよさそうな気がします。

問題点

RSEの仕様だと思いますが、編集するソースが格納されているディレクトリに他の一時ファイルが存在する場合、そのファイルまでダウンロードします。そのため、自分が修正していないソースまでファイルシステムに反映されてしまいます。

この状態で、ソース管理システムにコミットしないように気をつけなければなりません。

Ruby側で、最初のソースのみコピー対象にできればいいと思うので、少し勉強しておきます。