データ消失の悪夢が発生したときに備え、ウェブサイトのバックアップは必要です。
…とは思いながら、なかなかできていないのが現実。理由は単純で、面倒くさいから。何が面倒かというと、いちいち手で操作してあげる必要があるところです。

ということで、無料で自動化かつ定例化し、そんな面倒とおさらばする方法の備忘録。

なお、定例化する方法は割愛してます。タスクマネージャーへの登録だけのため。
一番手間がかかった「バッチで自動化」部分のメモです。

※実際にバックアップしたのはサクラのレンタルサーバー上にあるファイルです。

■条件
(1)一度設定した後は自動化する。手動でパスワードを打ち込んだりはしない。
(2)余計なソフトウェアは極力使わない。
(3)動作させるプラットホームはWindows。
(4)不必要なディレクトリはバックアップしない。指定したものだけバックアップする。

■ボツ案その1
コマンドプロンプトだけを使ってバックアップ。

【理由】
特定のディレクトリをFTPで丸ごとダウンロード(get)ができない。
ディレクトリ構成が変更しないのならばできないことは無いが、変更する可能性があるため却下。

■ボツ案その2
FFFTPを使ってミラー。

【理由】
FFFTPをコマンドプロンプトからキックしてバックアップ(ミラー)するというもの(ご参考:FFFTP - Toolテクニック - オンラインPC館
必要の無いディレクトリまでダウンロードされるためNG。



という紆余曲折がありNCFTPというFTPを拡張したコマンドが使えるソフトウェアをインストールし、自動化しました。

■NcFTPの理由
(1)無料。オープンソースライセンス(Clarified Artistic License。Wikipedia参考)。
(2)Linux(Unix)で昔からよく使われている(らしい)という実績。
(3)余計な機能が少なく、シンプル。
(4)Windowsで動く。

■ダウンロードとインストール
ダウンロードは以下の公式サイトから、「for Microsoft Windows」となっているものを選びます。
今回は「NcFTP Client 3.2.5 for Microsoft Windows」。
http://www.ncftp.com/download/

インストールはダウンロードしてきたインストーラーに従って、「次へ」ボタンをクリックするだけです。

■NcFTPの動作確認
コマンドプロンプトを起動し、「ncftp」と入力してエンター。
プロンプトが「ncftp>」となればインストールに問題はありません。

■利用するコマンドとコマンド例
「ncftpget」コマンドを利用します。
使い方はここで説明するより、コマンドプロンプトで「ncftpget」と入力して実行したときに表示されるヘルプファイルを読むほうが良いと思われるので、割愛します。

以下コマンド例は、「example」サイトにおいて、サーバ上にある「www」以下のファイルを全て取得するコマンドです。
ncftpget -u ユーザ名 -p パスワード -R ftp://(FTPサーバ名。例:example.sakura.ne.jp)/www

なお、NcFTPのその他のコマンドについては、「ncftp - 高機能 ftpクライアント」が参考になると思います。

■バックアップを取得するバッチ
せっかくなので、バックアップをする日付を取得しフォルダを作成、そのフォルダにncftpgetでファイルをダウンロードする、というかたちにしました。
日付をファイル名にする方法は、@ITさんの「バッチ・ファイル中で日付をファイル名に使用する」を参考にしています。

setlocal
rem 取得するサイト名
set targetSite=dqfaq
rem バックアップを保存する先のドライブ名
set driveName=D
rem バックアップを保存する先のフォルダ名
set backupDir=backup

set dt=%date%

rem バックアップ取得先のフルパス。
rem 例えば2013/04/09に上記の設定で取得した場合の保存先は
rem D:\backup\20130409-dqfaq となる。
set backupDirPath=%driveName%:\%backupDir%\%dt:~-10,4%%dt:~-5,2%%dt:~-2,2%-%targetSite%

rem バックアップ先フォルダを作成し、カレントディレクトリを変更する
mkdir %backupDirPath%
cd /d %backupDirPath%

rem ncftpを利用して一括バックアップを取得する。
ncftpget -u ユーザ名 -p パスワード -R ftp://(FTPサーバ名)/mail
ncftpget -u ユーザ名 -p パスワード -R ftp://(FTPサーバ名)/www