Google「バックアップと同期」が謎だったので整理する

久しぶりに「Googleドライブ」と「バックアップと同期」を使ったら意味不明になっていた。

やりたいことは以下3つだけ。

複数パソコン間でのファイル共有。

スマホで撮影した写真・動画ファイルのクラウド保存と共有。
(端末内には保存しない。)

写真はパソコンからも参照。(ダウンロード)

ざっくり曖昧なまま図にしてみた。

そして、「バックアップと同期ツール」の設定を見る。

さらに、ブラウザでGoogleドライブを開く。

あれ、意味がわからない...。

「マイドライブ」
「マイiMac」

って何のことなのか...。

ややこしいので整理してみました。

基本的に持つと良い考え方

Googleのクラウドサービスとして「ドライブ」と「フォト」の2つがある。それぞれ個別に運用できる。

👉 マイドライブ - Google ドライブ 
👉 Google ドライブ - Google Play のアプリ 

👉 フォト - Google フォト 
👉 Google フォト - Google Play のアプリ 

「バックアップと同期」は、パソコン向けの「ドライブ」ツール。追加機能として、パソコン内の「画像と動画を抽出」してドライブ内指定ディレクトリと同期したり、Googleフォトにアップロードできる。

👉 バックアップと同期のダウンロード - 無料のクラウド ストレージ 

私の設定

複数パソコン内のディレクトリを指定して Googleドライブ で常に同期。
→ 「バックアップと同期」ツールで対応。

スマホで撮影した画像と動画はできるだけ Googleフォト にアップしてスマホからは消す。
→ スマホアプリ「Googleフォト」で対応。

写真や動画の実体はすべてクラウド上だけに置く。パソコン上ではブラウザ版、スマホ上ではアプリ版のGoogleフォトで参照・操作する。

「Googleドライブ」と「Googleフォト」は個別に運用する。

今は、できるだけ分かりやすくシンプルにしておく。

画像の画質やクラウドストレージ内容量やその料金などで細かく設定していこうと思っています。

まとめ

「マイ ドライブ」とは:

Googleドライブで同期されたディレクトリのクラウド側の呼び名、またはその機能。

「マイ iMac」とは:

パソコン上のディレクトリから画像と動画を自動抽出してGoogleドライブ内に同期する機能のこと。オプションとして、同時にGoogleフォトにもアップロードすることもできる。
(マイノートパソコン/マイパソコン/マイ MacBookPro なども同義。)

これに馴染めず私は混乱していたようです。

Googleクラウド上に保存するファイルサイズを増えさせての有料移行を推しているのだろう。

その他

Google ドライブの言語設定を変更したら「Googleドライブ」と「Google Drive」と同期ディレクトリが2つ作成されていてさらに混乱した。

どちらにしても「日本語カタカナ」と「スペース含み英字」のディレクトリ名になってるのキモス。

👉 【Googleフォト】一括で「高画質」へ変換して使用量を無制限にする方法 


【Android10】隠し機能の「画面録画機能(screenrecord)」を使うべし

 
「電源ボタン」の長押し

    ↓

「画面の保存」の長押し

で「画面の録画」ができるようになっております。

まだ、隠している機能のようで、

adb 経由で設定を有効化する必要があります。

 
adb shell settings put global settings_screenrecord_long_press true

あとは表示されるダイアログに従っていくだけでアプリなしで画面を動画で録画できるようになります。



録画された動画は、「動画」(Movies) 以下に保存されています。

以下も参考にどうぞ。

👉 【Android Q】 端末画面動画 (screenrecord) が簡単に録画録音できるのよ、アプリ不要! 

👉 🆕 【Android11】クイックタイルから「画面録画(スクリーンレコード)」が可能に 


「Kotlinx Json」の登場でサードパーティJSONライブラリは不要となる。

JSONのライブラリ何を使ってますか?

👉 square/moshi: A modern JSON library for Kotlin and Java. 
👉 FasterXML/jackson: Main Portal page for the Jackson project 
👉 google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back 

これらは、Javaベースで書かれています。Kotlin は100%相互運用可能ですが微妙に期待しない挙動をします。


data class User(
    val name: String,
    val email: String,
    val age: Int = 13,
    val role: Role = Role.Viewer
)

enum class Role { Viewer, Editor, Owner }


{
    "name" : "John Doe",
    "email" : "john.doe@email.com"
}


class JsonUnitTest {

    private val jsonString = """
            {
                "name" : "John Doe",
                "email" : "john.doe@email.com"
            }
        """.trimIndent()

    @Test
    fun gsonTest() {
        val user = Gson().fromJson(jsonString, User::class.java)

        assertEquals("John Doe",user.name)
        assertEquals(null, user.role)
        assertEquals(0, user.age)

//      User(name=John Doe, 
//           email=john.doe@email.com, 
//           age=0, 
//           role=null)

    }

}

デフォルト値が期待通りにパースできません。

kotlinx.serialization が登場!!

JetBrains産です。間違いないでしょう。



👉 Kotlin/kotlinx.serialization: Kotlin multiplatform / multi-format serialization 

- クロスプラットフォーム
- 非リフレクション
- アノテーション @Serializable
- Kotlin v1.3.30+


@Serializable
data class User(
    val name: String,
    val email: String,
    val age: Int = 13,
    val role: Role = Role.Viewer
)

enum class Role { Viewer, Editor, Owner }

class JsonUnitTest {

    private val jsonString = """
            {
                "name" : "John Doe",
                "email" : "john.doe@email.com"
            }
        """.trimIndent()

    @Test
    fun jsonTest() {
        val user = Json.parse(User.serializer(), jsonString)

        assertEquals("John Doe", user.name)
        assertEquals(Role.Viewer, user.role)
        assertEquals(13, user.age)

//      User(name=John Doe, 
//           email=john.doe@email.com, 
//           age=13, 
//           role=Viewer)

    }
}

Gson では無視されていたデフォルト値がきちんと使用されます。

以下のセットアップでどうぞ。


buildscript {
    ext.kotlin_version = '1.3.60'
    repositories { jcenter() }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
    }
}


apply plugin: 'kotlin' 
apply plugin: 'kotlinx-serialization'


repositories {
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0" // JVM dependency
}

👉 Kotlinx Json vs Gson - Juraj Kušnier - Medium