2015年7月18日土曜日

rcloneコマンドでGoogle Driveを使う

ConoHaまとめ

rcloneコマンドでGoogle Driveを操作してみよう


今回は、rcloneコマンドでGoogle Driveを操作します。クラウド間の同期を確認しましょう。

手順としては以下のとおり。

  1. Google Drive APIの有効化
  2. 設定ファイルの作成
  3. rcloneで遊ぼう =)

'15/07時点での設定方法を記載しているサイトが見当たらなかったので手順を説明していきます。Googleはこの手のU/Iをコロコロ変更するので、この情報がいつまで役に立つのかは不明ですが、基本的な操作は変わらないはずです。

でも用語が変わってたりするとビビるよね =)。


Google Drive APIの有効化


Google Driveを操作するためのAPIを有効化したプロジェクトを作成します。プロジェクトでは、Google Drive APIを有効化し、OAuth認証のための「クライアントID」と「クライアント シークレット」を取得します。

1. プロジェクトの作成


Google APIs Consoleよりプロジェクトを作成します。


一度もAPIs Consoleを使用していない場合、EULAの確認があります。初期のプロジェクト名は「API Project」です。今回はこのまま使用します。というか、新規プロジェクト作成を探したのですが見つけることが出来なかっただけなんですけどね =)。

新規にプロジェクトを作成する場合、https://console.developers.google.com/projectで『プロジェクトの作成』を選択するか、以下のアイコンを選択し『プロジェクトの作成』を選択してください。こんなの分からないよね、、、


2. Google Drive APIの有効化


『APIと認証』→『API』のAPIライブラリにある『Drive API』を選択します。


『APIを有効にする』を選択し、APIを有効にします。


3. OAuth認証の有効化


『APIと認証』→『認証情報』のOAuthにある『新しいクライアントIDを作成』を選択します。


rcloneコマンドはクライアントPCで操作するアプリなので『インストールされているアプリケーション』を選択します。


同意画面で『サービス名』を設定します。

今回は「rclone test service」という名称にしました。この名称はOAuth認証画面で表示されます。変な名前にするとユーザーから怪しまれますよ =)。


『クライアントIDの作成』で『インストールされているアプリケーション』を選択アプリの種類は『その他』にしました。

これで作業は終了です。

以下のようにクライアントIDとクライアントシークレットが表示されていれば問題ありません。


設定ファイルの作成 (Google Drive)


Google Drive用の設定ファイルを作成します。

上記で作成したクライアントIDとクライアント シークレットを使用します。OAuth認証ではブラウザを使用します。

rclone configの指示に従って設定ファイルを作成していきます。


入力例


C:\tmp>rclone config
Current remotes:
Name                 Type
====                 ====
conoha               swift
conoha_old           swift
e) Edit existing remote
n) New remote
d) Delete remote
q) Quit config
e/n/d/q> n [Enter]
name> gdrive [Enter] (任意の名前で大丈夫)
What type of source is it?
Choose a number from below
 1) swift
 2) s3
 3) local
 4) google cloud storage
 5) dropbox
 6) drive
type> 6 [Enter] (Google Driveなので6を選択)
Google Application Client Id - leave blank to use rclone's.
client_id> *********************************************.apps.googleusercontent.com [Enter] (クライアントIDを入力します)
Google Application Client Secret - leave blank to use rclone's.
client_secret> ************************ [Enter] (クライアント シークレットを入力します)
Remote config
Go to the following link in your browser
https://accounts.google.com/o/oauth2/auth?client_id=*********************************************.ap
ps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=h
ttps%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state
Log in, then type paste the token that is returned in the browser here
Enter verification code>

verification codeは、ブラウザ経由で取得する必要があります。Ctrl-Cで中断せず、このままの状態で作業してください。

予めGoogle Driveの対象となるユーザーでログインしておきます。今回は、テスト用のユーザーでログインすることを強くお勧めします。テスト中の手違いで重要なファイルを削除してしまう罠が色々用意されているんですよorz

「https://accounts.google.com/o/oauth2/auth?client_id=*********************************************.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state」のURLをブラウザにコピペして接続します。

URLの先で認証を求めているので『承認する』を選択します。


verification codeが表示されるので、このコードを先ほどの入力画面に入力します。


入力例の続き


Enter verification code> ********************************************* [Enter] (ブラウザからコピペしてください)
--------------------
[gdrive]
client_id = *********************************************.apps.googleusercontent.com
client_secret = ************************
token = {(略)}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y [Enter]
Current remotes:
Name                 Type
====                 ====
conoha               swift
conoha_old           swift
gdrive               drive
e) Edit existing remote
n) New remote
d) Delete remote
q) Quit config
e/n/d/q> q [Enter]


これで作業は終了です。

許可したアクセス権は、「アカウントに接続されているアプリ」から取り消すことが可能です。テストが終わりましたら削除しておきましょう。




rcloneコマンドで遊ぼう =)


注意:

Google Driveは、ObjectStorage Swiftと異なりrootディレクトリ(入力例:gdrive:)から操作できます。うっかりroot指定で同期(sync)すると、既に存在しているrootのファイルをマルっと削除されます。仕様上、問題はないのですがウッカリ度が非常に高いです。しばらくは同期ではなくコピー(copy)を使ったほうがいいかもしれません。

この怖さを体感するまでは、テスト用のアカウントで動作確認をすることをオススメします。

ローカル → リモート(Google Drive)


入力例

ローカルにある「tdnet_test」ディレクトリを、Google Driveの「tdnet」フォルダに同期します。リモートにフォルダーがない場合でも、自動的に作成してくれます。便利。

C:\tmp>rclone sync tdnet_test gdrive:tdnet [Enter]
2015/07/18 13:48:56 Google drive root 'tdnet': Building file list
2015/07/18 13:48:56 Google drive root 'tdnet': Waiting for checks to finish
2015/07/18 13:48:56 Google drive root 'tdnet': Waiting for transfers to finish
2015/07/18 13:49:29 Waiting for deletions to finish
Transferred:      6202763 Bytes ( 172.07 kByte/s)
Errors:                 0
Checks:                 0
Transferred:            3
Elapsed time:  35.2040136s


できてる =)

リモート(ConoHa) → リモート (Google Drive)

入力例

ConoHaにある「tdnet」コンテナをGoogle Driveの「tdnet_conoha」フォルダにコピーします。クラウド間コピー、カッコイイ。

C:\tmp>rclone copy conoha_old:tdnet gdrive:tdnet_conoha [Enter]
2015/07/18 14:01:04 Google drive root 'tdnet_conoha': Building file list
2015/07/18 14:01:04 Google drive root 'tdnet_conoha': Waiting for checks to finish
2015/07/18 14:01:04 Google drive root 'tdnet_conoha': Waiting for transfers to finish
Transferred:       264639 Bytes (  42.79 kByte/s)
Errors:                 0
Checks:                 0
Transferred:            1
Elapsed time:  6.0393455s

その他のコマンド


  • rootのフォルダ一覧を表示する : rclone lsd gdrive:
  • フォルダ内のファイル一覧を表示する : rclone ls gdrive:[フォルダ名]
    ちなみにGoogle Docsで作成したファイルは表示されません。ファイルとして認識されていないのでしょう。容量制限には引っかからないらいいですしね。

参考


こんな感じ。


このとも」始めました!


紹介用URLから登録すると、もれなく1000円分のクーポンが貰えるはずです。ぜひこの制度、活用してみてくださいね。私にとっても悪く無い話らしいんですよ =)

0 件のコメント:

コメントを投稿