最近、Google Cloud StorageやAWS S3よりもCloudflare R2(以下、R2)を自社のプロジェクトで採用することが増えました。
やはりCDNとして確固たる地位を築いたCloudflareが提供するクラウドストレージということで、期待値が大きいからです。
このコンテンツでは、R2へファイルをバックアップなどの目的で同期させたいときに使えるrcloneについて紹介します。
rcloneとは
rcloneは、簡単に説明するとscpやrsyncの強化版です。以下のような特徴があります。
- クラウドストレージ含む多くのファイルストレージに対応
- サブコマンドがとても多く、様々なニーズに対応可能(差分取れるのが便利)
- ローカルディレクトリにマウントできるので
fuseのようにも使える - 実はGUIもある(
rclone rcd --rc-web-gui)
rcloneインストール
今回はM1 Macにインストールしていきます。
公式サイトでは、zipでも提供していますが、インストールスクリプトをダウンロードして実行していきます。
sudo -v ; curl https://rclone.org/install.sh | sudo bash$ sudo -v ; curl https://rclone.org/install.sh | sudo bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4707 100 4707 0 0 5181 0 --:--:-- --:--:-- --:--:-- 5195
Archive: rclone-current-osx-arm64.zip
creating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/
inflating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/git-log.txt [text]
inflating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/rclone [binary]
inflating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/rclone.1 [text]
inflating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/README.html [text]
inflating: tmp_unzip_dir_for_rclone/rclone-v1.64.2-osx-arm64/README.txt [text]
rclone v1.64.2 has successfully installed.
Now run "rclone config" for setup. Check https://rclone.org/docs/ for more details.インストールが成功したので、実行できるか確認します。
$ rclone version
rclone v1.64.2
- os/version: darwin 13.6 (64 bit)
- os/kernel: 22.6.0 (arm64)
- os/type: darwin
- os/arch: arm64 (ARMv8 compatible)
- go/version: go1.21.3
- go/linking: dynamic
- go/tags: cmount終わってから気づきましたが、MacではHomebrewを使ってインストールできます。
rcloneのR2用設定
まず、事前準備としてCloudflareへログインしてR2の画面へ行きます。
R2の画面にManage R2 API Tokensというリンクがあるので、そこへ移動しましょう。続いて、Create API Tokenを押下します。

API Tokenの設定画面に移ったら、任意の名称をつけ、権限とTTL(+オプションでIP制限)を設定します。


すべてが終わったら以下のようにTokenやAccess Keyが入手できます。

rcloneの初期設定
上記の事前準備が完了したら、rcloneを設定していきましょう。通常であれば、rclone configコマンドから設定していくのですが、今回はR2用の設定ファイルを作っていきましょう。
~/.config/rclone/rclone.confファイルを作成して、以下のように書きます。
[r2demo]
type = s3
provider = Cloudflare
access_key_id = [ここにAccess Key]
secret_access_key = [ここにSecret Access Key]
endpoint = https://[ここに自身のCloudflare Account ID].r2.cloudflarestorage.com
acl = privateCloudflareのAccount IDは、Websites→ドメイン選択→Overview画面のサイドバー下部にあります。
設定ファイルを作成したら、以下のコマンドで確認しましょう。
rclone config file以下のように出れば成功です。
$ rclone config file
Configuration file is stored at:
/Users/xxxx/.config/rclone/rclone.confrcloneを使ってみる
あらかじめdemo-bucketという名称でバケットを作成している前提で進めます。
以下のコマンドを打ってみましょう。
rclone tree r2demo:このようにすると、自身のアカウントのすべてのバケットと、その配下にあるファイル一覧が表示されます。
最後のコロンを忘れないように注意してください。(ローカルディレクトリとして認識されてしまいます)
すでに大量のファイルをR2にアップロードしている人はすべて表示されてしまうので気をつけてください。
バケットを指定する場合は以下です。
rclone tree r2demo:demo-bucket何も入っていないバケットだと以下のように表示されます。
$ rclone tree r2demo:demo-bucket
/
0 directories, 0 files特定のディレクトリの中身をすべてアップロードするには以下のコマンドを実行します。
rclone copy [アップロードするディレクトリ] r2demo:demo-bucket今回は以下のディレクトリを同期します。
$ tree
.
└── demodir
└── demodir2
├── test1.webp
└── test2.webpアップロードが完了すると、一覧は以下のように表示され、R2へアップロードされていることが確認できます。
$ rclone tree r2demo:demo-bucket
/
└── demodir
└── demodir2
├── test1.webp
└── test2.webp
2 directories, 2 filesなお、この後に新しいファイルを含めてアップロードしても、既存オブジェクトのModified(更新日時)は変更されません。変更された内容のみがアップロードされます。
rcloneはscp, rsyncの強化版
従来、ファイルを転送する場合はscpやrsyncコマンドを使ってきました。SFTPソフトやawscliやgsutilといったIaaS特有のコマンドの場合もあります。
rcloneは多くのクラウドストレージに対応している上に、rsyncのような差分対応やディレクトリへ直接マウントも可能です。
かなり優秀なOSSなので、クラウドストレージを多用する人はぜひ導入してみてください。