NextCloudを使ったGoogleドライブのバックアップと用量確保(個人用)

Androidスマホ、Pixelを長年使っているため、Googleにどっぷり依存しています。
少し前までPixel 5だったため、Googleフォトに無制限で保存できていたのでGoogleドライブの容量も気にしていなかったのですが、Pixel 7aに機種変更するとあっという間にストレージ容量を消費するようになりました..。
Google Oneは加入済み、Microsoft 365も加入しているのでPCのファイルはOne Driveに保存していも容量圧迫が早いです。

それに加えて先日こんなニュースもあったので、やはり自分でもバックアップを持っておこうかと思いGoogleドライブ・フォトのバックアップ環境を作ることにしました。
概要
NextcloudからGoogle integrationアプリを使ってGoogleドライブ・Googleフォトのデータをコピーします。

Googleアカウントの同期ではなくコピーするだけなので、バックアップ後にGoogleドライブやフォトのデータを削除してもNextcloud上には保存されています。
私の場合、NextcloudはConoHa WINGで動作しているのでNextcloud自体のバックアップはConoHa WINGのバックアップでOKとしています。
個人ユースのため頻繁なバックアップは必要ないことと、新しいデータはGoogle上に保存されている前提なのでバックアップ自体は「手動」です。

インポート後の容量を確認するとGoogleドライブとフォトで32GBほどだったので、Googleフォトに無制限で保存されているデータ(2021年以前とPixel 5で撮影分)は20GB以上あるようでした。

手順
Nextcloudのインストール
Googleデータのバックアップだけなら常時起動も必要ないと思うため、ご自身の環境に合った方法でインストールしてください。
費用を抑えたい場合は自宅サーバーで必要な時だけ起動でもいいと思いますが、後述するGoogle Cloudアプリの作成の都合があるため、ドメイン名でサーバーにアクセスできる環境は必要になります(今回は適切にドメインの登録が終わっている前提で進めます)。
個人的にはレンタルサーバーの容量も余っていること、メールでの2要素認証が簡単な理由からConoHa WINGにインストールしています。
ジャンクPCにインストールしたUbuntu Serverや、YunoHostでも簡単にセットアップできるので、ドメイン名でのアクセス設定ができる場合は自宅サーバーでも問題なく構築できると思います。
セットアップ後はNextcloudの「アプリ」ー「連携」からGoogle integrationをインストールしてください。
また、Nextcloudのセキュリティ対策は運用方法に合わせて各自で設定してください(レンタルサーバーで常時稼働なら対策は必須、自宅サーバーで月1回稼働なら基本的なID・パスワードだけなど)。
Google Cloudアプリの作成
Google integrationからGoogleアカウントのデータを読み込むために、Google Cloudアプリを作ります。
Google Cloudコンソールに移動
Google Cloudアカウントを持っている方はコンソールから、持っていない方はGoogle Cloudアカウントを登録します。
実際の支払いはありませんが、アカウント登録の際にクレジットカード情報が必要になるのでご注意ください。
新規プロジェクトの作成
コンソールから新しいプロジェクトを選択して、アプリの作成を始めます。

プロジェクト名はご自身でわかりやすい名前を付けて下さい。
今回は個人用でアカウントを登録しているので、場所は「組織なし」のままで進めます。

アプリが利用するAPIの有効化
プロジェクトの作成後はダッシュボードに移行するので必要なAPIを登録します。

左上の三本線をクリック、「APIとサービス」から「ライブラリ」を選択します。

Google integrationでは"Google Drive API"、"Google Calendar API"、"People API"、"Photos Library API"が必要なため、検索して有効化していきます。


OAuth同意画面の作成
APIの有効化後は認証情報の作成です。Google integrationを使うためにOAuth 2.0クライアントIDが必要になるため、最初にOAuth同意画面を作成します。

OAuth認証については以下のリンクを参考にしてください。私もいまいち理解していなかったのですが、また別記事でまとめようと思っています。
OAuth同意画面ではアプリ名とメールアドレスの登録が必須です。
また、Google integrationへのリダイレクトURIを指定する必要があるため、承認済みドメインにNextcloudを稼働させているサーバーのドメインを入力します。

注意点としては、承認済みドメインにはサブドメインは指定できないため、トップレベルドメインを入力する必要があります。
実際の稼働はサブドメインでも、承認済みドメインはトップレベルドメインを入力するため、自分が所有するドメインを使った方がトラブルは起きづらいと思います。
検証が必要なアプリでは無いため、レンタルサーバーのサブドメインで稼働、承認済みドメインはレンタルサーバー所有のトップレベルドメインで登録が可能とは思いますが、実際のところは試していないのでわかりません…。
次のスコープは何も指定しないままで大丈夫です。

テストユーザーには、ご自身のGoogleアカウントを登録してください。
あくまでも個人用で作っているので、テストアプリのままにしておく方が安全性は高いと思います。

保存して、概要が表示されたらOAuth同意画面の作成は終了です。

OAuth 2.0クライアントIDの作成
同意画面の作成が終わったので、これでやっとクライアントIDの作成ができるようになりました。
まず、Nextcloudの「管理」ー「データ移行」からGoogle integrationのリダイレクトURIを取得します。

アプリのダッシュボードに戻るので、APIとサービスから「認証情報を作成」ー「OAuthクライアントID」を選択します。

アプリケーションの種類はウェブアプリケーションを選択して下さい。

承認済みのリダイレクトURIには、先ほどNextcloudから取得したGoogle integrationのリダイレクトURIを入力します。

これでOAuthクライアントが作成できたので、クライアントIDとクライアントシークレットをコピーして、Google integrationの管理画面に入力します。

NextcloudとGoogleの接続
Nextcloudの「個人設定」-「データ移行」にGoogleへのサインインボタンが表示されているので、クリックします。
テストユーザーのため英語表示です。

Googleへのログイン画面が表示されるため、バックアップを取りたいアカウントを選択します(この手順なら1アカウントしか表示されていないはずです)。

手作りアプリのためGoogleの警告画面が表示されますが、自分で作ったアプリで安全性は確認済みと言う事で左下の「詳細」をクリックします。

さらに下の「〇〇〇(安全ではないページ)に移動」をクリックして、NextcloudとGoogleの連携は完了です。

Nextcloud側で「個人設定」ー「データ移行」を選ぶと、Google People、カレンダー、フォト、ドライブのデータをコピーできるようになっています。

後はインポートをクリックすると、Googleからデータがコピーされます。
量が多くてもバックグラウンドでコピーが続けられるので、Nextcloudは切断しても大丈夫です。
また、コピー済みのデータがあっても2度目以降のバックアップは重複せずに新しいデータだけがコピーされます。
備考
Google Cloudに登録する際にクレジット$300がプレゼント、や、クレジットを使い切った後は従量課金など、費用に関する事が記載されていますが、2023年12月時点では今回使っている4種類のAPIに費用は必要ありません。
もちろん、今後も永続的に無料かどうかはわかりませんが、仮に有料となるとデバイスへのバックアップにも費用が必要になると思うので、おそらくは無料のままかな?とは思います。
仮にGoogleドライブの容量が不足してもバックアップさえあれば気にせず削除できるようになるので、少しはGoogleへの依存も減るかな?便利だから無理かな?とは思っています。
ディスカッション
コメント一覧
まだ、コメントがありません