Windowsユーザもrsyncでファイルをアップしよう

こんにちは、らいあです。
Dinoのプログラマーは毎日いろんなツールや関数を作って遊んでいます。

今日は、windowsマシンで開発作業をしている人のためのhowtoをしようと思います。自分のPCで書いたソースコードを開発サーバにアップロードして動作させる事はよくありますよね。そのときに、みなさんはどうやってファイルをアップしていますか。

ftp?smb?scp?rsync?
今日はそのなかから、WinSCPとrsyncによるやりかたを解説します。どちらもssh経由によるアップロードです。

WinSCPでアップロードするやり方

利点

簡単。
ファイルを編集すると同時に勝手にアップロードしてくれる。

欠点

こまかい調節が面倒/できない。
重い。

やりかた

WinSCPをインストールする。

winscp1.JPG
メニューから『ミラーリングアップロード』を選びます。

winscp2.JPG
自分のPCのディレクトリとアップロード先とを選びます。『ファイルの削除』にチェックを入れると完全な同期です。アップロード先にある余分なファイルは削除されます。
僕が使っていて気づいたのは、『ファイルの削除』にチェックをしない状態だと、不完全な(アップロードされないファイルが発生する)場合があることです。なので僕は必ずチェックをつけています。

winscp3.JPG
アップロードしたくないファイルは『転送設定』画面にある『除外』のテキストボックスに記述しておくとよいです。

これで、『開始』を押すと自分のPCのファイルの監視がはじまります。
ただし、ファイルが500個を超えたあたりから、少々パフォーマンス的につらくなるのが実感されるかと思います。またこの機能は、タイムスタンプによって判断をしていますので、更新日時だけが変更されるような作業(たとえばsvnupとか)だけでもアップロードされてしまいます(わりとこれがうっとうしい)。

rsyncでアップロードするやり方

利点

細かく調整ができる。
高速。

欠点

設定が面倒。
自分でクリックして実行しないといけないので、アップロードし忘れることがある。

やりかた

cwRsyncをインストールする。

cwRsyncのインストールディレクトリにcwrsync.cmdというファイルがあるので、それを自分のプロジェクトにコピーして下さい。そこに、自分のPCのディレクトリとアップロード先、オプションなどを記述します。実際にはcmdのスクリプトを書くことになります。

例です。
cwRsyncにはsshが付属しているので、アップロード後にセットアップスクリプトを実行させたりできるのが便利です。この場合はsymfony ccを叩いています。

REM ** CUSTOMIZE ** Enter your rsync command(s) here
 
SET RSYNC_OPT=--verbose
SET RSYNC_OPT=%RSYNC_OPT% --exclude=.svn
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/.project
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/devsync.cmd
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/doc/*
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/log/*
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/cache/*
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/.cache/
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/.settings/
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/configure.yml
SET RSYNC_OPT=%RSYNC_OPT% --exclude=/config/config.php
SET RSYNC_OPT=%RSYNC_OPT% -rltgoD
SET RSYNC_OPT=%RSYNC_OPT% --delete
SET RSYNC_OPT=%RSYNC_OPT% --rsh=ssh
SET RSYNC_OPT=%RSYNC_OPT% --checksum
SET RSYNC_SRCDIR=/cygdrive/c/ryer/work/project1/
SET RSYNC_DESTDIR=/home/ryer/project1/
SET TARGET_HOST=ryer@192.168.0.101
SET SETUP_CMD="symfony configure; symfony cc;"
 
@ECHO ON
rsync %RSYNC_OPT% %RSYNC_SRCDIR% %TARGET_HOST%:%RSYNC_DESTDIR%
ssh %TARGET_HOST% "cd %RSYNC_DESTDIR%; %SETUP_CMD%"

しかし、いちいちパスワードを入力しないといけないのでは面倒です。それも、cwRsyncには一通りのツールが(ssh-keygenも)付属しているので、パス無し認証の設定が可能です。
コマンドプロンプトで以下のように作業します。出力されるC:\Documents and Settings\自分\.ssh\id_rsa.pubの内容をリモートのsshの.ssh/authorized_keysに記述すれば完了です。

> cd C:\Progra~1\cwRsync\bin
> ssh-keygen -P ""

これでcmdファイルを実行するだけで、自分のPCの内容をリモートのフォルダにアップロードできるようになりました。
cwrsync1.JPG
eclipseで使ってみた例です。

最後に

smbやWinSCP等の同期ツールは、書いたそばから勝手にアップロードされるので、アップロードし忘れる心配がありません。rsyncのほうも、基本的にはダブルクリック一発だけですので、アップ漏れの心配は少ないでしょう。なるべく、編集したファイルを自分で選択するような必要のない、簡単なやりかたを考えてみてください。

最近、少々肩身の狭いWindowsユーザですが、一緒にがんばりましょうね!

コメント / トラックバック 1 件

#1 Windows+symfony1.1でproject:deployを動かすためのパッチ | 秋元@VDSL設備に雷サージ落とし 2008/08/05 21:51

[...] 前準備として、rsyncクライアントが必要なので、Windowsで動くcwRsyncを入れて、PATHを通しておきます。 [...]

コメントする