Firebase StorageでMetadataを使う


はじめに

こんにちは。
沖縄でエンジニアをしている @yuji_azama です。

Firebase Storage、いろんなデータを手軽に保存できて便利ですよね。

Firebase Storage にデータをアップロードするとき、Metadata を指定できることをご存知ですか?
この記事では、ちゃんと使うと便利な Firebase Storage の Metadata について説明します。

※サンプルコードは Swift で記述します。

Firebase Storage Metadata とは

Firebase Storage で扱うデータには、Metadata と呼ばれるそのデータに関する付加的な情報(ファイルサイズや contentType など)を含めることができます。

メタデータを設定することで、検索性が良くなったり、Firebase console 上での可視性(イメージプレビュー)が良くなったりします。

実際に使ってみるのがわかりやすいので、さっそく解説していきます。

Metadata を使わないとどうなるか

まずは Metadata を使用せずに JPEG 画像を保存してみます。

let storage = Storage.storage()
let storageRef = storage.reference()
let ref = storageRef.child("image.jpg")
let uploadImage = imageView.image!.jpegData(compressionQuality: 1.0)! as NSData

ref.putData(uploadImage as Data, metadata: nil) { _, error in
    if (error != nil) {
        print("upload error!")
    } else {
        print("upload successful!")
    }
}

上記を実行すると、Firebase console 上では以下のように確認できます。

ファイル名を選択することで、画面右側にファイルの詳細が表示できます。
先ほどアップロードした image.jpg のタイプが application/octet-stream となっており、JPEGのファイルとして認識されていないことがわかります。

ファイルを保存する目的だけであればこれでも問題はありませんが、ファイルの数が増えてくると console 上で一目で何のファイルなのか確認できないのは何かと不便です。

Metadata を使ってみる

それでは、Metadata を用いてファイルのタイプを指定してみます。
Metadata を使うには、StorageMetadata クラスを使用します。
StorageMetadata をインスタンス化したら、contentTypeimage/jpeg を設定し、putData メソッドの引数に指定します。

let storage = Storage.storage()
let storageRef = storage.reference()
let ref = storageRef.child("image.jpg")
let uploadImage = imageView.image!.jpegData(compressionQuality: 1.0)! as NSData

let metadata = StorageMetadata()
metadata.contentType = "image/jpeg"

ref.putData(uploadImage as Data, metadata: metadata) { _, error in
    if (error != nil) {
        print("upload error!")
    } else {
        print("upload successful!")
    }
}

上記を実行し、Firebase console 上で確認してみましょう。
以下の様に、ファイルの詳細を表示するとタイプに image/jpeg が設定されていることがわかります。
それにともなって、画像ファイルのプレビューも表示されているため、ファイルの可視性が向上したと思います。

おわりに

この様に、metadata を適切に設定することで Firebase Storage が少し使いやすくなります。
他にも様々な metadata があったり、カスタムメタデータを設定したりできます。
メタデータ利用についてはまだあまり情報がないので、効果的な使い方がどんどん出てくると良いですね。

参考