毎日、深夜や仕事終わりに業務内容のバックアップを取る設定にしているという方は多いことでしょう。PCの故障や盗難は突然やってくるものですから、万が一の状況に備えて対策を講じておくことは重要ですね。

 ところで、自分のPC内のバックアップは日々取っているとしても、自分の管理しているWebサイトはどうでしょうか。たとえ、外部のWebサーバーにあるからといっても、やはり、手元にダウンロードしておけば安心です。掲示板やWikiなどの動的に作成されるコンテンツがあるならば、なおさらです。何かのきっかけでデータが壊れてしまうということもあり得ます。

GNU Wgetを利用しよう

 今回は、GNU Wgetというツールを利用して、Webサイトのデータを一括ダウンロードしてバックアップするプログラムを作ります。JavaScriptとWgetを組み合わせて効率よく複数サイトをバックアップできます。

 Wgetは、安定してWebサーバーからコンテンツを取得するプログラムです。オープンソフトウエアであり、Windowsだけでなく、Linux/Mac OS Xなど多くのOSで利用できます。

 WgetのWindows版は、以下よりダウンロードすることができます。いくつかのバージョンありますが、「Download」の項にある「Complete package」の「Setup」版を選んでダウンロードしてください。Wgetのインストールを終えたあと、今回のプログラムを利用します。

  • Wget for Windowsのサイト
  • Webサイトのバックアッププログラムについて

     以下のプログラムをコピーしてテキストエディターに貼り付けたら、「ftp-backup.jse」という名前で保存してください。Webサイト(FTP)の設定(詳しくは後述)を書き換え、ダブルクリックで実行できます(こちらからダウンロードできます)。

    //----------------------------------------------------------
    // FTP Download
    // 動作には、wget windows が必要
    // http://gnuwin32.sourceforge.net/packages/wget.htm
    //----------------------------------------------------------
    // wgetのパスを指定
    var wget = "C:\\Program Files\\GnuWin32\\bin\\wget.exe";
    // 64bit版のWindowsではおそらく以下
    //var wget = "C:\\Program Files (x86)\\GnuWin32\\bin\\wget.exe";
    // バックアップしたい複数のWebサイトの指定(以下要書き換え)
    var ftp_list = [
      {
        id: "***",              // FTPのID(アカウント)
        pw: "***",              // FTPのパスワード
        protocol: "ftp",        // プロトコル(FTP/HTTP)
        server: "ftp.***.jp",   // サーバーURLを指定
        dir: "/"                // サーバーフォルダの指定
      },{
        id: "***",
        pw: "***",
        protocol: "ftp",
        server: "ftp.***.jp",
        dir: "/"
      }
    ];
    //----------------------------------------------------------
    var shell = new ActiveXObject("WScript.Shell");
    for (var i = 0; i < ftp_list.length; i++) {
      var c = ftp_list[i];
      var cmd = [
        '"' + wget + '"',
        "-mck","--passive-ftp",
        c.protocol + "://" + c.id + ":" + c.pw + "@" +
        c.server + c.dir,
        // '-P "' + c.savepath + '"' // 保存パスを指定する場合
      ].join(" ");
      var savepath = getAppPath() + "\\ftp.bat";
      writeFile(savepath, cmd + "\r\n");
      shell.Run(savepath, 1, true);
    }
    WScript.Echo("ok.");
    //----------------------------------------------------------
    function getAppPath() {
      var fso = new ActiveXObject("Scripting.FileSystemObject");
      return fso.GetFile(WScript.ScriptFullName).ParentFolder.Path;
    }
    function writeFile(fname, txt) {
      var fso = new ActiveXObject("Scripting.FileSystemObject");
      var f = fso.CreateTextFile(fname, true, false);
      f.Write(txt);
      f.Close();
    }
    //----------------------------------------------------------
    

    この先は会員の登録が必要です。今なら有料会員(月額プラン)が12月末まで無料!

    日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら