rclone とは?
rclone は、Cloudflare R2 や AWS S3、Azure Blob Storage などのクラウドストレージにファイルを同期アップロードするためのコマンドラインツールです。
似たようなコマンドラインツールとしては rsync
がありますが、rsync
が SSH での通信をベースとしているのに対し、rclone
は様々なクラウドサービスへの接続をターゲットにしています。
ここでは、同期先のストレージサービスとして Cloudflare R2 を使うことを想定し、ローカル PC 上のファイル(ディレクトリ)を同期してみます。
rclone のインストール
rclone
コマンドは Golang で実装されているため、単一の実行バイナリとして提供されています。
下記のページから各 OS 用の実行ファイルをダウンロードして、パスの通ったディレクトリに置くだけでインストールは完了です。
macOS や Windows であれば、パッケージマネージャでインストールするのが簡単です。
次のように rclone
コマンドを実行できるようになれば OK です。
$ rclone version
rclone v1.62.2
...
Cloudflare R2 用の API トークンの作成
R2 アクセス用のエンドポイント URL を確認する
rclone
による同期先として、Cloudflare R2 を使用する場合、設定ファイルでエンドポイント URL の指定が必要になります。
エンドポイント URL は、Cloudflare のアカウント ID を組み合わせたものになるので、次のようにアカウント ID を確認しておきます。
- Cloudflare ダッシュボード を開きます(Cloudflare のアカウントがなければ作成してください)。
- サイドバーから R2 を選択し、Account ID (32 文字の文字列)を確認します(R2 ではなく Workers のページなどでも確認できます)。
R2 のエンドポイント URL は、このアカウント ID を組み合わせた次のような URL です。
R2 用の API トークンを発行する
R2 バケットを rclone
コマンドで操作するには、AWS 互換の API トークン(Access Key ID と Secret Access Key)を使用します。
下記のように辿ると、R2 用の API トークンを発行できます。
- Cloudflare ダッシュボード を開きます
- サイドバーから
R2
を選択し、Manage R2 API Tokens
をクリックします。 Create API token
ボタンを押して、新規トークンの設定画面を開きます。- R2 バケットへの書き込みを許可するため、Permissions で
Edit
を選択してトークンを発行します。- Edit: Allow edit access of all objects and List, Write, and Delete operations of all buckets
次のような感じの API トークンが発行されれば成功です。
- Access Key ID:
04db978c136...省略...ae05e2ec7e
- Secret Access Key:
fef28946ebfa44e34b2e...省略...ffd9f76069eed6a039b
rclone でファイル同期
接続先を登録する
rclone
の接続先の情報は、下記のような設定ファイル (rclone.conf
) に記述しておく必要があります。
ここでは、r2
という名前の接続先を登録しています。
rclone
コマンドでは、R2 は S3 互換サービスの一種という扱いなので、type
には s3
を指定することに注意してください。
rclone config
コマンドを使って、質問形式で設定ファイルを作成・修正することもできます。
ディレクトリの内容を同期してみる
あとは、rclone sync
コマンドなどを使って、ローカルとリモートのファイルを同期させることができます。
次の例では、ローカルの dir
ディレクトリ内のすべてのファイルを R2 側の my-bucket
バケットに同期させています(バケットがない場合は自動的に生成されます)。
sync
という名前のサブコマンドですが、ディレクトリの内容が変化するのは、転送先のバケットのみです。
逆に、リモートのファイルをダウンロードしたいときは、引数の順番を入れ替えます。
(応用)rclone のオプションとサブコマンド
同期の内容を詳しく表示する (-v, –progress)
rclone sync
コマンドを -v
オプションを付けて実行すると、各ファイルがどのように処理されたかをデバッグメッセージの形で出力してくれます(-vv
とするとさらに詳しく表示します)。
rclone sync
コマンドは、オプションなしで実行すると、簡単な統計情報しか表示してくれないので、-v
オプションを指定して実行すると分かりやすいです。
$ rclone sync -v ./dir r2:my-bucket
2023/05/05 22:25:09 INFO : old/a.txt: Deleted
2023/05/05 22:25:09 INFO : old/b.txt: Deleted
2023/05/05 22:25:09 INFO : There was nothing to transfer
2023/05/05 22:25:09 INFO :
Transferred: 0 B / 0 B, -, 0 B/s, ETA -
Checks: 5 / 5, 100%
Deleted: 2 (files), 0 (dirs)
Elapsed time: 0.7s
各ファイルがどう処理されたかは、-P/--progress
オプションでも確認することができます。
こちらは、-v
オプションとは違い、現在処理中の内容がリアルタイムに切り替わりながら表示されます(最終的には統計情報のみが出力された状態になります)。
$ rclone sync --progress ./dir r2:my-bucket
Transferred: 67 B / 67 B, 100%, 22 B/s, ETA 0s
Checks: 102 / 209, 49%
Transferred: 1 / 1, 100%
Elapsed time: 4.3s
Checking:
* mcd-1992-tenbu-mega-cd-special/box.png: checking
* mcd-1992-tenbu-mega-cd-special/snap.png: checking
* mcd-1992-tenbu-mega-cd-special/title.png: checking
* mcd-1992-thunder-storm-fx/box.png: checking
* mcd-1992-thunder-storm-fx/snap.png: checking
* mcd-1992-thunder-storm-fx/title.png: checking
* mcd-1992-time-gal/box.png: checking
* mcd-1992-time-gal/snap.png: checking
Dry run 実行 (–dry-run)
実際には同期を行わず、どのように処理されるかをシミュレートしたいときは、--dry-run
オプションを付けて実行します。
同時に -vv
オプションを指定することで、各ファイルがどう処理されるのかを事前に確認できます。
$ rclone sync -vv --dry-run ./dir r2:my-bucket
同期するファイルをパターンで指定する
--include
オプションや --exclude
オプションを指定することで、ファイル名のパターンをもとに同期するファイルをフィルタリングすることができます。
次の例では、画像ファイルのみを同期しています。
$ rclone sync --include "*.{jpg,png,webp}" --delete-excluded ./dir r2:my-bucket
パターンに一致しなかったファイルを同期先から削除するには、delete-excluded
オプションを一緒に指定する必要があることに注意してください。
rclone
のフィルタリング機能は奥が深いので、詳しくは公式サイトの Rclone Filtering のページを参照してください。
登録されているリモートの一覧を表示する (listremote)
設定ファイル (~/.config/rclone/rclone.conf
) で登録されているリモートの一覧を表示するには、listremotes
サブコマンドを使用します。
$ rclone listremotes
r2:
バケットとファイルの一覧を表示する (ls)
特定のリモートのバケットとファイル(オブジェクト)の一覧を確認するには、ls
サブコマンドを使用します。