Google Drive からCLIでファイルダウンロードを行えるようにしたい

# 目的
Linuxからブラウザでアクセスすることなく，Google Drive上のプライベートファイルをダウンロードしてきたい．

# 概要
Google DriveのAPIとGdriveというものを使って，コンソールからコマンドでファイルを自由にダウンロードできるようにする．

# 手法

### 1. Google APIの設定

1. Google Cloud Console（https://console.cloud.google.com/）にアクセス
2. 「プロジェクトを作成または選択」からプロジェクトを作成する
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/d451d807-27f0-4312-af26-4def8dbade26.png)
    
3. 右上の新しいプロジェクトを選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/0ab4cca5-328d-4c48-b352-8ca9dadb9670.png)
    
4. プロジェクト名と必要であれば場所を追加し，作成
5. プロジェクトを作成という通知が表示されたらOK
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/acabf77a-ff8a-4c3e-a6cd-41f280dc054b.png)
    
6. 「プロジェクトを選択」からダッシュボードを開く
7. 検索欄にdrive apiと検索し，「Google Drive API」を選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/7944b71a-dc8d-4206-83e9-7908485dd59e.png)
    
8. Google Drive APIを有効化
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/fe604885-f39b-44b6-b1e5-a4f962a6984f.png)
    
9. 画面がこうなっていたらOK
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/50416823-b048-4f8a-83a3-770eb4df5ca7.png)
    
10. 「認証情報」を開き，「同意画面を構成」をクリック
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/9e823ab7-9a77-4a50-a26f-905a0c2e75f7.png)
    
11. 「開始」をクリック
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/659cc410-15e7-4855-aef5-ab551ef50a3a.png)
    
12. アプリ情報を記入
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/09dad13f-7bcb-403c-a151-16c3fbec266a.png)
    
13. 対象は「外部」を選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/636d231d-dee7-400c-8cc4-b9a9c63e0c37.png)
    
14. 連絡先情報を記入し，ポリシーに同意して続行
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/094b045a-8a50-4543-be41-380ea766f466.png)
    
15. 「作成」を選択
16. OAuth クライアントを作成を選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/70ca4acf-faa8-465b-9ee1-c26921430edd.png)
    
17. アプリケーションの種類はデスクトップアプリを選択（名前はご自由に）
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/72c45c26-a176-4ca2-867e-47f5bfaf8d0b.png)
    
18. このような表示が出たら下部にある「JSONをダウンロード」をクリック
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/b56f7903-3a61-4209-98ef-1f5c49ff1767.png)
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/ad912977-0330-43cd-9eb7-08376c9ee76d.png)
    
19. 閉じるとクライアントの欄に以下のように表示される
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/a640728f-f75a-41ee-bd48-a9fc0e1bbc53.png)
    
20. 「データアクセス」を選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/12eea808-733c-4e92-8c0c-9cec70ad24ba.png)
    
21. 「スコープを追加または削除」を選択し，「フィルタ」に「Google Drive API」と入力して適切なAPIを選択
例）ファイルのダウンロードをしたい場合⇒`…/auth/drive.readonly` 
　　メタデータを取得したい場合⇒`…/auth/drive.metadata.readonly`
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/bf97a8d1-d5a7-48e0-8b1f-db5df5aea825.png)
    
22. スコープが追加されていることを確認して「Save」
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/c9beeb6d-bfd9-4781-afe4-11e6e875e957.png)
    
23. 「対象」を選択し．テストユーザーの「＋Add users」から「gdrive」を使用するメールアドレスを追加
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3126418/e2e7ca8a-bebb-4773-8eb4-b98069db38ab.png)

24. 個人的に使うだけなら公開の必要はなし

### 2. gdriveのインストール

1. Githubからwgetコマンドを使用して，gdriveの最新版をダウンロード
    （ https://github.com/glotlabs/gdrive/releases ）

    ```
    $ wget https://github.com/glotlabs/gdrive/releases/download/3.9.1/gdrive_linux-x64.tar.gz
    ```
2. tarコマンドを使用してアーカイブを解凍
    ```
    $ tar -xzf gdrive_linux-x64.tar.gz
    ```
3. 解凍されたgdriveバイナリを/usr/local/bin/ディレクトリに移動し，実行可能に
    ```
    $ sudo mv gdrive /usr/local/bin/
    $ sudo chmod +x /usr/local/bin/gdrive
    ```
4．インストールが正しく行われたことを確認
    ```
    $ gdrive version
    gdrive 3.9.1
    Commit: unknown
    Rust: 1.75.0
    Arch: x86_64
    OS: linux
    ```
5. google driveアカウントの設定
    google driveアカウントをgdriveに追加する．
    ```
    $ gdrive account add
    ```
    実行すると、クライアントIDとクライアントシークレットを求められる．
    ```
    Client ID: xxxxxx.apps.googleusercontent.com
    Client secret: xxxxxxxx
    ```
6. URLを開き，認証
    以下のようなURLを開き，指示に従ってGoogleアカウントへのアクセスを許可
    ```
    Gdrive requires permissions to manage your files on Google Drive.
    Open the url in your browser and follow the instructions:
    https://accounts.google.com/xxxxxxxxx
    ```
    認証が完了すると，CLIに戻り，google driveへのアクセスが設定されます．

# gdriveの基本操作

- マイドライブのファイルリストを取得(デフォルト最大30個まで)
    ```
    $ gdrive files list
    ```
- ファイルのダウンロード
    ```
    gdrive files download <FILE_ID>
    ```
- ディレクトリごとダウンロード
    ```
    gdrive files download --recursive <FILE_ID>
    ```