Google Takeoutの写真・動画に撮影日時を一括で編集するGoogle Takeout Connectの紹介

Googleフォトから写真をダウンロードすると、撮影日時がおかしくなってしまうことがあります。

以前までは、この問題を解決する方法として「Google Takeout Helper」というツールを使った手法が主流でした。

しかしながら「Google Takeout Helper」はCLIツールであり、コマンドラインを使用する必要があったため、パソコンに疎い人にとっては使いづらいものでした。

そこで、私が「Google Takeout Helper」を同機能を備え、使いやすいUIに仕上げたフリーソフト「Google Takeout Connect」を開発しました。

本記事では「Google Takeout Connect」の使い方と技術的な観点を紹介します。

目次

ダウンロード方法

Google Takeout Connectはオープンソースのフリーソフトで、現在はWindows版と、Apple SiliconのMacOS版を公開しています。

※GitHub Actionsでビルドしており、Intel版MacOSはランナーが少なく、ビルドを開始しても実行されずタイムアウトになるため、公開されておりません。

(1) 下記のリンクにアクセス

最新バージョン(ページ上で上が最新、下は過去バージョン)を見てください。

(2) Assetsの中から自身のPCのOSに合ったリンクをクリック

  • Windows:*_x64_ja-JP.msi
  • MacOS(Apple Silicon / M1以降):*_aarch64.dmg

(3) ダウンロードされたファイルを実行

Windowsの場合は「WindowsによってPCが保護されました」という画面が表示された場合は「詳細情報」をクリックし「実行」を選択してください。

MacOSの場合は「開発元を確認できない」という画面が表示された場合は「システム設定」⇨「プライバシーとセキュリティ」を開き、画面の下部に「このまま開く」をクリックしてください。

これらは、開発者証明書を取得していないため表示される警告で、アプリ自体に問題があるわけではありません。当然ウイルス等は含まれておらず、本アプリはオープンソースとして内部をすべて公開していますので、ご安心ください。

使い方

インストールが完了したら、アプリを起動してください。

(1) 入力ファイルを選択する

Google Takeoutで、Googleフォトのデータをダウンロードすると、zip形式で保存されます。

本アプリで「zipファイルを選択」または画面中央のエリアにGoogle Takeoutのzipファイルをドラッグ&ドロップします。

zipファイルは複数まとめて選択することもできます。Google Takeoutのデータがtakeout-20240101-001.zip、takeout-20240101-002.zipのように複数に分割されている場合は、すべてをまとめて選択してください。

(2) 出力フォルダを選択する

「出力フォルダ」を選択ボタンをクリックして、処理後のファイルを保存したいフォルダを指定します。

入力のzipファイルが入っているフォルダと同じ場所を出力先に指定しないようにしてください。

(3) 処理を開始する

「メタデータを復元する」をクリックすると、自動で処理が始まります。

ファイル数が多い場合は数分~数十分かかることがあります。進捗バーで処理を状況が確認できます。

(4) 結果を確認する

処理が完了すると、結果の画面が表示されます。

表示意味
成功撮影日時のメタデータを書き込めたファイル数
スキップJSONファイルが見つからず、メタデータを書き込めなかったファイル数
失敗処理中にエラーが発生したファイル数

「出力フォルダを開く」を押すと、処理済みのファイルが保存されたフォルダを開きます。

出力フォルダの構成

処理が完了すると、指定した出力フォルダの中には以下の2つのフォルダが作成されます。

出力フォルダ /
├── completed/   ← メタデータを書き込めたファイル(スキップも含む)
└── failed/      ← 処理中にエラーが発生したファイル

completed:撮影日時に書き換えられた写真・動画ファイルが保存されています。このフォルダの中身をそのまま別のサービスや端末に移行すれば、撮影日時順に並べることができます。

failed:エラーになったファイルが保存されています。動画ファイルの一部は対応していないた形式のためエラーになることがあります。

よくある質問

ExifToolやffmpegを別途インストールする必要がありますか?

必要ありません。Google Takeout Connectにはこれらのツールが同梱されており、追加のインストールなしにそのまま使えます。

zipファイルを展開してから使う必要はありますか?

必要ありません。zipファイルのまま指定すれば、アプリ内で自動的に展開して処理します。

スキップされたファイルはどうすれば良いですか?

JSONファイルが見つからない場合はスキップされますが、ファイル自体はcompletedフォルダに保存されています。Google Takeoutの仕様上、一部のファイルにはJSONファイルが存在しないことがあります。

処理中にアプリを閉じると…?

処理中に閉じようとすると確認ダイアログが表示されます。処理が中断されますが、それまでに完了したファイルは出力フォルダに保存されます。

Google Takeoutの使い方を含めた、一連の方法を解説

あわせて読みたい
撮影日時を保持したままGoogleフォトの画像や動画を一括ダウンロードする方法 スマホの写真や動画をGoogleフォト経由で移行したり、バックアップするとき、Googleフォトから画像をダウンロードすると撮影日時がダウンロードした日時になっており、...

使用技術

Google Takeout Connectでは、Rust・Tauri・Reactという3つの技術を組み合わせて構築されています。

ソースコードはGitHub上で公開しており、誰でも自由に閲覧・改変・再配布することができます。

技術選定の背景には「インストールしてすぐ使える」・「動作が軽い」・「WindowsのMacOSの両方に対応する」という3つの要件があり、それぞれの技術はその要件を満たすために採用されています。

UIの実装にはReact(TypeScript)とTailwind CSSを使用しています。webフロントエンドの技術をそのままデスクトップアプリの画面構築に活用できるという点が採用理由の一つですが、それ以上に重要なのは開発サイクルの速さです。ファイル選択・進捗表示・ログ一覧といったインタラクティブな要素は状態管理が複雑になりがちですが、Reactのコンポーネントモデルとhooksを使えばそれを整理しやすく、UIの変更を素早く反映させることができます。Tailwind CSSはクラス名を書くだけで、デザインが完結するため、別途CSSファイルを管理するコストがなく、個人開発において特に恩恵が大きい技術です。

ファイルの読み書き、zipの展開、メタデータの書き込みといった比較的重い処理はRustで実装しています。Rustを選んだ最大の理由はメモリ安全性と処理速度です。数千枚の写真を一括処理するユースケースでは、メモリリークや予期しないクラッシュは致命的になります。Rustはコンパイル時にメモリ管理の誤りを検出する仕組みを持っており、ガベージコレクタを持たないにもかかわらず安全なメモリ操作を実現します。またExifToolやffmpegといった外部ツールの呼び出しもRust側で制御しており、Windows環境でcmdが一瞬表示されるいわゆる「黒い画面の点滅」を防ぐためにCREATE_NO_WINDOSフラグを設定するなど、OSレベルの細かい制御もRustだからこそ自然に記述できます。

フロントエンドとバックエンドを一つのデスクトップアプリとしてまとめる役割を担うのがTauriです。同様のフレームワークとしてElectronが広く知られていますが、Electronがアプリ内にChromiumエンジンを丸ごと同梱するのに対し、TauriはOSが持つ標準のWebViewを利用するため、インストーラーのサイズが大幅に小さくなります。Google Takeout ConnectのWindows向けMSIインストーラーは数十MB程度に収まっており、ユーザーがダウンロードする際の負担を最小限に抑えられます。またTauriは単一のコードベースからWindows・MacOS両対応のインストーラーを生成できるため、個人開発が複数プラットフォームをサポートするうえで非常に合理的な選択です。

本アプリが依存しているExifToolとffmpegについては、ユーザーが別途インストールすることなく使えるよう、ビルド時にアプリへ同梱しています。特にWindows環境では、ExifToolの最新バージョンから必要になったPerl由来のDLL群(exiftool_files/ディレクトリ)の扱いが課題となりました。WiXというWindows向けインストーラー生成ツールはネストしたディレクトリ構造の扱いが苦手であるため、DLL群をzipファイルとして圧縮したうえで、アプリに同梱し、初回起動時にAppDataフォルダへ自動展開する仕組みを採用しています。これにより「アプリをインストールして起動するだけで、追加設定なしに動く」という体験を実現しています。

目次