連載
» 2019年01月18日 05時00分 公開

知っトクWindowsツール:Robocopyより高機能。ファイル同期ツールの決定版「FreeFileSync」 (1/2)

クラウドストレージが普及した現在だからこそ役立つファイル同期ツール。Windows OSには標準でRobocopyというミラーリングツールが付属しているが、それよりも断然高機能な「FreeFileSync」を取り上げる。

[塩田紳二,著]

本コーナーではWindows環境を対象として、便利で、長い間利用できそうなソフトウェアやインターネット上のサービスを紹介していきます。必ずしもオープンソースに限定はしませんが、長い間アップデートされ続けていて、今後も継続して使えそうなソフトウェア/サービスに注目します。


 今回紹介するのは、フォルダ間のファイル同期(2つのフォルダ間の変更を他方に反映させ2つのフォルダを同一にする処理)を行う「FreeFileSync」である。クラウドストレージが普及した現在、「いまさらフォルダ同期など役に立つのか?」と思われるかもしれない。

 だが筆者は、OneDriveを「安全」に使うためにFreeFileSyncを利用している。具体的には、原稿などの仕事用のフォルダは、OneDriveの同期フォルダとは別の位置に保存してある。これをFreeFileSyncで1時間に1回、OneDrive上の同期用フォルダと同期させることで、OneDrive側に問題が起きても、ローカルの作業フォルダには、影響が出ないようにしている(詳しくは後述)。

 なお同様のツールには、Windows 10に標準装備されている「Robocopy」もあるが、FreeFileSyncは2つのフォルダの変更点を同時に他方に反映させる「同期」が行える点で優れている(詳細は後述。Robocopyについては、Tech TIPS「Windowsの『robocopy』コマンドでフォルダをバックアップ/同期させる」参照のこと)。

FreeFileSyncの概要

 FreeFileSyncは、オープンソースのソフトウェアである。開発元はFreeFileSync Projectだが、実際の開発はZenju氏が単独で行っているようだ。FreeFileSyncは、オープンソースで利用は原則無料だ。しかし、寄付をすることで、並列ファイルコピー機能や自動アップデート機能が有効になる「寄付バージョン」が利用できる。なお、ライセンスとしてはGNU GENERAL PUBLIC LICENSE(Ver.3.29)を採用している。

FreeFileSyncのGUI画面 FreeFileSyncのGUI画面
FreeFileSyncは、フォルダ同期のためのユーティリティー。GUIによる操作が可能だが、バッチ処理なども可能になっている。

 開発は比較的活発で、最後のアップデートは2018年12月12日に配布されている。「コマンドでWindowsアプリを楽々管理『Chocolatey』」で解説したChocolateyでもインストールは可能だが、アップデートが頻繁なのでパッケージの登録が追い付いておらず、タイミングによっては、古いバージョンをインストールしてしまうことがある。

 なお寄付バージョン以外は、アップデートは手動となり、FreeFileSyncのサイトからインストールファイルをダウンロードして行う。ただし、アップデートで設定は変更されないため、別途設定したバッチ処理などには影響は出ない。

 対象プラットフォームは、Windows XP〜10の32/64bit版、macOS 10.8〜10.14、Linux(Debian、CentOS、Fedora、Mint、SUSE、Ubuntu)となっており、日本語を含む30以上の言語に対応している。

 FreeFileSyncは、以下のWebページからダウンロードできる。原稿執筆時点のバージョンは、FreeFileSync 10.7である。

なぜFreeFileSyncを使うようになったのか

 筆者は、OneDrive上に仕事関連のファイルを置き、自分のどのPCからでもアクセスができるようにしている。こうしたクラウド側のストレージは、OneDriveの前身にあたるFolderShare(ByteTaxi。2005年にMicrosoftが買収しWindows Live FolderShareサービスとなる)の時代から利用してきた。FolderShareは、その後Windows Live Mesh(2008年から開始されたファイル同期サービス)、SkyDrive(2012年から開始されたファイル共有サービス。2014年に名称がOneDriveになる)と変化して、OneDriveになる。

 これらで問題になったのは、さまざまな原因で障害が発生し、作業が困難になることだ。障害原因が取り除かれても、同期処理自体に時間がかかり、PCの負荷が高くなってしまって、作業に支障を来すこともあった。

Windows 10のOneDriveの問題点

 Windows 10のOneDriveになっても、幾つかの問題があった。例えば、突然、同期設定がクリアされ、全ファイルの同期が開始されたり、同期途中でOneDrive.exeがクラッシュして再起動を繰り返したり、といった問題が過去にあった。

 OneDriveが大きな問題を起こさなくなったのは、Windows 10 Fall Creators Update(Ver. 1709。ビルド16299)でOneDrive File On Demandが搭載されたあたりからだ。現在は比較的落ち着いているが、今後も問題が発生しないという保証があるわけでもない。OneDrive自体に問題はなくても、停電やISPのメンテナンスなどでインターネットにアクセスできないことで、ファイルにアクセスができないといった問題もある。

 こうした問題があったため、もっとも作業時間が長い、自宅での作業は、ローカルファイル上で行うことにした。このときに導入したのがFreeFileSyncだ。FreeFileSyncの機能などについては後述するが、D:ドライブ上の仕事用フォルダとC:ドライブのOneDrive同期フォルダを1時間に1回のタイミングで同期させて、同じ状態にしている。実際には作業頻度が高い時間や就寝中など作業頻度が低い時間は、同期を行わないようにしている。ドライブを分けているのはハードウェア故障に対応するためだ。

筆者のFreeFileSyncを使ったファイル同期環境 筆者のFreeFileSyncを使ったファイル同期環境
ローカルにある仕事用フォルダをOneDriveの同期フォルダとFreeFileSyncで同期させている。

 OneDrive同期フォルダ側は変更があれば、自動的にOneDriveと同期が行われるため、最大1時間以内(平均30分)で、仕事用フォルダとクラウド側(OneDrive)の仕事用フォルダが同一になる。仕事用フォルダは、作業中の2〜3個のフォルダを除き、ほとんどが変更されることはなく、同期処理は短時間で終了する。このため、FreeFileSyncの同期が終わって数分程度でOneDrive側との同期も完了する。

 外出時に使うノートPCなど、他のPCは、全てOneDrive側の仕事フォルダをオフラインでも利用する設定にしている。外出先で利用するPCでは、全ての作業をOneDrive同期フォルダ上で行っている。

 外出前にPCの電源を入れておけば、OneDriveとの同期が行われるし、ローカルでの作業を出発直前まで行っても、移動中にOneDriveとローカルとの同期が完了しているため、必要なら出先で幾つかのファイルのみを同期させればよい。また外出先でファイルを変更しても、変更はすぐにOneDrive側と同期され、自宅に戻ってくるころには、オリジナル側も変更が完了している。

FreeFileSyncでファイルを失うリスクが大幅低減

 FreeFileSyncでは、同期中にファイルの削除が発生した場合、あらかじめ指定したフォルダにバージョン(日時)を付けてバックアップする機能がある。これにより、万一、OneDrive側でファイルを間違って削除する、あるいは何らかの原因でファイルが消えたような場合でもファイルはバージョン管理をしつつバックアップされているため、いつでも回復が可能になる。

 FreeFileSyncを使うことで、仕事用フォルダのコピーは、「ローカル」「OneDrive同期フォルダ」「OneDrive」の3カ所に存在することになり、ハードウェア障害(例えばローカルのHDDやSSDには故障によりファイルがアクセス不可能になるというリスクがある)やインターネット側やOneDrive側の障害などがあっても、どれかはアクセスが可能である。そのため、ファイルを失う可能性は絶対にないとは言い切れないものの、かなり低くできる。

 3つもコピーがあるのは多すぎると思われるかもしれないが、OneDriveで同期フォルダを使えば、最低でも2つのコピー(同期フォルダとOneDrive上のフォルダ)が作られてしまうのでコピーが1つ余計になるだけだ。

FreeFileSyncの仕組み

 FreeFileSyncは、2つのフォルダから「フィルター」に従って対象ファイル同士を「比較」し、「ファイル同期」処理を行う。また、これらの動作設定をファイルに記録し、コマンドラインから起動する「バッチ処理」機能を持つ。同期結果は「ログ」として記録できる。

 処理対象とする2つのフォルダは、ローカルやネットワークファイル共有などパスを使って指定できる「フォルダ」だけでなく、FTP(File Transfer Protocol。TCP/IPの標準的なファイル転送プロトコル)やSFTP(Secure FTP。SSHを使うFTP)を使った相手フォルダの指定も行える。

 また、Windows OS版では、MTP(Media Transfer Protocol)によるスマートフォンの内部ストレージなども指定可能だ(ただし、事前に接続を完了している必要がある)。このとき、フォルダパスは、「mtp:\スマートフォン名」となる。

「フィルター」機能とは

 「フィルター」は、対象ファイルやフォルダを特定するための仕組みだ。例えば、特定の拡張子やパスを使って、対象を除外/包含することができる他、対象とする最大、最小のファイルサイズや、ファイルが変更されてからの経過日数なども指定できる。これにより、テンポラリーファイルやテンプフォルダなどを含めないようにできる。Windows OS版では、最初から「System Volume Information」や「$Recycle.bin」などのフォルダ名や「Desktop.ini」「thumbs.db」といった管理用のファイルが除外対象として指定されている。

「比較」の挙動

 「比較」は、フィルターの結果、対象となった2つのフォルダ内にあるファイル同士が同一かどうかを判定する処理である。FreeFileSyncでは、「変更日時とファイルサイズ」「ファイル内容」「ファイルサイズのみ」の3つの判定条件から1つを選択できる。

 確実なのはファイル内容による比較だが、全てのファイルを読み出すために比較処理の時間が長くなるという欠点がある。一般的に使われるのは、「変更日時とファイルサイズ」で、ファイルを編集するアプリケーションが特殊なことをしていない限り、この条件でファイルの変更を検出できる。

 その他、シンボリックリンクが対象だった場合に比較を行うかどうか、比較対象としたときにシンボリックリンク自体を比較するのか、リンク先のファイルを比較するのかといった指定が可能だ。また、日時の比較で夏時間を考慮するかどうかといった設定もある。例えば、NTFSはUTCでファイル変更時刻を記録し、表示時のみローカル時間で行っているため、ファイル比較では夏時間の影響を受けないが、FAT 32は、ローカル時間で変更日時を記録するため、夏時間の影響を受ける可能性がある(もっとも日本では夏時間を実施していないので影響はない)。

「ファイル同期」処理の動作

 「ファイル同期」処理は、「同期」「ミラー」「更新」「カスタム」の4つの動作から1つを選ぶ。「同期」は、ファイルのデータベースを持ち、2つのディレクトリにある「ファイルの更新」「新規追加」「削除」を検出して、双方のフォルダが同一になるようにファイルのコピーや削除を行う。データベースを使うのは、ファイルの新規作成と削除を区別するためだ。過去に存在したファイルを記録していないと、比較時に片方のフォルダにしか存在しないファイルがあったときに、新規に作成されたものなのか、他方から削除されたものなのかを区別できないからだ。

ファイルの同期処理 ファイルの同期処理
ファイル状態だけを見たのでは、「ファイルの新規追加」と「ファイルの削除」は区別がつかない。FreeFileSyncの「同期」では、同期後の状態をデータベースに保存することで、前回の状態からファイルの追加と削除を区別する。

 「ミラーリング」は、もう一方のフォルダをオリジナル側と完全に同じにする。このときオリジナル側は全く変更されず、もう一方の側のフォルダに対して行われた変更は無視される。これはどちらかというとバックアップ(クローン)のための処理方法だ。

 これに対して「更新」は、片方のフォルダ(オリジナル側)で変更されたファイルのみをコピーする。これは、変更部分のみを保存する差分バックアップに相当する。

 「カスタム」は、ファイル比較の結果を5つの状態に分類し、それぞれで動作を指定するというものだ。対象となる2つのフォルダを「左」フォルダ、「右」フォルダと便宜的に区別したとき、比較の結果は「左にのみ存在」「左が新しい」「右が新しい」「右にのみ存在」「競合または分類ができない」の5つに分類できる(左右が等しい場合は処理対象にならない)。

 FreeFileSyncは、それぞれのケースでファイルをどうするかの選択肢がある。なお、「ミラー」と「更新」は、カスタム設定で同等の処理が指定できる(というよりもプリセットされたカスタム設定というべきかもしれない)。

ファイル比較の状態 動作
左のみに存在 右へコピー/左を削除/何もしない
左が新しい 右を更新/左を更新(古い方をコピーしてくる)/何もしない
競合/分類不可 双方残す/右を更新/左を更新
右が新しい 左を更新/右を更新(古いほうをコピーしてくる)/何もしない
右のみに存在 左へコピー/右を削除/何もしない
ファイル比較の結果を5つの状態とその動作

 なお、「同期」以外ではデータベースは使われないため、新規作成と削除は区別されず、削除が行われても新規にファイルが追加されても右、左のどちらかのフォルダにのみ存在するファイルとして処理が行われる。バックアップ用途の場合、片方のフォルダがオリジナルとなるため、動作としては、「コピー」「削除」「何もしない」といった選択肢のみで問題はない。

 ファイル同期処理の結果、削除が行われる場合、「ゴミ箱に移動」「完全削除」「バージョン管理して保存」の3つの方法を選択できる。バージョン管理して保存とは、指定されたフォルダに削除日時を使ってファイルを区別できるようにして移動する処理だ。これを選択しておけば、いつでも削除から回復が可能だ。

 このときのバージョン指定の方法として、「ファイル名に削除日時をつけて保存」「削除日時のフォルダを作って保存」「置換(マクロで保存先パスを指定)」の3つが指定可能だ。このうちファイル名、フォルダ名を使う場合に関しては、同一ファイルを多数保存しないように、保存日時や個数を指定して、制限を超えたものを削除する「バージョニング機能」を使うことができる。これにより、保存先フォルダに多数のファイルが「死蔵」されることを防ぐことができる。

保存先パスをマクロで指定可能

 マクロとは「%date%」「%time%」などのような表記を使って保存先パスを指定することで、保存時に具体的な日時を表す文字列に置き換えが行われ、保存先パスが決定する。「削除日時のフォルダを作って保存」と動作は似ているが、「年(%year%)」「月(%month%)」「日(%day%)」を示すマクロが利用でき、「\deletedfile\%year%\%month%\%day%\」などといったパスを指定できる。これに対して「削除日時のフォルダを作って保存」では、削除日時を使った「〜\年-月-日 時分秒\サブフォルダ」という形式に固定されている(上位パスにマクロを指定することは可能)。ただし、「置換」を使う場合には、バージョニングを行うことはできず、保存先フォルダの容量管理はユーザーが行う必要がある。

 FreeFileSyncは、単純に起動したり、ファイルの編集を指定して起動したりすると、GUIウィンドウを表示する。この状態では、対象フォルダを指定したり、「比較処理」「ファイル同期処理」を個別に起動したりすることが可能だ。

 ここで行った設定を「一括ジョブとして保存」すると、設定したファイル同期処理内容を一括処理ファイル「.ffs_batch」として保存する。この一括処理ファイルをコマンドラインの引数として指定すれば、FreeFileSyncは、GUIウィンドウを表示せずに「比較」「ファイル同期処理」を実行できる。Windows OSならば、タスクスケジューラーなどに登録しておけば、任意のタイミングで実行させることも可能だ。

 次ページでは、実際にFreeFileSyncの設定方法と、標準ツールのRobocopyと比べて優れている点などについて解説する。

       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。