Firebaseストレージの上手な使い方

記事
IT・テクノロジー

Firebaseストレージの上手な使い方

Firebase のストレージはインターネット上のサーバーにファイルなどの情報を置いて利用する事ができます。この記事では、Firebase のストレージ機能の利用の例を紹介してみました。

便利なオンライン配信の手段
Firebase ストレージの便利な使い方で多く利用されているのが、オンライン配信のための場所としての使い方です。

例えば、Web サイトで紹介するだけではなくより詳細の情報の入ったファイルをダウンロードして利用者に提供するようなサービスを作る場合、Firebase のストレージはその情報の置き場所として利用できます。

もっともシンプルで簡単な使い方の例は、提供するファイルを Firebase のストレージにアップロードしてそのリンクを提供するという方法でファイルを提供するサービスを実現できます。

一番簡単な情報の提供方法は?
一番簡単にファイルによる情報を提供する方法は Firebase コンソールを利用する方法です。Firebase コンソールに行って利用する Firebase のプロジェクトのストレージメニューから提供するファイルをアップロードして利用します。

Firebase コンソールからアップロードしたファイルをダウンロードするためのリンクを取得できるので、このリンクを使ってファイルを提供するだけです。 この方法の場合、特別なプログラムをしなくても Web ページからリンクを提供できればサービスを提供できます。

ファイルの詳細情報を保存する
ファイルの数が余り多くなく、個別にダウンロード用のリンクを利用する場合は余り必要ではありませんが、提供するファイルの数が増えてくると、提供できるファイルを一覧にして表示して必要なファイルを選んだりできると便利です。

こうした場合、それぞれのファイルがどんなファイルなのかファイルの中身の簡潔なまとめなどが一緒に表示できると便利です。

ファイル名の情報以外にこうしたデータを保存する方法はいくつかあります。

ファイルの情報に埋め込む
これは全てのフォーマットのファイルにできるわけではありませんが、ファイルの中身にこうした情報を埋め込んでファイルそのものから抜き出すという方法で得る事ができます。 ファイルそのもの以外の情報が必要ないので、一番シンプルな Firebase コンソールからファイルをアップロードする方法でも利用できるのは便利です。 ただし、必要な情報をファイルの中身から抜き出す必要があるので、情報の抜き出しには、プログラムが必要になってきます。

具体的な例は「Markdown」などのファイルです。GitHub のドキュメントなどで利用されているファイル形式ですが、ファイルのタイトルやサマリーなどをファイルの中に入れる事ができて、実際にファイルを表示する際にはその部分を除外して表示する事が可能です。

HTML よりは普通の文章に近い形で記述できるので、特別なビューワーがなくてもある程度参照することも可能なのでよく利用しています。

私の場合、ブログのデータは Markdown 形式で書いています。この中に、記事のタイトルや書いた日の日付、簡単な内容(サマリー)や記事内容の分類などをファイルのヘッダ部分に入れておいて、検索や整理の目的で利用しています。

Firebase ストレージのメタデータに保存する
Firebase のストレージにアップロードする際には、ファイルとは別にメタデータをファイルとペアにして保存することができます。

プログラムを使ってファイルをアップロードする場合はこの機能を利用できるので、メタデータを取り出せばファイルの一覧にファイルの中身の概要などを一緒に表示する事ができます。

Firebase コンソールでもメタデータを読み込む事ができますが、追加することができないので、メタデータの利用にはプログラムが必須になります。

Firebase のデータベースと一緒に利用する
3つ目の方法が、Firebase のデータベースにファイルの付加情報を入れておいて、ファイルの概要は Firebase のストレージではなく、Firebase のデータベースから取得する方法です。

この方法もファイルをアップロードする際に付加情報を一緒にデータベースに書き込む必要があるため、プログラムの利用が必要になります。やり方的には、Firebase ストレージのメタデータを利用する場合に似たやり方になります。Firebase のデータベースにデータを追加保存するため、プログラム的には少し余分なプログラムを書く必要があります。

このやり方の良い点は、Firebase のストレージのファイルにアクセスしなくても、ファイルの基本情報を取得する事ができるので、プログラムから扱う場合、アップロードは多少面倒ですが、その後の利用は効率的に行う事が可能になります。

一般的に、Firebase のストレージからファイルに関連した情報を取り出すよりは、高速で必要な情報を抜き出すことが可能です。これは、データベースのクエリーの機能を使えるので、アクセス事に必要なデータだけを取り出したりするのが簡単になるためです。

多くのオンラインデータを扱う場合はデータベースの利用が便利
多くのオンラインデータ(ファイル)を扱う場合、データベースを併用する方が便利な事が多くなります。これは、Firebase ストレージよりデータベースの方がデータの取り出し方に色々なオプションが使えるためです。

また、ストレージにあるファイルデータの検索などの機能をサポートする場合にもデータベースを利用する方が簡単に実装できます。

Firebase ストレージを利用する際の注意
Firebase ストレージはオンラインコンテンツを配信するのにとても便利です。しかし、いくつかの制限事項があるので、正しく制限事項を理解しておく必要があります。

セキュリティルールの適用範囲
Firebase のデータベース同様、Firebase ストレージのアクセスの権限の設定にはセキュリティルールが必要になります。Web アプリや Web サービスをより安全に運用するためにはセキュリティールールでアクセスの権限を適切に管理する事が重要です。

Firebase のストレージのセキュリティルールは誤解されやすい部分があるので注意が必要です。

Firebase のストレージのセキュリティルールはプログラムからの Firebase のストレージへのアクセスを管理するものです。従って、プログラムからのアクセスは Firebase のログイン(ユーザ認証)などによってアクセスの制限などを設定することが可能です。

しかし、ダウンロードの URL の場合、このセキュリティルールの適用外になります。Firebase のクライアント(Web ブラウザ)からダウンロードの URL を取得した場合は、この URL を使えば「誰でもダウンロード可能」になります。

セキュリティールールで制限できるのは、ダウンロードの URL をプログラムから取得する場合は、制限が可能です。しかし、この URL は共通なため、URL を知っていれば、プログラムを解さずに URL を指定することができる場合には誰でもダウンロードができることになります。

つまり、ある許可されたユーザーが URL をプログラムで取得した場合、この URL を他人と共有した場合、その URL で Firebase のセキュリティルール上では許可されていない人にもダウンロードが可能になります。

無料で誰でもダウンロード可能なオンラインコンテンツを配布する場合には殆ど問題にはなりませんが、有料でコンテンツを配信する場合には問題になる場合があります。

有料配布の解決策は?
以前の投稿でも紹介しましたが、有料でオンラインコンテンツを配信するには、バックエンドのサービスを作成して期間限定のダウンロード用の URL を取得する方法が実装も比較的簡単で利用価値が高いと思います。

この方法を利用した場合、URL に有効期限を設ける事ができるので仮に URL を共有された場合でも、利用できる時間を制限することができます。

無料のコンテンツと有料のコンテンツを配布する場合では、ダウンロードの URL の扱いにも木を配る必要があります。

まとめ
Web アプリや Web サービスでオンラインのストレージを利用する場合、プログラムでアクセスの制限などを作りたい場合が多くなります。その場合、Firebase のストレージを使うとプログラムや他の Firebase の機能との連携もやりやすくなります。

Firebase のオンラインストレージを利用する場合、似たような方法でセキュリティルールを利用してアクセスの権限を設定する事が可能です。しかし、ダウンロードの URL の扱いは制限事項を正しく理解して扱うことが大切です。特に有料でオンラインコンテンツを配布する場合はバックエンドを作成するなど工夫が必要になります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す