初心者でもわかるGoogle Apps Script活用のススメ

【サンプルコード】GASでGoogleフォトの写真をドライブに日付ソート

2019年7月10日にGoogleドライブにGoogleフォトの写真や動画が自動同期がされなくなってしまいましたが、自動同期のヘビーユーザーの私にとってはこのニュースにかなり大きな衝撃を受けました。それまではスマホで撮影した写真が自動的にGoogleフォトに保存されて、それがさらに自動的にストレージ容量を使わずにGoogleドライブに同期されるなんてなんと素晴らしい機能なんだ!と思っていましたが、機能が使えなくなってやはりあの機能は素晴らしかったな。。。と痛感しております。

さて、今回の記事ではこの機能をなんとかGoogleドライブで再現できないかということで試行錯誤の上ほぼ同じ機能が使えるプログラムが完成したのでそのご紹介をしたいと思います。

ほぼ同じ機能と話しましたが、今は亡き純正の機能の中で2つの機能は残念ながら実現ができませんでした。

今回のプログラムで実現できなかった機能

  1. Googleドライブの容量を消費します
  2. リアルタイム同期ではありません

上記2つが純正機能の中でGASでは実現できなかった機能になります。
もしこの記事の読者のなかで、容量を消費したくない人は高画質設定でGoogleドライブには同期させずに運用するGoogleフォトの仕様通りの使い方をするしかありません。
本記事は、『Googleフォトにバックアップされているだけではなんとなく心配』と考えているそこのあなたに向けたGASプログラムのご紹介です。

リアルタイム同期ではない点も予めご了承下さい。

こちらはやろうと思えば、最短で1分間隔でプログラムを実行させてほぼリアルタイムを実現できるのですが、GASには様々な制限が設定されているためおそらく1日の途中で上限回数に達しエラー量産機となってしまうと思います。

今回のプログラムでは時間トリガーを設定できる項目を用意しているのですが、上記理由から1日1回実行するトリガーを設定する形でコードを組んであります。

プログラム実行の準備

さて、それではプログラムを実行する準備の説明をしていきます。今回はプログラム実行前の準備が少し大変ですが、お付き合いください。

まずはこちらをクリックして今回使用するスプレッドシートをコピーして下さい。

コピーしたスプレッドシートは『コピー ~ Googleフォト ⇔ Googleドライブ同期プログラム』というファイル名でマイドライブ直下に保存されていると思いますので、マイドライブを開いてファイルを探してみて下さい。

コピーが完了すると、自動的に下記のようなスプレッドシートが開きますので、一つずつ設定方法を説明していきます。

今回のプログラムでは、コピーしたスプレッドシートに設定情報を入力することでプログラムが起動するようになっています。

1. プログラムの実行承認とリダイレクトURIの取得

1つ目の手順は、プログラムの実行承認を行うことと設定に使用するリダイレクトURIを取得していきたいと思います。スプレッドシートを開いたら、まず上部の『ファイル』や『編集』などが書いてあるメニュー部分の一番右にある『Googleフォト ⇔ Googleドライブ同期』と書いてある部分をクリックして下さい。すると右の画像のような項目が表示されますので、『リダイレクトURIを取得』というボタンをクリックします。

すると、下記画像のような承認ダイアログが表示されますので、緑色の『続行』ボタンをクリックします。

『続行』ボタンをクリックすると、下記のようなアカウントを選択するダイアログが表示されますので、バックアップを行いたいアカウントをクリックして選択して下さい。

アカウントを選択すると、実際の承認処理が始まります。下記スクリーンショットを参考に承認処理を完了させて下さい。

『詳細』をクリック

『Backup Google Photos to Google Drive(安全ではないページ)に移動』をクリック

『許可』ボタンをクリック

これで、プログラムを起動するための承認処理が完了しました。

しばらくすると、セルC3にリダイレクトURIが入力されますので、URIが入力されたら1つ目の手順が完了です。

2. OAuthの認証情報を設定

今回のプログラムでは、Googleが提供するGoogle Photos APIを使用するのですが、自分のGoogleフォトにアクセスするための認証設定を行っていきます。まずはGoogle Cloud Platformというページにアクセスして設定を行っていきます。ページが開いたら、まずは新しいプロジェクトを作成します。(もうプロジェクトが作成済みの方は作成する必要はありません)

新しいプロジェクトを作成する

Google Cloud Platformにアクセスしたら、まずはプロジェクトの作成を行います。もしすでに作成したプロジェクトがある場合は、この工程は飛ばしてしまって構いません。作成したプロジェクトがない場合は、下記スクリーンショットを参考にプロジェクトの作成を行います。

1. 画面左上にあるプロジェクトの選択という部分をクリックします

2. 新しく表示されたウインドウの右上にある『新しいプロジェクト』をクリックします

3. 切り替わったページで任意のプロジェクト名を入力して作成ボタンをクリックします

(プロジェクト名はどのような名称でも構いません。わかりやすい名前をつけることをおすすめします)

4. 最初に表示された画面に戻りますので、『プロジェクトの選択』をクリックします

もし『プロジェクトの選択』という部分が見当たらない場合はページを再読込して下さい。

5. 出てきたウインドウから作成したプロジェクト名をクリックします

選択したら『プロジェクトの選択』という部分が作成したプロジェクト名に変更されていることをご確認下さい。

 

Photos Library APIを有効化する

次に、APIの有効化を行います。

1. 左側のメニューにある『APIとサービス』→『ライブラリ』をクリックします

2. Photos Library APIを検索する

下記スクリーンショットの赤枠の検索ボックスに『Photos Library APIと入力』

3. Photos Library APIが検索できたら矢印部分をクリックする

4. APIの『有効にする』をクリック

OAuth同意画面を作成する

画面左上にある3本横線をクリックして、サイドメニューを呼び出して下さい。

1. 『APIとサービス』→『OAuth同意画面』をクリックします

2. 表示された画面から『外部』を選択し、『作成』ボタンをクリック

3. 必要情報を入力して画面左下にある『保存』ボタンをクリック

必要情報は、『アプリケーション名』と『承認済みドメイン』という部分です。

『アプリケーション名』には任意の名前を入力できます。今回私は『Google Apps Script Excution Service』という名前を設定します。『承認済みドメイン』には『google.com』と入力して下さい。

認証情報を作成する

同意画面が作成できたら、認証情報を作成します。

1. 左側のサイドメニューで『認証情報』をクリックしてから、画面中央上部にある『+認証情報を作成』をクリック

2. 『+認証情報を作成』メニューから『OAuthクライアントID』をクリックします

2. 必要情報を入力して『作成』ボタンをクリック

今回必要な情報は『アプリケーションの種類』『アプリケーション名』『承認済みリダイレクトURI』になります。

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

『アプリケーション名』は任意の文字列を指定可能です。私は『Sync Google Photos to Google Drive』を入力しました。

『承認済みリダイレクトURI』には、スプレッドシートに一番最初にコピペした同じ項目名の値をコピペします。

すべて入力ができたら『作成』ボタンをクリックして下さい

3. クライアントIDとクライアントシークレットが作成されます

作成ボタンをクリックすると、クライアントIDとクライアントシークレットが作成されます。

取得認証情報をスプレッドシートに入力する

スプレッドシートに戻り、先程作成した『クライアントID』と『クライアントシークレット』を、同じ項目名が書いてある書いてあるセルの右側のセルにそれぞれ貼り付けます。クライアントシークレットはパスワードのようなものなので、他人には絶対に共有しない様に注意してください。

3. スプレッドシートIDをコピー&ペースト

次に、先程コピーしたスプレッドシートのID部分をコピーして所定のセルに貼り付けます。IDはスプレッドシートの一部にあります。

『https://docs.google.com/spreadsheets/d/10gzDeKE1qnyy3ISmALhKN-UBznCNGi0pj_qQP_qrgbM/edit#gid=0』

上記はサンプルURLですが、赤字部分の英数字がスプレッドシートのIDになります。

コピーして本スプレッドシートIDと書いてあるセルの右隣のセルに貼り付けます。

4. 保存先のフォルダ作成し、IDを設定

今回のコードでは、画像と動画を別フォルダで年フォルダ→月フォルダという形で階層で管理をするようになっています。

上記のような形で階層化されてファイルが保存されていきます。もし、写真と動画のフォルダを分けたくない場合は、『画像保存用フォルダID』と『動画保存用フォルダID』に入力する値を同じIDにしてください。

フォルダの作成

画像と動画を保存したい場所に2つのフォルダを作成します。フォルダの名前は何でも構いませんし、フォルダの場所もどこに作成しても構いません。

わかりやすい名前のフォルダをわかりやすい場所に作成して下さい。

フォルダIDをコピー&ペースト

作成ができたら、フォルダをダブルクリックして開き、フォルダのID部分をコピーして対象のセルに貼り付けてください。

『https://drive.google.com/drive/folders/19oAo_c8TfM7EWgZEvitf24w4QXl-lNmUa

上記はサンプルURLですが、赤字部分の英数字がフォルダIDになります。

子フォルダの年フォルダや月フォルダはプログラムで自動的に作成されます。

エラーメール送信先アドレスを入力

GASでファイルを入力保存する場合はファイルサイズに上限があります。50MBを超えるファイルを保存しようとするとエラーが出ますので、そのようなファイルがある場合は、ファイル名を記載したメールが処理の最後に送信されます。そのメール送信先のEメールアドレスを設定します。

『エラーメール送信先アドレス』と入力されたセルの右隣のセルに任意のメールアドレスを設定してください。プログラムで自動的にメールが送信されますので、アドレス間違いにご注意ください。

画像の場合は50MBを超えるファイルないと思いますが、動画の場合は上限を超えてしまう場合があります。

もしファイルサイズの大きなファイルをアップロードしたい場合はDriveAppクラスで保存するのではなく、Drive APIを利用する必要があります。Googleの公式リファレンスによると、Drive APIを利用すると最大で5120GBのファイルを保存できるようですが、GASの実行時間の制限によりそんなにでかいファイルを保存しようとするとまず間違いなくタイムアウトします。

Google Photos APIの利用許可を出す

すべての情報が入力できたら、APIの利用許可出すために、上部メニューの『Googleフォト ⇔ Googleドライブ同期』から『認証(初回のみ実行が必要です)』をクリックします。

認証がすでにされている場合は何も表示されず処理が終わります。認証がされていない場合は下記のようなサイドバーがスプレッドシートの右側に表示されます。

サイドバーの認証リンクをクリックしてください。すると新しいウィンドウが開き、一番最初に承認をしたときと同じような画面が表示されます。

赤枠部分をクリックして処理を勧めて下さい。

承認が完了するとタブを閉じるように促すメッセージが表示されますので、タブとスプレッドシートの右側に表示されているサイドバーを閉じましょう。

ここまでで初期設定はすべて完了しました。

自動アップロードプログラムの実行

準備は完了しましたので、メインのコードを実行していきます。

スプレッドシートの上部メニューにある『Googleフォト ⇔ Googleドライブ同期』というメニューから『バックアップを実行』をクリックしてみましょう。

こちらのプログラムでは、実行日の前日に撮影され、Googleフォトにアップロードされた画像や動画データをすべてGoogleドライブの対象のフォルダにアップロードするようにコードを組みました。

前日の写真のみを対象とした理由としては、6分間というGASの制限時間の中で処理を終わらせる事を念頭にコードを作成したことが理由になります。画像がたくさんあるとそれだけ処理時間がかかってしまうため、前日に撮影したファイルに限定して処理を行いました。もちろん前日に撮影したファイルが超大量にあれば、制限時間を超えてしまいエラーになる可能性もあります。

自動的に起動するように時間起動トリガーを設定する

プログラムが1日1回自動的に起動するようにトリガーを設定しましょう。やり方はとても簡単です。スプレッドシートの上部メニューにある『Googleフォト ⇔ Googleドライブ同期』をクリックして『時間起動トリガー設定』をクリックするだけで自動的に午前0時〜午前1時までの間にプログラムが起動するトリガーを設定することができます。

トリガー設定後は自動的にプログラムが起動してGoogleフォトのファイルをGoogle Driveにアップロードしてくれます。

時間起動トリガーを削除する

自動的に起動するトリガーが必要なくなった場合はトリガーを削除しましょう。削除しない限りプログラムは永続的に自動処理を続けてしまいます。

削除方法はトリガーの設定と同じくとても簡単です。スプレッドシートの上部メニューにある『Googleフォト ⇔ Googleドライブ同期』をクリックして『時間起動トリガー削除』をクリックすればトリガーが削除されて自動的にプログラムが起動することはなくなります。

まとめ

今回の投稿では、Google Apps Scriptを利用して、擬似的にGoogleフォトとGoogleドライブの自動同期を再現しました。冒頭でも述べましたが、完全再現とはいかず、Googleドライブにアップロードした画像ファイルは容量を消費してしまうことに注意してご利用いただければと思います。私個人としては、Googleドライブですべてを完結したいという考えが強いため、Googleフォトの写真や動画をGoogleドライブと同期させたいという願望が強くありました。やっぱりいくつものアプリを利用するのは煩わしいです。

もし私と同じ考えの方がいてこのページにたどり着いたとしたらぜひこちらのプログラムを活用していただければと思います。

Exit mobile version